Développement Web

Déployer Pocketbase sur Coolify : tutoriel pratique 2026

14 min de lecture

Déployer Pocketbase en production sur un VPS via Coolify est l’une des combinaisons les plus efficaces en 2026 (informations vérifiées en avril 2026, susceptibles d’évoluer) : un binaire Go performant, un déploiement automatisé Git-driven, HTTPS gratuit, backups intégrés. En 30 minutes vous avez un backend production-ready accessible en HTTPS depuis le monde entier. Voici le tutoriel pas à pas.

Voir le guide pratique Pocketbase et le guide Coolify pour les bases.

Approche choisie

Pocketbase est un binaire Go monolithique. Trois approches valides :

  • Approche A — Application via Dockerfile : on crée un Dockerfile minimal qui télécharge Pocketbase et le lance. Coolify le déploie via Git.
  • Approche B — One-Click Application : Coolify a Pocketbase dans sa marketplace, déploiement en 30 secondes. Pratique pour les setups simples.
  • Approche C — Pocketbase + code Go custom : si vous étendez Pocketbase avec des hooks Go, vous compilez votre propre binaire et le déployez via Dockerfile.

Ce tutoriel couvre l’approche A (la plus polyvalente).

Étape 1 — Préparer le repo Git

# Structure minimale
mon-pocketbase/
├── Dockerfile
├── .dockerignore
└── pb_hooks/        # optionnel, scripts JS
└── pb_migrations/   # optionnel, migrations versionnées
# Dockerfile
FROM alpine:3.20

ARG PB_VERSION=0.22.21

RUN apk add --no-cache unzip ca-certificates wget

RUN wget -O /tmp/pb.zip \
    https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip \
    && unzip /tmp/pb.zip -d /pb \
    && rm /tmp/pb.zip \
    && chmod +x /pb/pocketbase

COPY pb_migrations/ /pb/pb_migrations/
COPY pb_hooks/ /pb/pb_hooks/

EXPOSE 8090

CMD ["/pb/pocketbase", "serve", "--http=0.0.0.0:8090"]

Pousser sur GitHub/GitLab/Forgejo. Dépôt privé recommandé puisque potentiellement vous y mettez des hooks JS sensibles.

Étape 2 — Créer l’application Coolify

  1. Coolify → Projects → votre projet → « + New Resource » → Application → Public/Private Repository
  2. Connecter votre source Git (déjà fait normalement)
  3. Sélectionner le dépôt et la branche main
  4. Build pack : Dockerfile
  5. Port exposé : 8090
  6. Environment Variables : aucune nécessaire au minimum (Pocketbase fonctionne tout seul)

Étape 3 — Storage persistant

Pocketbase stocke ses données dans ./pb_data/. Sans volume persistant, vos données disparaissent à chaque redéploiement.

  1. Application → Storages → « + New »
  2. Type : Persistent Volume (mounted to container)
  3. Source path : (laisser vide, Coolify gère)
  4. Destination path : /pb/pb_data
  5. Save

Étape 4 — Domaine et HTTPS

  1. Application → Domains → ajouter api.exemple.sn
  2. Activer « Force HTTPS » et « Generate SSL »
  3. Vérifier que votre DNS A record pointe sur le VPS Coolify

Étape 5 — Déployer

Cliquer « Deploy ». Coolify clone le repo, build l’image Docker, démarre le conteneur. Logs en direct dans l’onglet Logs. Comptez 2-5 minutes pour le premier déploiement (téléchargement Pocketbase inclus).

Une fois « Application started », ouvrez https://api.exemple.sn/_/ et créez le compte super-admin.

Étape 6 — SMTP pour l’authentification

Pour que les emails de vérification, password reset et invitation fonctionnent, configurer SMTP dans le dashboard admin :

  • Settings → Mail Settings
  • SMTP server : Brevo (ex-Sendinblue), Mailtrap, AWS SES, Resend
  • Sender name + email
  • Tester en bas du formulaire

Pour le Sénégal, Brevo offre 300 emails/jour gratuits, suffisant pour démarrer.

Étape 7 — Backups automatiques

Pocketbase a un système de backup intégré accessible depuis le dashboard admin (Settings → Backups). Configurez aussi un cron côté serveur pour pousser sur S3 (Backblaze B2) :

# Sur le serveur Coolify, créer un cron
# /etc/cron.daily/pb-backup
#!/bin/bash
CONTAINER=$(docker ps --filter name=pocketbase --format '{{.ID}}')
DATE=$(date +%Y%m%d)
docker exec $CONTAINER /pb/pocketbase backup --filename=pb-$DATE.zip
docker cp $CONTAINER:/pb/pb_data/backups/pb-$DATE.zip /tmp/
aws s3 cp /tmp/pb-$DATE.zip s3://backups/pocketbase/
rm /tmp/pb-$DATE.zip

Étape 8 — Mises à jour

Pour mettre à jour Pocketbase, modifier PB_VERSION dans le Dockerfile, commit, push. Coolify redéploie automatiquement. Les données persistent grâce au volume.

Adaptation Afrique de l’Ouest

Pour une PME ouest-africaine, Pocketbase + Coolify sur Hetzner CX23 (4 €/mois) couvre une app mobile à 5000-10 000 utilisateurs actifs/jour. Pour creuser ce sujet, scaling vertical (CX33 ou CX42) sans changer l’architecture.

Erreurs fréquentes

ErreurCauseSolution
Données perdues à chaque redeployVolume persistant pas configuréStorages → mount /pb/pb_data
Build Docker très longTéléchargement Pocketbase à chaque buildCache Docker layers via .dockerignore propre
Emails non envoyésSMTP non configuréSettings → Mail Settings
Uploads échouentLimites Coolify ou TraefikAugmenter client_max_body_size

Pour explorer plus loin

Étape 1 — Préparer le serveur Coolify et créer l’application Pocketbase

Avant tout déploiement, il faut un serveur Coolify opérationnel. Sur un VPS Hetzner CX22 (4 EUR/mois, soit environ 2 624 FCFA) ou un Contabo VPS S à Düsseldorf, installez Coolify v4 en une commande. Cette étape pose les fondations sur lesquelles Pocketbase tournera de manière reproductible.

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

Le script détecte Docker, l’installe si besoin et expose le tableau de bord sur le port 8000. Connectez-vous, créez un projet nommé pocketbase-prod, puis ajoutez une nouvelle ressource de type Application. Choisissez la source Public Repository et pointez vers votre fork si vous avez ajouté des hooks Go custom. Validation pratique : Coolify affiche le badge vert Running sur le worker et la build queue est vide.

Étape 2 — Configurer le Dockerfile et le port d’écoute

Pocketbase n’a pas de Dockerfile officiel multi-stage optimisé pour Coolify. Créez-le à la racine de votre dépôt pour garantir une image inférieure à 30 Mo et un démarrage en moins de 2 secondes, indispensable sur un petit VPS partagé à Dakar ou Abidjan.

FROM alpine:3.20
ARG PB_VERSION=0.23.4
RUN apk add --no-cache ca-certificates unzip wget
WORKDIR /pb
RUN wget https://github.com/pocketbase/pocketbase/releases/download/v0.23.4/pocketbase_0.23.4_linux_amd64.zip \
    && unzip pocketbase_0.23.4_linux_amd64.zip \
    && rm pocketbase_0.23.4_linux_amd64.zip
EXPOSE 8090
CMD ["/pb/pocketbase","serve","--http=0.0.0.0:8090"]

Dans l’onglet Configuration de Coolify, fixez le Ports Exposes à 8090 et activez Force HTTPS Redirect. Coolify provisionne automatiquement un certificat Let’s Encrypt via Traefik. Indicateur que tout est en place : curl https://pb.votre-domaine.com/api/health renvoie un JSON avec code:200 et le message API is healthy.

Étape 3 — Persister la base SQLite avec un volume nommé

Pocketbase stocke toutes les collections, comptes et fichiers uploadés dans /pb_data. Sans volume persistant, chaque redéploiement efface tout — erreur fréquente quand on découvre Coolify. Sur Coolify, allez dans Storages et créez un volume nommé.

Name: pb_data
Mount path: /pb/pb_data
Type: Volume

Pour des migrations de schéma versionnées, ajoutez un second volume pb_migrations monté sur /pb/pb_migrations. Cela permet de committer vos migrations Go ou JS dans Git et de les rejouer automatiquement au redémarrage. Vous saurez que tout fonctionne quand : après Redeploy, votre admin reste connecté et vos collections sont intactes.

Étape 4 — Créer le compte superuser et durcir l’accès admin

Au premier démarrage, Pocketbase n’expose pas de compte par défaut. Créez le superuser via la CLI dans le conteneur, plus sûr que le formulaire web exposé sur le port public.

docker exec -it $(docker ps --filter name=pocketbase --format "{{.ID}}") \
  /pb/pocketbase superuser create admin@itskillscenter.io MotDePasse_Robuste_2026!

Connectez-vous ensuite sur https://pb.votre-domaine.com/_/. Dans Settings → Application, désactivez l’inscription publique et activez l’authentification à deux facteurs OTP. Vous saurez que tout fonctionne quand : le badge Superuser apparaît dans la sidebar et le journal Coolify n’affiche aucune tentative de bruteforce sur l’endpoint d’authentification admin.

Étape 5 — Configurer le SMTP pour les emails transactionnels

Pour qu’un utilisateur sénégalais reçoive un email de vérification fiable, oubliez Gmail (filtres anti-spam très agressifs sur les domaines neufs). Utilisez Brevo (ex-Sendinblue, basé en France, gratuit jusqu’à 300 emails/jour) ou Resend (3 000 emails/mois gratuits). Dans Settings → Mail settings :

SMTP host: smtp-relay.brevo.com
SMTP port: 587
TLS: STARTTLS
Username: votre-email-brevo@itskillscenter.io
Password: clé SMTP générée dans Brevo

Cliquez sur Send test email. Indicateur que tout est en place : votre boîte reçoit l’email en moins de 30 secondes avec un score SpamAssassin inférieur à 1. Si le mail tombe en spam, vérifiez que SPF, DKIM et DMARC sont publiés sur votre zone DNS Cloudflare ou OVH.

Étape 6 — Activer les sauvegardes automatiques S3

Une base de données sans backup, c’est un incident en attente. Pocketbase intègre une fonction de backup vers n’importe quel bucket compatible S3. Recommandé pour l’Afrique de l’Ouest : Scaleway Object Storage à Paris (latence 60 ms depuis Dakar) ou Backblaze B2 (0,005 USD/Go/mois).

Endpoint: s3.fr-par.scw.cloud
Region: fr-par
Bucket: pocketbase-backups-itsc
Access key + Secret: générés dans la console Scaleway

Activez le cron Auto backup à 0 3 * * * (3h du matin UTC, soit 3h à Dakar et 4h à Cotonou). Conservez 14 backups. Le bon résultat se reconnaît à : un fichier pb_backup_2026-05-05_03-00-00.zip apparaît dans votre bucket le lendemain.

Étape 7 — Déployer une migration de schéma reproductible

Plutôt que de cliquer dans l’admin pour créer vos collections, écrivez-les en JS pour les versionner avec votre code. Créez un fichier dans pb_migrations/ nommé avec un timestamp UNIX, par exemple 1714900000_init_schema.js :

migrate((app) => {
  const collection = new Collection({
    type: "base",
    name: "articles",
    fields: [
      { name: "title", type: "text", required: true, max: 200 },
      { name: "slug", type: "text", required: true, unique: true },
      { name: "body", type: "editor" },
      { name: "published", type: "bool" }
    ]
  });
  app.save(collection);
});

Au prochain redémarrage du conteneur (déclenché par un push Git si vous avez activé le webhook GitHub dans Coolify), la migration s’exécute automatiquement. Indicateur que tout est en place : la collection articles apparaît dans l’admin sans intervention manuelle.

Étape 8 — Brancher un domaine personnalisé et tester depuis Abidjan

Dans Coolify, ajoutez le domaine pb.itskillscenter.io dans Domains. Coolify met à jour Traefik et émet le certificat. Côté DNS, créez un enregistrement A pointant vers l’IP publique de votre VPS, ou un CNAME vers le hostname Coolify si vous êtes derrière Cloudflare en mode Proxied.

curl -I https://pb.itskillscenter.io/api/health
HTTP/2 200
content-type: application/json

Testez la latence réelle depuis un client mobile à Abidjan ou Lomé : un appel d’authentification mot de passe doit répondre en moins de 250 ms si votre VPS est à Düsseldorf. Au-delà de 600 ms, envisagez Scaleway Paris ou un VPS Africa Data Centres à Lagos. Vous disposez maintenant d’un Pocketbase production-ready, sauvegardé, observable et prêt à servir une application mobile Flutter ou un frontend Next.js.

Étape 1 — Préparer le serveur Coolify et créer l’application Pocketbase

Avant tout déploiement, il faut un serveur Coolify opérationnel. Sur un VPS Hetzner CX22 (4 EUR/mois, soit environ 2 624 FCFA) ou un Contabo VPS S à Düsseldorf, installez Coolify v4 en une commande. Cette étape pose les fondations sur lesquelles Pocketbase tournera de manière reproductible.

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

Le script détecte Docker, l’installe si besoin et expose le tableau de bord sur le port 8000. Connectez-vous, créez un projet nommé pocketbase-prod, puis ajoutez une nouvelle ressource de type Application. Choisissez la source Public Repository et pointez vers votre fork si vous avez ajouté des hooks Go custom. Le bon résultat se reconnaît à : Coolify affiche le badge vert Running sur le worker et la build queue est vide.

Étape 2 — Configurer le Dockerfile et le port d’écoute

Pocketbase n’a pas de Dockerfile officiel multi-stage optimisé pour Coolify. Créez-le à la racine de votre dépôt pour garantir une image inférieure à 30 Mo et un démarrage en moins de 2 secondes, indispensable sur un petit VPS partagé à Dakar ou Abidjan.

FROM alpine:3.20
RUN apk add --no-cache ca-certificates unzip wget
WORKDIR /pb
RUN wget https://github.com/pocketbase/pocketbase/releases/download/v0.23.4/pocketbase_0.23.4_linux_amd64.zip \
    && unzip pocketbase_0.23.4_linux_amd64.zip \
    && rm pocketbase_0.23.4_linux_amd64.zip
EXPOSE 8090
CMD ["/pb/pocketbase","serve","--http=0.0.0.0:8090"]

Dans l’onglet Configuration de Coolify, fixez le Ports Exposes à 8090 et activez Force HTTPS Redirect. Coolify provisionne automatiquement un certificat Let’s Encrypt via Traefik. La preuve que ça tourne : un curl sur l’endpoint /api/health renvoie un JSON avec code:200 et le message API is healthy.

Étape 3 — Persister la base SQLite avec un volume nommé

Pocketbase stocke toutes les collections, comptes et fichiers uploadés dans /pb_data. Sans volume persistant, chaque redéploiement efface tout — erreur fréquente quand on découvre Coolify. Sur Coolify, allez dans Storages et créez un volume nommé.

Name: pb_data
Mount path: /pb/pb_data
Type: Volume

Pour des migrations de schéma versionnées, ajoutez un second volume pb_migrations monté sur /pb/pb_migrations. Cela permet de committer vos migrations Go ou JS dans Git et de les rejouer automatiquement au redémarrage. Le test concluant : après Redeploy, votre admin reste connecté et vos collections sont intactes.

Étape 4 — Créer le compte superuser et durcir l’accès admin

Au premier démarrage, Pocketbase n’expose pas de compte par défaut. Créez le superuser via la CLI dans le conteneur, plus sûr que le formulaire web exposé sur le port public.

docker exec -it $(docker ps --filter name=pocketbase -q) \
  /pb/pocketbase superuser create admin@itskillscenter.io MotDePasse_Robuste_2026!

Connectez-vous ensuite sur https://pb.votre-domaine.com/_/. Dans Settings → Application, désactivez l’inscription publique et activez l’authentification à deux facteurs OTP. La preuve que ça tourne : le badge Superuser apparaît dans la sidebar et le journal Coolify n’affiche aucune tentative de bruteforce sur l’endpoint d’authentification admin.

Étape 5 — Configurer le SMTP pour les emails transactionnels

Pour qu’un utilisateur sénégalais reçoive un email de vérification fiable, oubliez Gmail (filtres anti-spam très agressifs sur les domaines neufs). Utilisez Brevo (ex-Sendinblue, basé en France, gratuit jusqu’à 300 emails/jour) ou Resend (3 000 emails/mois gratuits). Dans Settings → Mail settings :

SMTP host: smtp-relay.brevo.com
SMTP port: 587
TLS: STARTTLS
Username: votre-email-brevo@itskillscenter.io
Password: cle SMTP generee dans Brevo

Cliquez sur Send test email. Comment vérifier le bon fonctionnement : votre boîte reçoit l’email en moins de 30 secondes avec un score SpamAssassin inférieur à 1. Si le mail tombe en spam, vérifiez que SPF, DKIM et DMARC sont publiés sur votre zone DNS Cloudflare ou OVH.

Étape 6 — Activer les sauvegardes automatiques S3

Une base de données sans backup, c’est un incident en attente. Pocketbase intègre une fonction de backup vers n’importe quel bucket compatible S3. Recommandé pour l’Afrique de l’Ouest : Scaleway Object Storage à Paris (latence 60 ms depuis Dakar) ou Backblaze B2 (0,005 USD/Go/mois).

Endpoint: s3.fr-par.scw.cloud
Region: fr-par
Bucket: pocketbase-backups-itsc
Access key + Secret: generes dans la console Scaleway

Activez le cron Auto backup à 0 3 * * * (3h du matin UTC, soit 3h à Dakar et 4h à Cotonou). Conservez 14 backups. Validation pratique : un fichier pb_backup_2026-05-05_03-00-00.zip apparaît dans votre bucket le lendemain.

Étape 7 — Déployer une migration de schéma reproductible

Plutôt que de cliquer dans l’admin pour créer vos collections, écrivez-les en JS pour les versionner avec votre code. Créez un fichier dans pb_migrations/ nommé avec un timestamp UNIX, par exemple 1714900000_init_schema.js :

migrate((app) => {
  const c = new Collection({
    type: "base",
    name: "articles",
    fields: [
      { name: "title", type: "text", required: true, max: 200 },
      { name: "slug", type: "text", required: true, unique: true },
      { name: "body", type: "editor" },
      { name: "published", type: "bool" }
    ]
  });
  app.save(c);
});

Au prochain redémarrage du conteneur (déclenché par un push Git si vous avez activé le webhook GitHub dans Coolify), la migration s’exécute automatiquement. Le bon résultat se reconnaît à : la collection articles apparaît dans l’admin sans intervention manuelle.

Étape 8 — Brancher un domaine personnalisé et tester depuis Abidjan

Dans Coolify, ajoutez le domaine pb.itskillscenter.io dans Domains. Coolify met à jour Traefik et émet le certificat. Côté DNS, créez un enregistrement A pointant vers l’IP publique de votre VPS, ou un CNAME vers le hostname Coolify si vous êtes derrière Cloudflare en mode Proxied.

curl -I https://pb.itskillscenter.io/api/health
HTTP/2 200
content-type: application/json

Testez la latence réelle depuis un client mobile à Abidjan ou Lomé : un appel d’authentification mot de passe doit répondre en moins de 250 ms si votre VPS est à Düsseldorf. Au-delà de 600 ms, envisagez Scaleway Paris ou un VPS Africa Data Centres à Lagos. Vous disposez maintenant d’un Pocketbase production-ready, sauvegardé, observable et prêt à servir une application mobile Flutter ou un frontend Next.js.

Partager