docker-compose.template.yml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # Docker Compose Template
  2. # For local development and testing
  3. version: "3.9"
  4. services:
  5. # ==============================================================================
  6. # Application
  7. # ==============================================================================
  8. app:
  9. build:
  10. context: .
  11. dockerfile: Dockerfile
  12. # For development, use debug target
  13. # target: debug
  14. image: ${IMAGE_NAME:-myapp}:${IMAGE_TAG:-latest}
  15. container_name: myapp
  16. restart: unless-stopped
  17. ports:
  18. - "${APP_PORT:-8000}:8000"
  19. environment:
  20. - DATABASE_URL=postgres://${DB_USER:-postgres}:${DB_PASSWORD:-postgres}@db:5432/${DB_NAME:-myapp}
  21. - REDIS_URL=redis://redis:6379/0
  22. - LOG_LEVEL=${LOG_LEVEL:-info}
  23. depends_on:
  24. db:
  25. condition: service_healthy
  26. redis:
  27. condition: service_healthy
  28. healthcheck:
  29. test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
  30. interval: 30s
  31. timeout: 10s
  32. retries: 3
  33. start_period: 10s
  34. volumes:
  35. # Development: mount source code
  36. # - ./src:/app/src:ro
  37. - app_logs:/app/logs
  38. networks:
  39. - app-network
  40. # ==============================================================================
  41. # Database
  42. # ==============================================================================
  43. db:
  44. image: postgres:15-alpine
  45. container_name: myapp-db
  46. restart: unless-stopped
  47. environment:
  48. POSTGRES_USER: ${DB_USER:-postgres}
  49. POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
  50. POSTGRES_DB: ${DB_NAME:-myapp}
  51. ports:
  52. - "${DB_PORT:-5432}:5432"
  53. volumes:
  54. - postgres_data:/var/lib/postgresql/data
  55. # - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  56. healthcheck:
  57. test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-myapp}"]
  58. interval: 10s
  59. timeout: 5s
  60. retries: 5
  61. networks:
  62. - app-network
  63. # ==============================================================================
  64. # Cache
  65. # ==============================================================================
  66. redis:
  67. image: redis:7-alpine
  68. container_name: myapp-redis
  69. restart: unless-stopped
  70. command: redis-server --appendonly yes
  71. ports:
  72. - "${REDIS_PORT:-6379}:6379"
  73. volumes:
  74. - redis_data:/data
  75. healthcheck:
  76. test: ["CMD", "redis-cli", "ping"]
  77. interval: 10s
  78. timeout: 5s
  79. retries: 5
  80. networks:
  81. - app-network
  82. # ==============================================================================
  83. # Optional: Worker (for background jobs)
  84. # ==============================================================================
  85. # worker:
  86. # build:
  87. # context: .
  88. # dockerfile: Dockerfile
  89. # container_name: myapp-worker
  90. # restart: unless-stopped
  91. # command: python -m celery -A src.worker worker --loglevel=info
  92. # environment:
  93. # - DATABASE_URL=postgres://${DB_USER:-postgres}:${DB_PASSWORD:-postgres}@db:5432/${DB_NAME:-myapp}
  94. # - REDIS_URL=redis://redis:6379/0
  95. # depends_on:
  96. # - db
  97. # - redis
  98. # networks:
  99. # - app-network
  100. # ==============================================================================
  101. # Optional: Nginx (reverse proxy)
  102. # ==============================================================================
  103. # nginx:
  104. # image: nginx:alpine
  105. # container_name: myapp-nginx
  106. # restart: unless-stopped
  107. # ports:
  108. # - "80:80"
  109. # - "443:443"
  110. # volumes:
  111. # - ./nginx.conf:/etc/nginx/nginx.conf:ro
  112. # - ./certs:/etc/nginx/certs:ro
  113. # depends_on:
  114. # - app
  115. # networks:
  116. # - app-network
  117. # ==============================================================================
  118. # Volumes
  119. # ==============================================================================
  120. volumes:
  121. postgres_data:
  122. driver: local
  123. redis_data:
  124. driver: local
  125. app_logs:
  126. driver: local
  127. # ==============================================================================
  128. # Networks
  129. # ==============================================================================
  130. networks:
  131. app-network:
  132. driver: bridge