tenequm

fullstack-app-docker-compose-template

Sep 18th, 2025
99
0
359 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 6.33 KB | None | 0 0
  1. # Example Docker Compose Configuration for Fullstack Typescript App
  2. #
  3. # ENVIRONMENT VARIABLES:
  4. # All ${VARIABLE_NAME} references expect values from your .env file.
  5. # Default values are provided only for localhost URLs and non-sensitive configs.
  6. # See .env.example for a complete list of required environment variables.
  7. #
  8. # Required services: postgres, valkey (OSS Redis fork)
  9. # Optional services: minio (object storage), drizzle-gateway (DB UI)
  10.  
  11. name: server
  12.  
  13. services:
  14.  # Nginx reverse proxy for routing
  15.   nginx:
  16.     image: nginx:alpine
  17.     profiles:
  18.      - server
  19.     ports:
  20.      - '80:80'
  21.     volumes:
  22.      - ./nginx.conf:/etc/nginx/nginx.conf:ro
  23.     restart: unless-stopped
  24.  
  25.   # Next.js frontend application
  26.   frontend:
  27.     image: frontend:latest
  28.     profiles:
  29.      - server
  30.     build:
  31.       context: .
  32.       dockerfile: packages/frontend/Dockerfile
  33.       target: runner
  34.       args:
  35.        # API configuration
  36.         NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost:4111}
  37.         NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000}
  38.  
  39.         # Authentication (Privy)
  40.         NEXT_PUBLIC_PRIVY_APP_ID: ${NEXT_PUBLIC_PRIVY_APP_ID}
  41.         NEXT_PUBLIC_PRIVY_CLIENT_ID: ${NEXT_PUBLIC_PRIVY_CLIENT_ID}
  42.  
  43.         # Feature flags
  44.         NEXT_PUBLIC_DISABLE_SUBSCRIPTION_GATE: 'false'
  45.     environment:
  46.       NODE_ENV: production
  47.  
  48.       # App configuration
  49.       NEXT_PUBLIC_PRIVY_APP_ID: ${NEXT_PUBLIC_PRIVY_APP_ID}
  50.       NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000}
  51.       NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost:4111}
  52.  
  53.       # Monitoring
  54.       SENTRY_AUTH_TOKEN: ${SENTRY_AUTH_TOKEN}
  55.       LMNR_PROJECT_API_KEY: ${LMNR_PROJECT_API_KEY}
  56.  
  57.       # Feature flags
  58.       NEXT_PUBLIC_DISABLE_SUBSCRIPTION_GATE: false
  59.  
  60.       # AI Provider Keys
  61.       OPENAI_API_KEY: ${OPENAI_API_KEY}
  62.       ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
  63.       GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY}
  64.  
  65.       # Database connections
  66.       DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/x3k_frontend
  67.       BACKEND_DATABASE_URL: postgresql://readonly_user:${READONLY_PASSWORD}@postgres:5432/x3k
  68.  
  69.       # External services
  70.       HUGGINGFACE_API_KEY: ${HUGGINGFACE_API_KEY}
  71.  
  72.       # Cache configuration
  73.       REDIS_HOST: valkey
  74.     restart: unless-stopped
  75.  
  76.   # Hono backend API server
  77.   server:
  78.     image: backend:latest
  79.     profiles:
  80.      - server
  81.     build:
  82.       context: .
  83.       dockerfile: packages/server/Dockerfile
  84.     environment:
  85.       NODE_ENV: production
  86.  
  87.       # Database configuration
  88.       DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/x3k
  89.       DATABASE_HOST: postgres
  90.       DATABASE_PORT: 5432
  91.       DATABASE_USER: postgres
  92.  
  93.       # Cache configuration
  94.       REDIS_HOST: valkey
  95.  
  96.       # AI Provider Keys
  97.       OPENAI_API_KEY: ${OPENAI_API_KEY}
  98.       ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
  99.       GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY}
  100.       OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
  101.  
  102.       # External service APIs
  103.       HUGGINGFACE_API_KEY: ${HUGGINGFACE_API_KEY}
  104.  
  105.       # Authentication (Privy)
  106.       PRIVY_APP_ID: ${PRIVY_APP_ID}
  107.       PRIVY_APP_SECRET: ${PRIVY_APP_SECRET}
  108.  
  109.       # Object storage (MinIO) configuration
  110.       MINIO_ENDPOINT: minio
  111.       MINIO_PORT: '9000'
  112.       MINIO_USE_SSL: 'false'
  113.       MINIO_ACCESS_KEY: ${MINIO_ROOT_USER:-minioadmin}
  114.       MINIO_SECRET_KEY: ${MINIO_ROOT_PASSWORD}
  115.  
  116.       # Payment provider (Helio)
  117.       HELIO_API_KEY: ${HELIO_API_KEY}
  118.       HELIO_PUBLIC_KEY: ${HELIO_PUBLIC_KEY}
  119.       HELIO_WEBHOOK_SECRET: ${HELIO_WEBHOOK_SECRET}
  120.  
  121.       # Job Scheduler Configuration
  122.       # Uncomment and adjust cron expressions as needed
  123.       # DISABLE_SCHEDULERS: 'true'  # Set to true to disable all scheduled jobs
  124.  
  125.       # Cron expressions for scheduled jobs (using node-cron format)
  126.       # SYNC_CONTENT_SCHEDULE: '0 0 5 * * *'             # 5 AM daily
  127.       # SYNC_USER_DATA_SCHEDULE: '0 0 4 * * *'           # 4 AM daily
  128.       # SYNC_CONNECTIONS_SCHEDULE: '0 0 * * * *'         # Every hour
  129.       # SYNC_PROFILES_SCHEDULE: '0 0 2 * * 3'            # 2 AM Wednesday
  130.       # SYNC_ANALYTICS_SCHEDULE: '0 0 6 * * 0'           # 6 AM Sunday
  131.       # SYNC_INTELLIGENCE_SCHEDULE: '0 0 6 * * *'        # 6 AM daily
  132.       # SYNC_REPUTATION_SCHEDULE: '0 0 3 * * 2'          # 3 AM Tuesday
  133.     restart: unless-stopped
  134.  
  135.   # PostgreSQL database with pgvector extension for embeddings
  136.   postgres:
  137.     restart: unless-stopped
  138.     image: pgvector/pgvector:pg17
  139.     environment:
  140.       POSTGRES_DB: x3k
  141.       POSTGRES_USER: postgres
  142.       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  143.     ports:
  144.      - '5432:5432'
  145.     volumes:
  146.      - postgres_data:/var/lib/postgresql/data
  147.       # Initialize multiple databases on first run
  148.       - ./ops/postgres/init-databases.sql:/docker-entrypoint-initdb.d/01-init-databases.sql:ro
  149.     healthcheck:
  150.       test: ['CMD-SHELL', 'pg_isready -U postgres -d x3k']
  151.       interval: 10s
  152.       timeout: 5s
  153.       retries: 5
  154.  
  155.   # Valkey (Redis fork) for caching and queue management
  156.   valkey:
  157.     restart: unless-stopped
  158.     image: valkey/valkey:7.2-alpine
  159.     ports:
  160.      - '6379:6379'
  161.  
  162.   # MinIO object storage (S3-compatible)
  163.   minio:
  164.     restart: unless-stopped
  165.     image: minio/minio:RELEASE.2025-07-23T15-54-02Z
  166.     command: server /data --console-address ":9001"
  167.     environment:
  168.       MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
  169.       MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
  170.     ports:
  171.      - '9000:9000' # API endpoint
  172.       - '9001:9001' # Web console
  173.     volumes:
  174.      - minio_data:/data
  175.     healthcheck:
  176.       test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
  177.       interval: 30s
  178.       timeout: 20s
  179.       retries: 3
  180.  
  181.   # Drizzle Studio - Database management UI (development only)
  182.   drizzle-gateway:
  183.     profiles: ['local'] # Only runs with --profile local
  184.     image: ghcr.io/drizzle-team/gateway:latest
  185.     container_name: drizzle-gateway
  186.     ports:
  187.      - '4983:4983'
  188.     environment:
  189.       PORT: 4983
  190.       STORE_PATH: /app/data
  191.       MASTERPASS: ${DRIZZLE_GATEWAY_PASSWORD}
  192.     volumes:
  193.      - drizzle-gateway-data:/app/data
  194.     restart: unless-stopped
  195.  
  196. # Named volumes for data persistence
  197. volumes:
  198.   postgres_data:
  199.   minio_data:
  200.  drizzle-gateway-data:
Advertisement
Add Comment
Please, Sign In to add comment