Docker: Déployer avec GitHub Actions
Découvrez comment déployer vos conteneurs Docker avec GitHub Actions
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Docker cloud CaaS (Containers as a Service) prête à l'emploi qui offre de nombreux avantages, notamment :
- Déployez facilement vos conteneurs en production avec un simple
docker-compose up.- Nom de domaine personnalisable sécurisé en HTTPS (par exemple, https://api.votre-entreprise.com, https://www.votre-entreprise.com, https://backoffice.votre-entreprise.com).
- Performance optimale et sécurité renforcée grâce à une VM privée et dédiée.
- Mises à jour simplifiées en un clic.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Docker CaaS cloud hosting de Stackhero et déployer vos conteneurs en production !
GitHub Actions facilite l'automatisation de tâches comme le déploiement de vos conteneurs Docker sur des serveurs de production. Dans ce guide, vous allez découvrir comment configurer GitHub Actions de manière sécurisée et fiable pour déployer vos conteneurs Docker sur des environnements de staging et de production.
Pour cette configuration, vous allez maintenir deux branches : staging et production. À chaque fois que vous poussez du code sur l'une de ces branches, le déploiement sera automatiquement effectué sur l'instance Stackhero correspondante.
Avoir une instance de staging n'est pas obligatoire. Vous pouvez suivre ce guide en utilisant uniquement une instance de production. Cependant, pour limiter les risques et déployer en production en toute confiance, il est fortement recommandé de disposer à la fois d'une instance de staging et d'une instance de production. Il s'agit d'une pratique standard dans l'industrie et d'une bonne pratique qui permet d'éviter de nombreux problèmes potentiels.
Avant de commencer, assurez-vous de disposer d'un compte GitHub et d'un repository hébergeant votre code.
Création des services Docker
Commencez par vous connecter à votre tableau de bord Stackhero et créez deux services Stackhero, un pour le staging et un pour la production. Pour rester organisé et limiter les erreurs, vous pouvez renommer ces services en "Staging" et "Production".
Vous n'avez pas encore de compte Stackhero ? Vous pouvez en créer un gratuitement en deux minutes, puis déployer vos services Docker cloud en quelques clics seulement.
Exemple de services Docker
Configurer les variables d'environnement et secrets
Récupérer le nom de domaine et le mot de passe des certificats
Pour permettre à GitHub Actions de se connecter à votre service Docker Stackhero, vous aurez besoin de deux informations : le nom de domaine de votre service et le mot de passe des certificats.
-
Dans le tableau de bord Stackhero, sélectionnez votre service Docker "production" et cliquez sur le bouton "Configurer".
Obtenir les paramètres du service -
Copiez à la fois le "Nom de domaine" et le "Mot de passe des certificats Docker" pour les utiliser dans les étapes suivantes.
Obtenir les paramètres du service
Définir le nom de domaine et le mot de passe des certificats dans GitHub
-
Dans GitHub, ouvrez votre projet.
-
Allez dans Settings > Environments, puis cliquez sur New environment.
Configuration des environnements GitHub -
Dans le champ Name, saisissez "production" et validez.
Définir l'environnement -
Cliquez sur le bouton No restriction et choisissez Selected branches and tags.
Définir les restrictions d'environnement -
Cliquez sur Add deployment branch or tag rule, saisissez "production" dans le champ Name pattern, puis cliquez sur Add rule.
Définir la branche d'environnement
Définir la branche d'environnement -
Sous Environment secrets, cliquez sur Add secret.
Ajouter un secret -
Pour le secret, utilisez
STACKHERO_CERTIFICATES_PASSWORDcomme nom et collez votre mot de passe de certificats dans le champ Value.
Définir le secret du mot de passe des certificats -
Sous Environment variables, cliquez sur Add variable.
Définir les variables -
Utilisez
STACKHERO_ENDPOINTcomme nom et collez l'endpoint de votre service Docker dans le champ Value. Vous trouverez cet endpoint dans votre tableau de bord Stackhero.
Définir la variable endpoint
Si vous avez personnalisé le nom de domaine de votre service, pensez à utiliser votre domaine personnalisé à la place de <XXXXXX>.stackhero-network.com.
Personnaliser le fichier de configuration Docker Compose
Si le fichier
docker-compose.ymlest déjà à la racine de votre projet et que vous n'avez pas besoin de le personnaliser, vous pouvez passer cette section.
Par défaut, GitHub Actions recherche le fichier docker-compose.yml à la racine de votre projet. Si vous souhaitez utiliser un autre fichier ou une configuration différente, vous pouvez adapter la commande de déploiement. Par exemple, si vous utilisez notre boilerplate Node.js et Docker pour bien démarrer, vous pouvez créer une nouvelle variable d'environnement appelée STACKHERO_DEPLOY_COMMAND et la définir ainsi :
docker compose --env-file env.list --file docker/docker-compose.yml --file docker/docker-compose.production.yml up --build --remove-orphans -d
Configurer le workflow GitHub Actions
Sur votre machine locale, placez-vous dans votre dépôt Git et créez un dossier nommé .github/workflows. Dans ce dossier, créez un fichier nommé deploy-to-stackhero.yml avec le contenu suivant :
# File: .github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
description: Deploy branch "${{ github.ref_name }}" to Stackhero
on:
push:
# Ces branches déclenchent l'action de déploiement lors d'un push.
# Veillez à créer un environnement correspondant au nom de la branche dans GitHub (dans Settings > Environments).
# Ajoutez ensuite le secret STACKHERO_CERTIFICATES_PASSWORD et la variable STACKHERO_ENDPOINT dans cet environnement.
branches: [ "production", "staging" ]
jobs:
Deploy:
environment: ${{ github.ref_name }}
runs-on: ubuntu-latest
steps:
- uses: stackhero-io/github-actions-deploy-docker-containers-to-stackhero@v1
with:
# Le secret STACKHERO_CERTIFICATES_PASSWORD et la variable STACKHERO_ENDPOINT doivent être définis dans l'environnement de branche correspondant sur GitHub.
certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
# deployment_command est optionnel. Utilisez-le si vous souhaitez personnaliser la commande Docker Compose.
deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
Vous pouvez valider vos modifications avec :
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Pour créer une branche production, exécutez :
git checkout -b production
Puis poussez votre branche production sur GitHub :
git push --set-upstream origin production
Une fois votre code poussé, GitHub Actions le déploiera automatiquement sur votre instance Stackhero de production. Vous pouvez suivre la progression du déploiement dans l'onglet Actions de votre projet GitHub.
GitHub Actions ayant déployé en production
C'est tout. Votre configuration est maintenant prête pour déployer automatiquement votre code en production avec GitHub Actions.
Création de l'environnement de staging
La mise en place de l'environnement de staging suit les mêmes étapes que pour la production. Il suffit de répéter le processus en utilisant staging à la place de production.
Ensuite, créez une branche staging avec :
git checkout -b staging
Et poussez votre branche staging sur GitHub :
git push --set-upstream origin staging
Après cela, GitHub Actions déploiera automatiquement votre branche staging sur l'instance Docker dédiée au staging.
Utiliser des variables d'environnement dans docker-compose.yml
Vous pouvez définir des variables d'environnement dans votre projet GitHub qui seront accessibles dans votre fichier docker-compose.yml. C'est très utile si vous souhaitez déployer sur des domaines différents (par exemple, staging.my-company.com pour le staging et my-company.com pour la production).
- Dans GitHub, allez dans Settings > Environments et créez une variable d'environnement nommée
WEBSITE_DOMAIN. - Pour l'environnement de staging, définissez
WEBSITE_DOMAINsur "staging.my-company.com". - Pour l'environnement de production, définissez
WEBSITE_DOMAINsur "my-company.com".
Ensuite, mettez à jour votre fichier .github/workflows/deploy-to-stackhero.yml pour transmettre la variable WEBSITE_DOMAIN à l'action GitHub Stackhero :
name: Deploy to Stackhero
description: Deploy branch "${{ github.ref_name }}" to Stackhero
on:
push:
branches: [ "production", "staging" ]
jobs:
Deploy:
environment: ${{ github.ref_name }}
runs-on: ubuntu-latest
steps:
- uses: stackhero-io/github-actions-deploy-docker-containers-to-stackhero@v1
with:
certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
env:
WEBSITE_DOMAIN: ${{ vars.WEBSITE_DOMAIN }}
Mettez ensuite à jour votre fichier docker-compose.yml pour utiliser la variable WEBSITE_DOMAIN à la place d'un nom de domaine en dur :
services:
test:
image: nginx
labels:
- "traefik.enable=true"
- "traefik.http.routers.test.rule=Host(`${WEBSITE_DOMAIN}`)" # Utilise la variable d'environnement WEBSITE_DOMAIN comme nom de domaine.
- "traefik.http.routers.test.tls.certresolver=letsencrypt"
Aller plus loin
Il est conseillé de protéger les branches production et staging pour éviter les pushs directs. Avec la protection des branches activée, les modifications passent par des pull requests, qui doivent être relues et fusionnées par une personne disposant des droits nécessaires. Cela permet de valider les fonctionnalités sur la plateforme de staging avant de les promouvoir en production après validation.
En suivant ce workflow, vous garantissez à la fois la sécurité (seuls les membres autorisés de l'équipe peuvent déployer sur le staging et la production) et la fiabilité (en testant les nouvelles fonctionnalités sur une plateforme de staging avant de les déployer en production).