4.2 KiB
4.2 KiB
Gifticon Platform Docker Runbook (Dev/Prod 통합)
이 문서는 Gifticon Platform의 Docker 기반 실행 환경을 운영/배포 관점에서 정리한 통합 런북이다.
포함 범위:
- 컨테이너 역할/연동 구조
- 프록시(HTTPS terminate) 구조
- 정상 동작 테스트(필수 체크리스트)
- 스케줄/큐/메일/캐시 관련 대표 장애 사례 및 해결
- 배포 절차(운영 권장 루틴)
- 운영 하드닝(보안/안정성) 권장사항
- 데이터 영속성/백업
0. 아키텍처 개요
0.1 컨테이너 구성(대표)
gifticon-web: Nginx (Web 도메인, 정적/라우팅 + PHP-FPM upstream)gifticon-admin: Nginx (Admin 도메인, 인증/허용 IP 적용 가능)gifticon-app: PHP-FPM + Laravel (비즈니스 로직)gifticon-worker: Laravel queue worker (Redis 큐 처리)gifticon-scheduler: Laravel scheduler (schedule:work 상시 실행)gifticon-db: MariaDB (개발/임시용. 리얼에서는 RDS 사용 가능)gifticon-redis: Redis (cache/session/queue)- (mailpit: 개발용 SMTP 테스트 — 현재 제거 완료)
0.2 프록시(NAS/nginx-proxy/CloudFront) 연결
외부에서 HTTPS로 들어오면 프록시가 HTTPS를 terminate 하고 내부 도커는 HTTP로 통신한다.
예시(NAS nginx-proxy):
https://four.syye.net→http://<docker-host>:8091(gifticon-web)https://shot.syye.net→http://<docker-host>:8092(gifticon-admin)
운영에서도:
- CloudFront(HTTPS) → EC2(HTTP) → Docker(gifticon-web/admin) 동일 패턴으로 적용 가능.
프록시에서 전달 헤더:
HostX-Forwarded-Proto=httpsX-Forwarded-ForX-Forwarded-Host
1. docker-compose 주요 역할/의미
1.1 gifticon-web (nginx)
- 역할: Web 도메인용 Nginx
- 포트: 8091:80 (호스트 노출)
- 볼륨:
./src:/var/www/html:ro(소스 read-only)./nginx/web/default.conf:/etc/nginx/conf.d/default.conf:ro
1.2 gifticon-admin (nginx)
- 역할: Admin 도메인용 Nginx
- 포트: 8092:80
- 볼륨:
./src:/var/www/html:ro./nginx/admin/default.conf:/etc/nginx/conf.d/default.conf:ro./nginx/auth:/etc/nginx/auth:ro(허용 IP, basic auth 등 정책 적용)
1.3 gifticon-app (php-fpm + laravel)
- 역할: Laravel 실행
- depends_on: db, redis
- UID/GID 매핑으로 호스트 파일 권한 문제 방지
- 주의:
artisan tinker실행 시 PsySH가 HOME 디렉토리에 쓰기를 시도할 수 있음
→docker exec -it -e HOME=/tmp gifticon-app php artisan tinker권장
1.4 gifticon-worker (queue)
- 역할: Redis 큐 처리
- command:
php artisan queue:work ... - 운영 포인트:
- Closure Job(익명 함수 dispatch) 금지: 직렬화/경로 오류 발생 가능
- 반드시 Job 클래스로 구현
1.5 gifticon-scheduler (schedule)
- 역할:
php artisan schedule:work상시 실행 - Laravel 12 기준 스케줄 정의는
routes/console.php에서 가능 withoutOverlapping()사용 시->name()을 먼저 지정해야 함
(name 없는 상태에서 withoutOverlapping 호출하면 LogicException)
1.6 gifticon-db (mariadb)
- 역할: 개발/임시 DB
- 영속성:
db_data볼륨 사용 (재시작해도 유지) - 주의:
docker compose down -v는 볼륨 삭제(데이터 삭제)
1.7 gifticon-redis
- 역할: cache/session/queue
- 영속성:
redis_data볼륨(appendonly) 사용
2. 운영(리얼) 서버 적용 원칙
2.1 APP_ENV / APP_DEBUG
운영 권장:
APP_ENV=productionAPP_DEBUG=false(디버그/스택노출 위험)
2.2 캐시 전략(운영 배포 후 권장)
운영 배포 직후:
php artisan optimize:clearphp artisan config:cachephp artisan route:cachephp artisan view:cache
템플릿 변경 후 메일/뷰가 반영 안 되는 문제는 대부분 view cache 또는 worker 재시작 누락.
2.3 secrets 관리
- .env 민감정보(키/비번/SMTP/토큰)는 저장소 커밋 금지
- 운영 서버에서는
.env권한 600 + 배포 파이프라인에서 주입 권장
3. “정상 동작” 점검 체크리스트 (필수)
3.1 컨테이너 상태 확인
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"