Sync repo GitHub + service FiveM
Ce tutoriel configure un déploiement automatique depuis GitHub vers ton service FiveM HebergTonServ.
server.cfg-> racine du serviceresources/*-> dossierresourcesdu service
Dans resources/, tous les dossiers sont synchronisés (ajout/modif/suppression), sauf resources/[assets] qui reste ignoré.
Le workflow utilise --delete :
- si un fichier/dossier est supprimé du repo, il est supprimé aussi sur le serveur
- les chemins exclus restent protégés (pas envoyés, pas supprimés)
Structure locale recommandée
private_server_cfx/
├─ .git/
├─ .github/
│ └─ workflows/
├─ resources/
│ ├─ [assets]/
│ └─ ...
└─ server.cfgPourquoi un dossier resources/[assets]
Crée resources/[assets] pour les ressources lourdes :
- vêtements / peds
- véhicules
- MLO / maps
- gros packs stream
Pourquoi l’exclure :
- repo plus léger
- push plus rapides
- moins de risques de timeout CI
- évite de renvoyer de gros fichiers à chaque commit
.gitignore à la racine
resources/\[assets\]/
.env
*.env
.vscode/
.idea/
logs/
cache/
backups/
db/
alpine/
txData/
*.log
node_modules/Si resources/[assets] a déjà été tracké auparavant :
git rm -r --cached "resources/[assets]"
git commit -m "Ignore heavy assets folder"
git pushWorkflow GitHub Actions
Chemin :
.github/workflows/deploy-hts.ymlLe workflow actuel :
- checkout du repo
- récupère les infos du commit (titre, description, SHA, auteur, branche)
- envoie un message Discord “deployment started” (optionnel)
- déploie via SFTP (
lftp mirror -R --delete) - envoie un message Discord “completed” ou “failed” (optionnel)
Secrets GitHub à créer
GitHub -> Settings -> Secrets and variables -> Actions -> New repository secret
Secrets SFTP obligatoires
SFTP_HOSTSFTP_PORTSFTP_USERSFTP_PASS
Secret Discord optionnel
DISCORD_WEBHOOK_URL
Si DISCORD_WEBHOOK_URL n’est pas présent, le deploy continue normalement (les étapes Discord sont ignorées).
Important pour SFTP_HOST
Depuis SFTP Details, tu peux voir par exemple :
sftp://game2.hebergtonserv.com:2022Pour SFTP_HOST, garde uniquement l’hôte :
game2.hebergtonserv.comDonc supprimer :
sftp://:2022
Le node peut varier (game1, game2, game4, etc.).
SFTP_PORT contient le port (souvent 2022).
Exclusions protégées côté serveur
Chemins exclus du deploy :
resources/[assets]alpinebackupslogscachedbtxData.envnode_modules- fichiers
*.log - dossiers Git (
.git,.github,.vscode)
Avec --delete actif, ces exclusions ne sont pas supprimées côté serveur.
Ajouter un dossier sensible à ne pas toucher
Pour un nouveau dossier sensible (ex: mySecretData) :
- Ajoute-le dans
.gitignore:
mySecretData/- Ajoute-le aussi dans les
--excludedu workflow :
--exclude '^mySecretData($|/)' \Règle pratique :
- ne jamais versionner ->
.gitignore - ne jamais modifier/supprimer côté deploy ->
--exclude
Focus backups
backups/ est protégé dans les deux sens :
- côté serveur HebergTonServ : non modifié, non supprimé
- côté PC/repo : non commit/push, donc non envoyé
Si un utilisateur ajoute des sauvegardes via le panel dans backups/, elles restent intactes après les déploiements.
Branche master au lieu de main
Si ton repo utilise master, remplace dans le workflow :
branches:
- mainpar :
branches:
- masterRésultat attendu
Après un Commit + Push origin depuis GitHub Desktop :
- GitHub Actions lance le deploy
- Discord reçoit le statut (si webhook configuré)
server.cfgetresourcessont synchronisés- les suppressions locales sont répercutées côté serveur
resources/[assets]et dossiers sensibles exclus ne sont pas touchés


