x-logging: &default-logging driver: json-file options: max-size: "100m" max-file: "10" services: caddy: image: caddy:2-alpine restart: unless-stopped logging: *default-logging ports: - "${CADDY_HTTP_PORT:-18000}:${CADDY_HTTP_PORT:-18000}" - "${CADDY_HTTPS_PORT:-18443}:${CADDY_HTTPS_PORT:-18443}" extra_hosts: - "host.docker.internal:host-gateway" networks: default: aliases: - ${SITE_HOST:-redump.test} - www.${SITE_HOST:-redump.test} - forum.${SITE_HOST:-redump.test} - wiki.${SITE_HOST:-redump.test} volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config environment: - SITE_APEX_URL=${SITE_APEX_URL:-http://redump.test:${SITE_PORT_HTTP:-18000}} - APP_PUBLIC_URL=${APP_PUBLIC_URL:-http://redump.test:${LOCAL_SITE_PORT:-18000}} - APP_WWW_URL=${APP_WWW_URL:-http://www.redump.test:${LOCAL_SITE_PORT:-18000}} - PHPBB_PUBLIC_URL=${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}} - MEDIAWIKI_PUBLIC_URL=${MEDIAWIKI_PUBLIC_URL:-http://wiki.redump.test:${LOCAL_SITE_PORT:-18000}} - APP_UPSTREAM_HOST=${APP_UPSTREAM_HOST:-app} - APP_UPSTREAM_PORT=${APP_UPSTREAM_PORT:-${APP_PORT:-3000}} - CADDY_HTTP_PORT=${CADDY_HTTP_PORT:-18000} - CADDY_HTTPS_PORT=${CADDY_HTTPS_PORT:-18443} - CADDY_ACME_EMAIL=${CADDY_ACME_EMAIL:-email admin@example.com} depends_on: - mediawiki - phpbb app: build: . image: ${APP_IMAGE:-app}:${IMAGE_TAG:-dev} restart: unless-stopped logging: *default-logging ports: - "${DIRECT_BIND_ADDR:-127.0.0.1}:${APP_DIRECT_PORT:-13000}:${APP_PORT:-3000}" environment: - POSTGRES_USER=${POSTGRES_USER:-admin} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - POSTGRES_DB=${POSTGRES_DB:-myapp} - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - APP_PORT=${APP_PORT:-3000} - ASSET_VERSION=${IMAGE_TAG:-dev} - SITE_APEX_URL=${SITE_APEX_URL:-http://redump.test:${SITE_PORT_HTTP:-18000}} - APP_PUBLIC_URL=${APP_PUBLIC_URL:-http://redump.test:${LOCAL_SITE_PORT:-18000}} - PHPBB_PUBLIC_URL=${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}} - MEDIAWIKI_PUBLIC_URL=${MEDIAWIKI_PUBLIC_URL:-http://wiki.redump.test:${LOCAL_SITE_PORT:-18000}} - OIDC_PROVIDER_URL=${OIDC_PROVIDER_URL:-${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}}/app.php/oidc} - APP_OIDC_CLIENT_ID=${APP_OIDC_CLIENT_ID:-vgindex-app} - APP_OIDC_CLIENT_SECRET=${APP_OIDC_CLIENT_SECRET:-changeme-app-oidc} - NEWS_FEED_URL=${NEWS_FEED_URL:-${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}}/feed.php?mode=news} volumes: - archive_cache:/app/data - backup_data:/app/data/backups:ro depends_on: postgres: condition: service_healthy postgres: image: postgres:16-alpine restart: unless-stopped logging: *default-logging ports: - "${DIRECT_BIND_ADDR:-127.0.0.1}:${POSTGRES_DIRECT_PORT:-15432}:5432" environment: - POSTGRES_USER=${POSTGRES_USER:-admin} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - POSTGRES_DB=${POSTGRES_DB:-myapp} volumes: - pgdata:/var/lib/postgresql/data - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin} -d ${POSTGRES_DB:-myapp}"] interval: 5s timeout: 5s retries: 5 phpbb: build: context: . dockerfile: docker/phpbb/Dockerfile image: ${PHPBB_IMAGE:-phpbb}:${IMAGE_TAG:-dev} restart: unless-stopped logging: *default-logging ports: - "${DIRECT_BIND_ADDR:-127.0.0.1}:${PHPBB_DIRECT_PORT:-18080}:80" environment: - PHPBB_DB_HOST=postgres - PHPBB_DB_PORT=5432 - PHPBB_DB_NAME=phpbb - PHPBB_DB_USER=${POSTGRES_USER:-admin} - PHPBB_DB_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - PHPBB_TABLE_PREFIX=${PHPBB_TABLE_PREFIX:-phpbb_} - PHPBB_ADMIN_USER=${PHPBB_ADMIN_USER:-admin} - PHPBB_ADMIN_PASSWORD=${PHPBB_ADMIN_PASSWORD:-changeme-phpbb} - PHPBB_ADMIN_EMAIL=${PHPBB_ADMIN_EMAIL:-admin@example.com} - PHPBB_BOARD_NAME=${PHPBB_BOARD_NAME:-redump.test Forum} - PHPBB_BOARD_DESCRIPTION=${PHPBB_BOARD_DESCRIPTION:-Disc Preservation Community} - APP_PUBLIC_URL=${APP_PUBLIC_URL:-http://redump.test:${LOCAL_SITE_PORT:-18000}} - PHPBB_PUBLIC_URL=${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}} - MEDIAWIKI_PUBLIC_URL=${MEDIAWIKI_PUBLIC_URL:-http://wiki.redump.test:${LOCAL_SITE_PORT:-18000}} - OIDC_PROVIDER_URL=${OIDC_PROVIDER_URL:-${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}}/app.php/oidc} - PHPBB_COOKIE_DOMAIN=${PHPBB_COOKIE_DOMAIN:-} - PHPBB_BOOTSTRAP_MODE=${PHPBB_BOOTSTRAP_MODE:-auto} - PHPBB_REQUIRE_ACTIVATION=${PHPBB_REQUIRE_ACTIVATION:-3} - PHPBB_ALLOW_PASSWORD_RESET=${PHPBB_ALLOW_PASSWORD_RESET:-true} - PHPBB_EMAIL_ENABLE=${PHPBB_EMAIL_ENABLE:-false} - PHPBB_REMOTE_IP_INTERNAL_PROXIES=${PHPBB_REMOTE_IP_INTERNAL_PROXIES:-10.0.0.0/8,172.16.0.0/12,192.168.0.0/16} - PHPBB_BOARD_EMAIL=${PHPBB_BOARD_EMAIL:-${SMTP_FROM:-${PHPBB_ADMIN_EMAIL:-admin@example.com}}} - PHPBB_CONTACT_EMAIL=${PHPBB_CONTACT_EMAIL:-${SMTP_FROM:-${PHPBB_ADMIN_EMAIL:-admin@example.com}}} - PHPBB_SMTP_HOST=${PHPBB_SMTP_HOST:-${SMTP_HOST:-}} - PHPBB_SMTP_PORT=${PHPBB_SMTP_PORT:-${SMTP_PORT:-587}} - PHPBB_SMTP_USER=${PHPBB_SMTP_USER:-${SMTP_USER:-}} - PHPBB_SMTP_PASSWORD=${PHPBB_SMTP_PASSWORD:-${SMTP_PASSWORD:-}} - PHPBB_SMTP_AUTH_METHOD=${PHPBB_SMTP_AUTH_METHOD:-PLAIN} - PHPBB_SMTP_SECURE=${PHPBB_SMTP_SECURE:-} - PHPBB_FEED_ENABLE=${PHPBB_FEED_ENABLE:-true} - PHPBB_FEED_LIMIT_TOPIC=${PHPBB_FEED_LIMIT_TOPIC:-5} - APP_OIDC_CLIENT_ID=${APP_OIDC_CLIENT_ID:-vgindex-app} - APP_OIDC_CLIENT_SECRET=${APP_OIDC_CLIENT_SECRET:-changeme-app-oidc} - MEDIAWIKI_OIDC_CLIENT_ID=${MEDIAWIKI_OIDC_CLIENT_ID:-mediawiki-client} - MEDIAWIKI_OIDC_CLIENT_SECRET=${MEDIAWIKI_OIDC_CLIENT_SECRET:-changeme-mediawiki-oidc} volumes: - phpbb_files:/var/www/html/files - phpbb_store:/var/www/html/store - phpbb_avatars:/var/www/html/images/avatars/upload depends_on: postgres: condition: service_healthy mediawiki: build: context: . dockerfile: docker/mediawiki/Dockerfile image: ${MEDIAWIKI_IMAGE:-mediawiki}:${IMAGE_TAG:-dev} restart: unless-stopped logging: *default-logging ports: - "${DIRECT_BIND_ADDR:-127.0.0.1}:${MEDIAWIKI_DIRECT_PORT:-18081}:80" environment: - MEDIAWIKI_DB_HOST=postgres - MEDIAWIKI_DB_PORT=5432 - MEDIAWIKI_DB_SCHEMA=public - MEDIAWIKI_DB_NAME=mediawiki - MEDIAWIKI_DB_USER=${POSTGRES_USER:-admin} - MEDIAWIKI_DB_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - MEDIAWIKI_DB_TYPE=postgres - MEDIAWIKI_SECRET_KEY=${MEDIAWIKI_SECRET_KEY:-00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff} - MEDIAWIKI_UPGRADE_KEY=${MEDIAWIKI_UPGRADE_KEY:-0011223344556677} - MEDIAWIKI_PUBLIC_URL=${MEDIAWIKI_PUBLIC_URL:-http://wiki.redump.test:${LOCAL_SITE_PORT:-18000}} - MEDIAWIKI_SITE_NAME=${MEDIAWIKI_SITE_NAME:-} - MEDIAWIKI_ADMIN_USER=${MEDIAWIKI_ADMIN_USER:-admin} - MEDIAWIKI_ADMIN_PASSWORD=${MEDIAWIKI_ADMIN_PASSWORD:-changeme-mediawiki} - OIDC_PROVIDER_URL=${OIDC_PROVIDER_URL:-${PHPBB_PUBLIC_URL:-http://forum.redump.test:${LOCAL_SITE_PORT:-18000}}/app.php/oidc} - MEDIAWIKI_OIDC_CLIENT_ID=${MEDIAWIKI_OIDC_CLIENT_ID:-mediawiki-client} - MEDIAWIKI_OIDC_CLIENT_SECRET=${MEDIAWIKI_OIDC_CLIENT_SECRET:-changeme-mediawiki-oidc} - MEDIAWIKI_OIDC_VERIFY_TLS=${MEDIAWIKI_OIDC_VERIFY_TLS:-true} - MEDIAWIKI_LOCAL_LOGIN=${MEDIAWIKI_LOCAL_LOGIN:-false} - MEDIAWIKI_EMAIL_ENABLE=${MEDIAWIKI_EMAIL_ENABLE:-false} - MEDIAWIKI_EMAIL_FROM=${MEDIAWIKI_EMAIL_FROM:-${SMTP_FROM:-${SITE_ADMIN_EMAIL:-admin@example.com}}} - MEDIAWIKI_EMAIL_FROM_NAME=${MEDIAWIKI_EMAIL_FROM_NAME:-${SMTP_FROM_NAME:-}} - MEDIAWIKI_SMTP_HOST=${MEDIAWIKI_SMTP_HOST:-${SMTP_HOST:-}} - MEDIAWIKI_SMTP_PORT=${MEDIAWIKI_SMTP_PORT:-${SMTP_PORT:-587}} - MEDIAWIKI_SMTP_USER=${MEDIAWIKI_SMTP_USER:-${SMTP_USER:-}} - MEDIAWIKI_SMTP_PASSWORD=${MEDIAWIKI_SMTP_PASSWORD:-${SMTP_PASSWORD:-}} - MEDIAWIKI_SMTP_STARTTLS=${MEDIAWIKI_SMTP_STARTTLS:-} volumes: - mediawiki_uploads:/var/www/html/images - ./docker/mediawiki/LocalSettings.php:/etc/mediawiki/LocalSettings.php:ro depends_on: postgres: condition: service_healthy phpbb: condition: service_started backup: image: postgres:16-alpine profiles: ["backup"] logging: *default-logging environment: - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - POSTGRES_USER=${POSTGRES_USER:-admin} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - POSTGRES_DB=${POSTGRES_DB:-myapp} volumes: - backup_data:/backups - phpbb_files:/source/phpbb_files:ro - phpbb_avatars:/source/phpbb_avatars:ro - mediawiki_uploads:/source/mediawiki_uploads:ro - ./scripts/backups/create-backup.sh:/usr/local/bin/create-backup.sh:ro entrypoint: ["/bin/sh", "/usr/local/bin/create-backup.sh"] depends_on: postgres: condition: service_healthy restore: image: postgres:16-alpine profiles: ["backup"] logging: *default-logging environment: - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - POSTGRES_USER=${POSTGRES_USER:-admin} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-changeme-postgres} - POSTGRES_DB=${POSTGRES_DB:-myapp} volumes: - phpbb_files:/restore/phpbb_files - phpbb_avatars:/restore/phpbb_avatars - mediawiki_uploads:/restore/mediawiki_uploads - archive_cache:/restore/archive_cache - ./scripts/backups/restore-container.sh:/usr/local/bin/restore-container.sh:ro entrypoint: ["/bin/sh", "/usr/local/bin/restore-container.sh"] depends_on: postgres: condition: service_healthy volumes: pgdata: caddy_data: caddy_config: archive_cache: backup_data: phpbb_files: phpbb_store: phpbb_avatars: mediawiki_uploads: