FiveM Débutant 10 min de lecture

Sync repo GitHub + service FiveM

Déployer automatiquement un serveur FiveM depuis GitHub vers HebergTonServ via GitHub Actions + SFTP, avec exclusions et logs Discord.

Image non disponible

Support Technique

Besoin d'aide ? Notre équipe est disponible 24/7 pour vous assister.

Sync repo GitHub + service FiveM

Ce tutoriel configure un déploiement automatique depuis GitHub vers ton service FiveM HebergTonServ.

  • server.cfg -> racine du service
  • resources/* -> dossier resources du 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.cfg

Pourquoi 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 push

Workflow GitHub Actions

Chemin :

.github/workflows/deploy-hts.yml

Le 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_HOST
  • SFTP_PORT
  • SFTP_USER
  • SFTP_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:2022

Pour SFTP_HOST, garde uniquement l’hôte :

game2.hebergtonserv.com

Donc 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]
  • alpine
  • backups
  • logs
  • cache
  • db
  • txData
  • .env
  • node_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) :

  1. Ajoute-le dans .gitignore :
mySecretData/
  1. Ajoute-le aussi dans les --exclude du 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:
  - main

par :

branches:
  - master

Ré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.cfg et resources sont synchronisés
  • les suppressions locales sont répercutées côté serveur
  • resources/[assets] et dossiers sensibles exclus ne sont pas touchés