- Dockerfile multi-stage (build Astro -> runtime node standalone) - docker-compose.prod.yml : Astro builde, ports bindes 127.0.0.1, secrets requis - .env.prod.example : template de prod avec generation des secrets - scripts/backup.sh + restore.sh : migration base Directus + photos - DEPLOY.md : guide pas a pas - .dockerignore : exclusion du .env (anti-fuite de secrets) - untrack du tool-log BYAN (churn) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
79 lines
2.6 KiB
YAML
79 lines
2.6 KiB
YAML
# Stack de PRODUCTION Mostuki Photo.
|
|
#
|
|
# Difference avec docker-compose.yml (dev) :
|
|
# - Astro est BUILDE (Dockerfile multi-stage) au lieu de tourner en mode dev
|
|
# - les ports sont bindes sur 127.0.0.1 : seul le reverse-proxy de l'hote y accede,
|
|
# rien n'est expose directement sur internet
|
|
# - aucun secret n'a de valeur par defaut : les vars DOIVENT etre fournies (.env)
|
|
#
|
|
# Lancement : docker compose -f docker-compose.prod.yml up -d --build
|
|
# Le reverse-proxy de l'hote (Traefik/nginx) route ton domaine vers 127.0.0.1:4321
|
|
# (site) et un sous-domaine admin vers 127.0.0.1:8055 (Directus) si besoin.
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
container_name: mostuki-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:?POSTGRES_USER requis}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD requis}
|
|
POSTGRES_DB: ${POSTGRES_DB:?POSTGRES_DB requis}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
directus:
|
|
image: directus/directus:11
|
|
container_name: mostuki-directus
|
|
restart: unless-stopped
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
ports:
|
|
- "127.0.0.1:8055:8055"
|
|
volumes:
|
|
- directus_uploads:/directus/uploads
|
|
- directus_extensions:/directus/extensions
|
|
environment:
|
|
KEY: ${DIRECTUS_KEY:?DIRECTUS_KEY requis}
|
|
SECRET: ${DIRECTUS_SECRET:?DIRECTUS_SECRET requis}
|
|
ADMIN_EMAIL: ${DIRECTUS_ADMIN_EMAIL:?DIRECTUS_ADMIN_EMAIL requis}
|
|
ADMIN_PASSWORD: ${DIRECTUS_ADMIN_PASSWORD:?DIRECTUS_ADMIN_PASSWORD requis}
|
|
DB_CLIENT: "pg"
|
|
DB_HOST: "postgres"
|
|
DB_PORT: "5432"
|
|
DB_DATABASE: ${POSTGRES_DB}
|
|
DB_USER: ${POSTGRES_USER}
|
|
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
|
CACHE_ENABLED: "false"
|
|
WEBSOCKETS_ENABLED: "true"
|
|
PUBLIC_URL: ${DIRECTUS_PUBLIC_URL:?DIRECTUS_PUBLIC_URL requis}
|
|
CORS_ENABLED: "true"
|
|
CORS_ORIGIN: ${PUBLIC_SITE_URL:?PUBLIC_SITE_URL requis}
|
|
|
|
astro:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: mostuki-astro
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- directus
|
|
ports:
|
|
- "127.0.0.1:4321:4321"
|
|
environment:
|
|
ASTRO_TELEMETRY_DISABLED: "1"
|
|
# Astro parle a Directus par le reseau interne Docker (pas par le domaine public)
|
|
DIRECTUS_URL: "http://directus:8055"
|
|
DIRECTUS_TOKEN: ${DIRECTUS_TOKEN:?DIRECTUS_TOKEN requis}
|
|
PUBLIC_SITE_URL: ${PUBLIC_SITE_URL}
|
|
|
|
volumes:
|
|
postgres_data:
|
|
directus_uploads:
|
|
directus_extensions:
|