Files
blog-backend/docker-compose.yml
pwy3282040@msecure.co 884853586d feat: 댓글 구조 변경
작성자 표시를 위해 CommentResponse에 isPostAuthor 필드 추가
2025-12-27 00:14:57 +09:00

92 lines
2.5 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=${DB_USER}
- SPRING_DATASOURCE_PASSWORD=${DB_PASS}
# Redis
- SPRING_DATA_REDIS_HOST=redis
- SPRING_DATA_REDIS_PORT=6379
# AWS S3 / MinIO (Docker 내부 통신용)
- SPRING_CLOUD_AWS_CREDENTIALS_ACCESS_KEY=admin
- SPRING_CLOUD_AWS_CREDENTIALS_SECRET_KEY=password
- SPRING_CLOUD_AWS_REGION_STATIC=ap-northeast-2
- SPRING_CLOUD_AWS_S3_ENDPOINT=http://minio:9000
# SMTP 메일 설정
- SPRING_MAIL_HOST=smtp.gmail.com
- SPRING_MAIL_PORT=587
- SPRING_MAIL_USERNAME=${MAIL_USER}
- SPRING_MAIL_PASSWORD=${MAIL_PASS}
# SMTP 세부 설정
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH=true
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE=true
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_REQUIRED=true
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_CONNECTIONTIMEOUT=5000
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_TIMEOUT=5000
- SPRING_MAIL_PROPERTIES_MAIL_SMTP_WRITETIMEOUT=5000
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: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_DB: blog_db
volumes:
- ./postgres_data:/var/lib/postgresql/data
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U ${DB_USER} -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