open-productive-stack/drupal/docker-compose.yml
rnsrk f8b8f53d54 Add Drupal headless stack with Next.js frontend
- Add Next.js frontend service (nextjs) with Dockerfile and source
- Update docker-compose.yml: image names, Drupal 11.3.3, nextjs service
- Add docker-compose.override.yml.disabled for dev hot-reload
- Add install-headless-modules.sh for OAuth/JSON:API module setup
- Add README.md with full setup and configuration guide
- Update nginx/Dockerfile and nginx.conf.template for cms. subdomain
- Update drupal/Dockerfile PHP-FPM build args
- Gitignore **/.vscode/ to prevent IDE workspace files from being tracked
2026-03-30 11:14:17 +02:00

102 lines
2.7 KiB
YAML

services:
# Drupal CMS NGINX reverse proxy (cms.nasarek.dev).
nginx:
image: rnsrk/drupal-nginx
build:
context: ./nginx
dockerfile: Dockerfile
args:
DOMAIN: ${DOMAIN}
container_name: drupal-reverse-proxy
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.http.routers.drupal-reverse-proxy.rule=Host(`cms.${DOMAIN}`)
- traefik.http.routers.drupal-reverse-proxy.entrypoints=web,websecure
- traefik.http.routers.drupal-reverse-proxy.middlewares=https-redirect
- traefik.http.routers.drupal-reverse-proxy.tls=true
- traefik.http.routers.drupal-reverse-proxy.tls.certresolver=le
- traefik.http.services.drupal-reverse-proxy.loadbalancer.server.port=80
volumes:
- ./drupal/root/web:/var/www/html
networks:
- traefik
- drupal
# Drupal PHP-FPM backend.
drupal-fpm:
image: rnsrk/drupal-php8-4-fpm-bookworm
build:
context: ./drupal
dockerfile: Dockerfile
args:
DRUPAL_VERSION: ${DRUPAL_VERSION:-11.3.3}
labels:
- traefik.enable=false
container_name: drupal-fpm
expose:
- "9000"
volumes:
- ./drupal/root:/opt/drupal
networks:
- database
- drupal
# Redis cache backend.
redis:
image: redis:7-alpine
container_name: drupal-redis
command: redis-server --loglevel warning
volumes:
- redis-data:/data
networks:
- drupal
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
# Next.js frontend (nasarek.dev).
nextjs:
image: rnsrk/nextjs-frontend
build:
context: ./nextjs
dockerfile: Dockerfile
args:
NEXT_PUBLIC_DRUPAL_BASE_URL: https://cms.${DOMAIN}
DRUPAL_CLIENT_ID: ${DRUPAL_CLIENT_ID}
DRUPAL_CLIENT_SECRET: ${DRUPAL_CLIENT_SECRET}
DRUPAL_OAUTH_SCOPE: ${DRUPAL_OAUTH_SCOPE:-}
container_name: nextjs-frontend
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.http.routers.nextjs-frontend.rule=Host(`${DOMAIN}`)
- traefik.http.routers.nextjs-frontend.entrypoints=web,websecure
- traefik.http.routers.nextjs-frontend.middlewares=https-redirect
- traefik.http.routers.nextjs-frontend.tls=true
- traefik.http.routers.nextjs-frontend.tls.certresolver=le
- traefik.http.services.nextjs-frontend.loadbalancer.server.port=3000
env_file:
- ./nextjs/.env.local
networks:
- traefik
- drupal
depends_on:
- drupal-fpm
restart: unless-stopped
volumes:
redis-data:
name: drupal-redis-data
networks:
traefik:
external: true
database:
external: true
drupal:
name: drupal