services: postgres: image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea environment: POSTGRES_DB: ${POSTGRES_DB:-kita_planer} POSTGRES_USER: ${POSTGRES_USER:-kita_planer} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?} volumes: - kita_planer_postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 10 restart: unless-stopped app: build: context: . dockerfile: Dockerfile args: NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:?} NEXT_PUBLIC_UMAMI_SCRIPT_URL: ${NEXT_PUBLIC_UMAMI_SCRIPT_URL:-} NEXT_PUBLIC_UMAMI_WEBSITE_ID: ${NEXT_PUBLIC_UMAMI_WEBSITE_ID:-} NEXT_PUBLIC_UMAMI_DOMAINS: ${NEXT_PUBLIC_UMAMI_DOMAINS:-} environment: NODE_ENV: production PORT: 3000 HOSTNAME: 0.0.0.0 DATABASE_URL: ${APP_DATABASE_URL:?} AUTH_SECRET: ${AUTH_SECRET:?} AUTH_URL: ${AUTH_URL:?} NEXTAUTH_URL: ${NEXTAUTH_URL:?} NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:?} NEXT_PUBLIC_UMAMI_SCRIPT_URL: ${NEXT_PUBLIC_UMAMI_SCRIPT_URL:-} NEXT_PUBLIC_UMAMI_WEBSITE_ID: ${NEXT_PUBLIC_UMAMI_WEBSITE_ID:-} NEXT_PUBLIC_UMAMI_DOMAINS: ${NEXT_PUBLIC_UMAMI_DOMAINS:-} RESEND_API_KEY: ${RESEND_API_KEY:?} EMAIL_FROM: ${EMAIL_FROM:?} ADMIN_EMAIL: ${ADMIN_EMAIL:?} UPLOAD_DIR: /app/uploads/announcements UPLOAD_TENANT_QUOTA_BYTES: ${UPLOAD_TENANT_QUOTA_BYTES:-268435456} UPLOAD_GLOBAL_QUOTA_BYTES: ${UPLOAD_GLOBAL_QUOTA_BYTES:-10737418240} TRUSTED_CLIENT_IP_HEADER: ${TRUSTED_CLIENT_IP_HEADER:-} volumes: - kita_planer_uploads:/app/uploads - kita_planer_next_cache:/app/.next/cache depends_on: postgres: condition: service_healthy expose: - "3000" read_only: true tmpfs: - /tmp:size=64m,mode=1777 security_opt: - no-new-privileges:true cap_drop: - ALL pids_limit: 256 mem_limit: 1g cpus: "1.0" restart: unless-stopped migrate: profiles: ["maintenance"] build: context: . dockerfile: Dockerfile target: migrator args: NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:?} environment: NODE_ENV: production DATABASE_URL: ${MIGRATION_DATABASE_URL:?} APP_DATABASE_PASSWORD: ${APP_DATABASE_PASSWORD:?} UPLOAD_DIR: /app/uploads/announcements volumes: - kita_planer_uploads:/app/uploads depends_on: postgres: condition: service_healthy restart: "no" pgadmin: profiles: ["maintenance"] image: dpage/pgadmin4@sha256:c332c5f6dfba995d9ebc4af261d93506d6876085d712eaaa3defc8dd1a3f26de environment: PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:?} PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:?} PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION: "True" PGADMIN_CONFIG_CONSOLE_LOG_LEVEL: 30 volumes: - kita_planer_pgadmin_data:/var/lib/pgadmin depends_on: postgres: condition: service_healthy ports: - "127.0.0.1:5050:80" restart: unless-stopped volumes: kita_planer_postgres_data: kita_planer_uploads: kita_planer_next_cache: kita_planer_pgadmin_data: