version: "3.9" services: # ----------------------------- # Keygen server components # ----------------------------- init: build: context: ./keygen-docker-compose dockerfile_inline: | FROM alpine RUN apk add --no-cache openssl bash uuidgen COPY ./keygen-init /usr/local/bin RUN dos2unix /usr/local/bin/keygen-init RUN chmod +x /usr/local/bin/keygen-init entrypoint: keygen-init volumes: - source: ./ target: /var/keygen type: bind setup: image: keygen/api:latest command: setup working_dir: /app environment: DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} DISABLE_DATABASE_ENVIRONMENT_CHECK: 1 env_file: - .env - ./keygen-docker-compose/keys.env depends_on: - redis tty: true stdin_open: true web: image: keygen/api:latest command: web working_dir: /app ports: - "${KEYGEN_PORT}:${KEYGEN_PORT}" environment: DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} REDIS_URL: redis://redis:6379 KEYGEN_ADMIN_USER: ${KEYGEN_ADMIN_USER} KEYGEN_ADMIN_PASS: ${KEYGEN_ADMIN_PASS} env_file: - .env - ./keygen-docker-compose/keys.env volumes: - keygen:/etc/keygen depends_on: - redis worker: image: keygen/api:latest command: worker working_dir: /app environment: DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} REDIS_URL: redis://redis:6379 KEYGEN_ADMIN_USER: ${KEYGEN_ADMIN_USER} KEYGEN_ADMIN_PASS: ${KEYGEN_ADMIN_PASS} env_file: - .env - ./keygen-docker-compose/keys.env volumes: - keygen:/etc/keygen depends_on: - redis redis: image: redis:latest ports: - "6379:6379" volumes: - redis:/data caddy: image: caddy:latest restart: unless-stopped ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./keygen-docker-compose/Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config depends_on: - web # ----------------------------- # Dashboard (Next.js app) # ----------------------------- dashboard: container_name: keygen-dashboard build: context: . dockerfile: Dockerfile args: NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL} ports: - "${DASHBOARD_PORT}:${DASHBOARD_PORT}" environment: NODE_ENV: ${NODE_ENV:-production} NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL} DASHBOARD_PORT: ${DASHBOARD_PORT} DASHBOARD_HOST: 0.0.0.0 PORT: ${DASHBOARD_PORT} depends_on: - web restart: unless-stopped volumes: keygen: redis: caddy_data: caddy_config: