GHCR
Ligne de commande
-
Générer un Personal Access Token (PAT)
Aller sur GitHub et générer un PAT avec les droits
repo
etpackages
.Se connecter à GitHub, aller dans
Settings
puisDeveloper settings
. Une fois dansDeveloper Settings
, dansPersonal access tokens
choisirTokens (classic)
et générer un nouveau token avec les droits sélectionnés (durée et authorisationread:packages
). -
Se connecter à GHCR avec Docker
Fenêtre de terminal echo "<TOKEN>" | docker login ghcr.io -u <USERNAME> --password-stdin -
Télécharger et exécuter une image
Fenêtre de terminal docker pull ghcr.io/<USERNAME>/<IMAGE_NAME>docker run -d -p <PORT_HOST>:<PORT_CONTAINER> ghcr.io/<USERNAME>/<IMAGE_NAME> -
Déconnecter de GHCR
Fenêtre de terminal docker logout ghcr.io
GitHub Actions
Nous utiliserons GitHub Actions avec ghcr pour construire et mettre en ligne nos images.
Créer les dossiers .github/workflows/
, à la racine du projet.
name: GitHub Container Registry
on: push: branches: - main
GHCR
Pour monter et pousser nos images docker nous utiliserons ghcr, dans le fichier ghcr.yaml
ajouter les commandes suivantes.
Configurer
name: GitHub Container Registry
on: push: branches: - main
jobs: ghcr: runs-on: ubuntu-latest permissions: contents: write packages: write attestations: write id-token: write
steps: - name: Checkout repository uses: actions/checkout@v4
Se connecter
name: GitHub Container Registry
on: push: branches: - main
jobs: ghcr: runs-on: ubuntu-latest permissions: contents: write packages: write attestations: write id-token: write
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Logout from GHCR run: docker logout ghcr.io
Construire et pousser l’image
name: GitHub Container Registry
on: push: branches: - main
jobs: ghcr: runs-on: ubuntu-latest permissions: contents: write packages: write attestations: write id-token: write
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Api Docker image run: | docker build -t ghcr.io/${{ vars.REPO_OWNER }}/<TAG_NAME>:latest ./<APP_CODE> docker push ghcr.io/${{ vars.REPO_OWNER }}/<TAG_NAME>:latest
- name: Logout from GHCR run: docker logout ghcr.io
Déployer sur un VPS
Pour le déploiment avec SSH nous utiliserons l’utilitaire GitHub Actions, appleboy.
Connexion avec identifiant et mot de passe
name: GitHub Container Registry
on: push: branches: - main
jobs: ghcr: runs-on: ubuntu-latest permissions: contents: write packages: write attestations: write id-token: write
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Set lowercase repository owner run: echo "REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
- name: Build and push Api Docker image run: | docker build -t ghcr.io/${{ env.REPO_OWNER }}/<TAG_NAME>:latest ./<APP_CODE> docker push ghcr.io/${{ env.REPO_OWNER }}/<TAG_NAME>:latest
- name: Logout from GHCR run: docker logout ghcr.io
deploy: needs: [ghcr] runs-on: ubuntu-latest steps: - name: Deploy using ssh uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} password: ${{ secrets.SSH_PASSWORD }} port: ${{ secrets.SSH_PORT }} script: | echo ${{ secrets.GHCR_PAT }} | docker login ghcr.io -u ${{ github.REPOSITORY_OWNER }} --password-stdin docker pull ghcr.io/${{ vars.REPO_OWNER }}/<TAG_NAME>:latest docker compose.prod.yaml docker logout ghcr.io
Connexion avec identifiant et clé privée ssh
Au préalable, configurer les clés sur le VPS, vous pouvez créer des clés dans votre VPS Ubuntu avec la documentation dans la section Clés
et ajouter le secret SSH_KEY
dans le répertoire GitHub (clé privée).
...
deploy: needs: [ghcr] runs-on: ubuntu-latest steps: - name: Deploy using ssh uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_KEY }} port: ${{ secrets.SSH_PORT }} script: | echo ${{ secrets.GHCR_PAT }} | docker login ghcr.io -u ${{ github.REPOSITORY_OWNER }} --password-stdin docker pull ghcr.io/${{ env.REPO_OWNER }}/<TAG_NAME>:latest docker compose compose.prod.yaml docker logout ghcr.io
Configurer les clés ssh pour GitHub documentation.
Configurer sur le VPS
Créer un fichier compose.prod.yaml
services: app: image: ghcr.io/${{ env.REPO_OWNER }}/<TAG_NAME>:latest ports: - "XXXX:XXXX"