145 lines
3.7 KiB
YAML
145 lines
3.7 KiB
YAML
services:
|
|
# ----------------------------------------
|
|
# 1. Frontend (Nginx 정적 호스팅)
|
|
# ----------------------------------------
|
|
frontend:
|
|
container_name: ${PROJECT_NAME}-frontend
|
|
build:
|
|
context: ./${FRONTEND_DIR}
|
|
dockerfile: Dockerfile
|
|
args:
|
|
- BUILD_MODE=${BUILD_MODE}
|
|
- VITE_API_BASE_URL=${FRONT_API_URL}
|
|
expose:
|
|
- "80"
|
|
environment:
|
|
- NODE_ENV=${APP_ENV}
|
|
restart: unless-stopped
|
|
networks:
|
|
- app-network
|
|
- proxy
|
|
# depends_on:
|
|
# - backend
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget -qO- http://localhost:80/ || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '0.5'
|
|
memory: 512m
|
|
|
|
# ----------------------------------------
|
|
# 2. Backend (HTTP API & WebSocket 통합)
|
|
# ----------------------------------------
|
|
# backend:
|
|
# container_name: ${PROJECT_NAME}-backend
|
|
# build:
|
|
# context: ./${BACKEND_DIR}
|
|
# dockerfile: Dockerfile
|
|
# expose:
|
|
# - "${BACKEND_PORT}"
|
|
# - "${WEBSOCKET_PORT}"
|
|
# env_file:
|
|
# - ./${BACKEND_DIR}/.env.${APP_ENV}
|
|
# environment:
|
|
# - NODE_ENV=${APP_ENV}
|
|
# - PORT=${BACKEND_PORT}
|
|
# - WEBSOCKET_PORT=${WEBSOCKET_PORT}
|
|
# - CORS_ORIGIN=${CORS_ORIGIN}
|
|
# - DB_HOST=db
|
|
# - DB_PORT=5432
|
|
# - DB_USER=${DB_USER}
|
|
# - DB_PASSWORD=${DB_PASSWORD}
|
|
# - DB_NAME=${DB_NAME}
|
|
# - REDIS_HOST=redis
|
|
# - REDIS_PORT=6379
|
|
# - REDIS_PASSWORD=${REDIS_PASSWORD}
|
|
# restart: unless-stopped
|
|
# networks:
|
|
# - app-network
|
|
# - proxy
|
|
# depends_on:
|
|
# db:
|
|
# condition: service_healthy
|
|
# redis:
|
|
# condition: service_healthy
|
|
# healthcheck:
|
|
# test: ["CMD-SHELL", "wget -qO- http://localhost:${BACKEND_PORT}/ || exit 1"]
|
|
# interval: 30s
|
|
# timeout: 5s
|
|
# retries: 5
|
|
# start_period: 30s
|
|
# deploy:
|
|
# resources:
|
|
# limits:
|
|
# cpus: '1.0'
|
|
# memory: 1g
|
|
|
|
# ----------------------------------------
|
|
# 3. Database (PostgreSQL) — 내부 네트워크 전용
|
|
# ----------------------------------------
|
|
# db:
|
|
# container_name: ${PROJECT_NAME}-db
|
|
# image: ${DB_IMAGE}
|
|
# expose:
|
|
# - "5432"
|
|
# environment:
|
|
# POSTGRES_USER: ${DB_USER}
|
|
# POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
# POSTGRES_DB: ${DB_NAME}
|
|
# volumes:
|
|
# - ./db-data:/var/lib/postgresql/data
|
|
# restart: always
|
|
# networks:
|
|
# - app-network
|
|
# healthcheck:
|
|
# test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
|
|
# interval: 10s
|
|
# timeout: 5s
|
|
# retries: 5
|
|
# start_period: 10s
|
|
# deploy:
|
|
# resources:
|
|
# limits:
|
|
# cpus: '0.5'
|
|
# memory: 512m
|
|
# labels:
|
|
# - "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
# ----------------------------------------
|
|
# 4. Redis — 내부 네트워크 전용
|
|
# ----------------------------------------
|
|
# redis:
|
|
# container_name: ${PROJECT_NAME}-redis
|
|
# image: ${REDIS_IMAGE}
|
|
# command: redis-server --requirepass ${REDIS_PASSWORD}
|
|
# expose:
|
|
# - "6379"
|
|
# volumes:
|
|
# - ./redis-data:/data
|
|
# restart: always
|
|
# networks:
|
|
# - app-network
|
|
# healthcheck:
|
|
# test: ["CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD} ping | grep PONG"]
|
|
# interval: 10s
|
|
# timeout: 5s
|
|
# retries: 5
|
|
# start_period: 5s
|
|
# deploy:
|
|
# resources:
|
|
# limits:
|
|
# cpus: '0.25'
|
|
# memory: 256m
|
|
# labels:
|
|
# - "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
networks:
|
|
app-network:
|
|
driver: bridge
|
|
proxy:
|
|
external: true |