version: "3.8"
services:
redis:
image: redis:6
container_name: redis
ports:
- "6380:6379"
volumes:
- ./redis_data:/data
- ./conf/redis/redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
# 컨테이너 내부 포트(좌측은 호스트 포트 매핑이니 그대로 6379 유지)
port 6379
# 도커에서 데몬 모드 금지(포그라운드 실행) – 필수
daemonize no
# Docker에서는 stdout 로깅 권장
logfile ""
# 외부 접속 허용
bind 0.0.0.0
# 외부 노출 시 protected-mode 끄기 (주의: 반드시 비번 설정할 것)
protected-mode no
# 유휴 연결 유지 (초)
tcp-keepalive 300
# 간단히 requirepass 사용 (Redis 6+에서는 ACL 권장)
# 강력한 비밀번호로 바꾸세요!
requirepass 1234
# --- ACL로 대체하고 싶다면 (requirepass 대신 아래 두 줄 사용) ---
# user default on +@all ~* >VeryStrong_Passw0rd!
# aclfile /usr/local/etc/redis/users.acl
# 데이터 디렉토리 (compose에서 /data를 볼륨으로 마운트했음)
dir /data
# RDB 스냅샷(기본 예시: 15분 1개, 5분 10개, 1분 10000개 변경 시 스냅샷)
save 900 1
save 300 10
save 60 10000
# RDB 파일명
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
# AOF(추가 로그) 활성화 → RDB + AOF 병행: 장애 시 더 안전
appendonly yes
appendfilename "appendonly.aof"
# 안정성과 성능 절충: everysec 권장
appendfsync everysec
# AOF 리라이트(자동 최적화)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 최대 메모리 정책(선택): 메모리 꽉 찼을 때 LRU로 만료
# maxmemory 512mb
# maxmemory-policy allkeys-lru
# DB 개수
databases 16