article 18 mai 2026
Déployer Astro + Directus sur Hetzner avec Coolify
Tutoriel complet pour déployer une stack Astro SSR + Directus CMS + PostgreSQL sur un VPS Hetzner en utilisant Coolify comme PaaS self-hosted.
## Pourquoi Hetzner + Coolify ?
Hetzner propose des VPS performants à des prix imbattables (à partir de 4€/mois pour un CX22 avec 2 vCPU et 4 Go de RAM). Coolify est un PaaS open-source self-hosted qui donne une expérience proche de Vercel/Railway mais sur votre propre infrastructure.
## Architecture déployée
`
Hetzner VPS (Ubuntu 24.04)
└── Docker
├── coolify-proxy (Traefik v3) — reverse proxy + SSL automatique
├── PostgreSQL 16 — base de données Directus
├── Directus 11 — CMS headless
└── Astro SSR (Node.js 22) — frontend
`
## Prérequis
- VPS Hetzner avec Ubuntu 24.04 (CX22 minimum recommandé)
- Coolify installé via le script officiel
- Repo GitHub avec votre projet Astro
- GitHub App configurée dans Coolify pour le déploiement automatique
## Étapes clés
### 1. PostgreSQL via Coolify
Créer une base de données PostgreSQL depuis l'interface Coolify. Notez l'URL de connexion interne (format postgres://user:pass@container-name:5432/db).
### 2. Directus avec Docker Compose
Coolify supporte les services Docker Compose. Configurez les variables d'env Directus pour pointer sur le PostgreSQL interne :
`yaml
DB_CLIENT: pg
DB_HOST:
DB_PORT: 5432
DB_DATABASE: directus
DB_USER: directus
DB_PASSWORD:
`
### 3. Astro avec Dockerfile multi-stage
`dockerfile
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD ["node", "./dist/server/entry.mjs"]
`
### 4. Variables d'environnement Astro
Dans Coolify, configurez les variables d'env pour pointer sur votre Directus prod :
`
DIRECTUS_URL=http://directus-.votre-ip.sslip.io
DIRECTUS_TOKEN=votre-token-admin
PUBLIC_SITE_URL=https://votre-domaine.com
`
## Résultat
Webhook GitHub déclenche un build automatique à chaque push sur main. Traefik gère le SSL Let's Encrypt automatiquement dès que vous configurez un vrai domaine.
Built with Astro Directus Docker Coolify Hetzner