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
- Coolify → Projects → votre projet → « + New Resource » → Application → Public/Private Repository
- Connecter votre source Git (déjà fait normalement)
- Sélectionner le dépôt et la branche
main - Build pack : Dockerfile
- Port exposé : 8090
- 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.
- Application → Storages → « + New »
- Type : Persistent Volume (mounted to container)
- Source path : (laisser vide, Coolify gère)
- Destination path :
/pb/pb_data - Save
Étape 4 — Domaine et HTTPS
- Application → Domains → ajouter
api.exemple.sn - Activer « Force HTTPS » et « Generate SSL »
- 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
| Erreur | Cause | Solution |
|---|---|---|
| Données perdues à chaque redeploy | Volume persistant pas configuré | Storages → mount /pb/pb_data |
| Build Docker très long | Téléchargement Pocketbase à chaque build | Cache Docker layers via .dockerignore propre |
| Emails non envoyés | SMTP non configuré | Settings → Mail Settings |
| Uploads échouent | Limites Coolify ou Traefik | Augmenter 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.