Comment builder sur Github actions ou Gitlab CI et déployer sur Coolify

By Hugo LassiègeNov 7, 20254 min read

J'utilise désormais Coolify sur toutes mes applications, que ce soit hakanai ou writizzy. C'est un excellent PAAS utilisable en self hosted.

Jusqu'à présent, j'avais toujours suivi le même schéma : le build et le run sur la même machine.

C'est pas une bonne pratique, mais sur des applications peu gourmandes et pour des soucis de cout, j'ai souhaité rester simple.

Sauf qu'entre-temps, je suis passé sur Nuxt 4 et les builds Nuxt4 sont significativement plus gourmands. Et quand je dis significativement, ils sont capables de mettre mes serveurs par terre.

Les deux serveurs que j'utilise sont :

  • un serveur CPX31 de Hetzner avec 4vCPU et 8Gb de ram
  • un serveur CX32 de Hetzner avec 4vCPU et 8Gb de ram

C'est censé être largement suffisant pour mon trafic.

Mais comme vous pouvez le voir sur ce graphique, désormais un build coute très cher et fait plafonner le CPU et la mémoire.

graphique de consommation
graphique de consommation

Bref, il est temps de changer de méthode pour builder sur un autre serveur et pour cela, il y a deux méthodes :

  • les build serveur
  • déléguer ces builds à Github action, Gitlab CI ou tenki.cloud

J'ai déjà deux serveurs, j'ai choisi de ne pas en prendre en plus pour uniquement les builds, ça me semble pas du tout intéressant si on prend en compte que je vais payer pour un usage effectif assez faible.

Bref, voyons comment on peut mettre en place le build sur Github et le déploiement sur Coolify

Créer une nouvelle app Coolify

Malheureusement, il n'est pas possible de convertir une ancienne app coolify qui utilise NixPacks ou un Docker build. Il faut impérativement recréer une ressource et cette fois-ci, il faut choisir l'option Docker Image

Choix du bon type de ressource
Choix du bon type de ressource

Il faut ensuite préciser le nom de son image, de mon côté je vais utiliser une image sur le repo ghcr.io (celui de Github).

Nom de l'image
Nom de l'image

Sur l'écran de configuration il faut ensuite recopier exactement tout le reste que vous aviez déjà sur votre ancienne application : le nom, le domaine, le port exposé, les variables d'environnement (!!!).

Dans un premier temps, vous aurez forcément un avertissement car vous répondez sur le même domaine que votre ancienne app, qui est toujours active. Donc il y a conflit de route sur Traefik.

D'ailleurs, pensez à désactiver le build automatique de l'ancienne app. Ma méthode a été de mettre un watch paths d'un dossier inexistant.

Activez les apis Coolify

Par défaut les APIs sont désactivées sur Coolify. Il faut donc d'abord les activer dans settings->advanced->Api settings en cochant la case API Access

Ensuite il faut aller dans Keys & Tokens et créer un token, attention à bien copier le token, vous ne le verrez plus par la suite. Attention il faut bien lui donner le droit "deploy" pour pouvoir déclencher un webhook.

Configurez vos secrets sur Github

Maintenant que l'application est créé, il faut récupérer sa webhook url dans Coolify et nous allons en créer deux secrets dans Github.

Webhook url
Webhook url

Il faut créer deux secrets au total :

  • COOLIFY_WEBHOOK qui sera égal à la valeur que vous avez noté auparavant
  • COOLIFY_TOKEN qui sera votre token d'api récupéré dans Coolify.

Ensuite il faut ajouter .github/deploy/deploy.yml dans votre repository avec ce contenu :

name: Build & Deploy App
on:
  push:
    branches: ["main"]
    paths:
      - '**'
      - '.github/workflows/deploy.yml'

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: "votreuser/votreapp"  

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3

      - name: Login to ghcr.io
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          push: true
          tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest

      - name: Deploy to Coolify
        run: |
          curl --request GET '${{ secrets.COOLIFY_WEBHOOK }}' --header 'Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}'

Attention, il ne faut pas encore pousser, il vous reste une dernière étape.

Par défaut votre serveur ne peut pas effectuer d'opération sur le registry Github. Pour ça il va falloir faire un premier login dessus. Il faut se logger en ssh sur votre machine. Ca peut se faire via coolify directement dans servers->terminal.

!

Login en ssh
Login en ssh

Il faut ensuite se logger sur avec docker login

docker login ghcr.io

  • Le login est votre login github
  • Le password est un personal access token qu'il faut générer depuis Github en cliquant sur votre image de profil settings->developper settings->Personal access tokens Personnellement, j'ai mis "no expiration" malgré le warning et j'ai choisi write:packages en termes de droit.

Et tout devrait être bon. Faites un push sur votre fichier de workflow. Cela doit déclencher un build sur github, puis un deploy sur Coolify. En prime, ça coute pas cher (24 secondes ici)

!

Build et deploy
Build et deploy

Evidemment, pensez aussi à couper votre ancienne application dans Coolify !


Share this:

Written by Hugo Lassiège

Software engineer, ex-freelance, ex-cofounder, ex-CTO. I love building things, sharing knowledge and helping others.

Copyright © 2025
 Eventuallycoding
  Powered by Bloggrify