Skip to content

Documentation du Registre de Conteneurs GitHub

GHCR

Commandes

Générer un Token d'Accès Personnel (PAT)

Dans les paramètres GitHub, générer un PAT avec les packages appropriés.

Se connecter au compte GitHub, Settings, Developer settings. Dans Developer settings, dans Personal access tokens choisir Tokens (classic) et générer un nouveau token avec les droits (durée et autorisation lecture:packages).

Connexion à GHCR avec Docker

sh
echo "<TOKEN>" | docker login ghcr.io -u <USERNAME> --password-stdin

Télécharger et exécuter une image

sh
docker pull ghcr.io/<USERNAME>/<IMAGE_NAME>
docker run -d -p <PORT_HOST>:<PORT_CONTAINER> ghcr.io/<USERNAME>/<IMAGE_NAME>

Déconnexion de GHCR

sh
docker logout ghcr.io

GitHub Actions

Pousser et déployer des images avec GHCR

Créer un workflow .github/workflows/ghcr.yaml.

yml
name: GitHub Container Registry

on:
  push:
    branches:
      - main

jobs:
  ghcr:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      attestations: write
      id-token: write

    # Vérifier le référentiel
    steps:
    - name: Checkout référentiel
      uses: actions/checkout@v4

    # Connexion GHCR
    - name: Login to GitHub Container Registry
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Construire et pousser l'image Api Docker
      run: |
        docker build -t ghcr.io/${{ vars.REPO_OWNER }}/<TAG_NAME>:latest ./<APP_CODE>
        docker push ghcr.io/${{ vars.REPO_OWNER }}/<TAG_NAME>:latest

    # Déconnexion GHCR
    - name: Logout from GHCR
      run: docker logout ghcr.io
yml
.github/workflows/ghcr.yaml
...

  deploy:
    needs: [ghcr]
    runs-on: ubuntu-latest
    steps:
        - name: Déployer en utilisant 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/${{ env.REPO_OWNER }}/<TAG_NAME>:latest
              docker compose.prod.yaml
              docker logout ghcr.io
yml
.github/workflows/ghcr.yaml
...

  deploy:
    needs: [ghcr]
    runs-on: ubuntu-latest
    steps:
        - name: Déployer en utilisant 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.prod.yaml
              docker logout ghcr.io

Configurer les clés ssh pour la documentation GitHub.

Configurer sur le VPS Créer un fichier compose.prod.yaml

yml
./PROJECT_NAME/compose.prod.yaml
services:
  app:
    image: ghcr.io/${{ env.REPO_OWNER }}/<TAG_NAME>:latest
    ports:
    - "XXXX:XXXX"