Files
memegoat/docker-compose.prod.yml
Mathis HERRIOT 4ca15b578d
Some checks failed
Backend Tests / test (push) Has been cancelled
Lint / lint (push) Has been cancelled
refactor(modules): mark DatabaseModule and CryptoModule as global and remove redundant imports
Optimize module imports by marking `DatabaseModule` and `CryptoModule` as global. Remove explicit imports from other modules to reduce duplication and improve maintainability. Update environment variable limits for image and GIF sizes in production.
2026-01-14 22:50:30 +01:00

154 lines
3.9 KiB
YAML

services:
db:
image: postgres:17-alpine
container_name: memegoat-db
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER:-app}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app}
POSTGRES_DB: ${POSTGRES_DB:-app}
networks:
- nw_memegoat
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: memegoat-redis
restart: always
networks:
- nw_memegoat
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
s3:
image: minio/minio:RELEASE.2025-04-08T15-41-24Z
container_name: memegoat-s3
restart: always
networks:
- nw_memegoat
#ports:
# - "9000:9000"
# - "9001:9001"
environment:
MINIO_ROOT_USER: ${S3_ACCESS_KEY:-minioadmin}
MINIO_ROOT_PASSWORD: ${S3_SECRET_KEY:-minioadmin}
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
#mail:
# image: axllent/mailpit
# container_name: memegoat-mail
# restart: always
# ports:
# - "1025:1025" # smtp
# - "8025:8025" # web ui
backend:
build:
context: .
dockerfile: backend/Dockerfile
target: runtime
container_name: memegoat-backend
networks:
- nw_memegoat
- nw_caddy
command: >
node dist/src/main
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
s3:
condition: service_started
clamav:
condition: service_started
environment:
NODE_ENV: production
POSTGRES_HOST: ${POSTGRES_HOST:-memegoat-db}
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
POSTGRES_DB: ${POSTGRES_DB:-app}
POSTGRES_USER: ${POSTGRES_USER:-app}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app}
REDIS_HOST: ${REDIS_HOST:-memegoat-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
S3_ENDPOINT: ${S3_ENDPOINT:-memegoat-s3}
S3_PORT: ${S3_PORT:-9000}
S3_ACCESS_KEY: ${S3_ACCESS_KEY:-minioadmin}
S3_SECRET_KEY: ${S3_SECRET_KEY:-minioadmin}
S3_BUCKET_NAME: ${S3_BUCKET_NAME:-memegoat}
MAIL_HOST: ${MAIL_HOST:-smtp.mail.ovh.net}
MAIL_PORT: ${MAIL_PORT:-465}
MAIL_USER: ${MAIL_USER}
MAIL_PASS: ${MAIL_PASS}
MAIL_FROM: ${MAIL_FROM:-noreply@memegoat.fr}
DOMAIN_NAME: ${DOMAIN_NAME:-localhost}
JWT_SECRET: ${JWT_SECRET:-super-secret-jwt-key-change-me-in-prod}
ENCRYPTION_KEY: ${ENCRYPTION_KEY:-01234567890123456789012345678901}
PGP_ENCRYPTION_KEY: ${PGP_ENCRYPTION_KEY:-super-secret-pgp-key}
SESSION_PASSWORD: ${SESSION_PASSWORD:-super-secret-session-password-32-chars}
CORS_DOMAIN_NAME: ${CORS_DOMAIN_NAME:-*}
ENABLE_CORS: ${ENABLE_CORS:-true}
CLAMAV_HOST: memegoat-clamav
CLAMAV_PORT: 3310
MAX_IMAGE_SIZE_KB: 1024
MAX_GIF_SIZE_KB: 4096
clamav:
image: clamav/clamav:latest
container_name: memegoat-clamav
restart: always
networks:
- nw_memegoat
healthcheck:
test: ["CMD", "clamdscan", "--version"]
interval: 20s
timeout: 10s
retries: 5
frontend:
build:
context: .
dockerfile: frontend/Dockerfile
target: runner
container_name: memegoat-frontend
networks:
- nw_caddy
restart: always
environment:
NODE_ENV: production
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-https://api.memegoat.fr}
depends_on:
- backend
documentation:
build:
context: .
dockerfile: documentation/Dockerfile
target: runner
container_name: memegoat-docs
networks:
- nw_caddy
restart: always
environment:
NODE_ENV: production
volumes:
postgres_data:
minio_data:
networks:
nw_memegoat:
internal: true
nw_caddy:
external: true