80 lines
1.9 KiB
YAML
80 lines
1.9 KiB
YAML
services:
|
|
# 1. 백엔드 애플리케이션
|
|
blog-api:
|
|
build: .
|
|
container_name: blog-api
|
|
restart: always
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
# Database
|
|
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/blog_db
|
|
- SPRING_DATASOURCE_USERNAME=wypark
|
|
- SPRING_DATASOURCE_PASSWORD=your_password
|
|
# Redis
|
|
- SPRING_DATA_REDIS_HOST=redis
|
|
- SPRING_DATA_REDIS_PORT=6379
|
|
# AWS S3 / MinIO (Docker 내부 통신용)
|
|
- CLOUD_AWS_CREDENTIALS_ACCESS_KEY=admin
|
|
- CLOUD_AWS_CREDENTIALS_SECRET_KEY=password
|
|
- CLOUD_AWS_REGION_STATIC=ap-northeast-2
|
|
- CLOUD_AWS_S3_ENDPOINT=http://minio:9000
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
networks:
|
|
- blog-net
|
|
|
|
# 2. 데이터베이스 (PostgreSQL)
|
|
db:
|
|
image: postgres:17-alpine
|
|
container_name: blog-db
|
|
restart: always
|
|
ports:
|
|
- "5432:5432"
|
|
environment:
|
|
POSTGRES_USER: wypark
|
|
POSTGRES_PASSWORD: your_password
|
|
POSTGRES_DB: blog_db
|
|
volumes:
|
|
- ./postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U wypark -d blog_db"]
|
|
interval: 5s
|
|
retries: 5
|
|
networks:
|
|
- blog-net
|
|
|
|
# 3. 캐시 서버 (Redis)
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: blog-redis
|
|
restart: always
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 5s
|
|
retries: 5
|
|
networks:
|
|
- blog-net
|
|
|
|
# 4. 오브젝트 스토리지 (MinIO)
|
|
minio:
|
|
image: minio/minio
|
|
container_name: minio
|
|
ports:
|
|
- "9000:9000" # API 통신
|
|
- "9001:9001" # 웹 콘솔
|
|
environment:
|
|
MINIO_ROOT_USER: "admin"
|
|
MINIO_ROOT_PASSWORD: "password"
|
|
command: server /data --console-address ":9001"
|
|
volumes:
|
|
- ./minio_data:/data
|
|
networks:
|
|
- blog-net
|
|
|
|
networks:
|
|
blog-net:
|
|
driver: bridge |