Docker 개요
Multi-SaaS Kit의 Docker 환경을 소개합니다.
핵심 원칙
| 원칙 | 설명 |
|---|---|
| 프로젝트별 독립 | 각 프로젝트는 완전히 독립된 Docker 환경 |
| 2파일 체계 | amd64/arm64 아키텍처별 docker-compose 파일 |
| 소스/데이터 분리 | 코드는 workspace/, 데이터는 data/ |
| Makefile 통합 | 모든 명령은 make 명령어로 실행 |
아키텍처
┌─────────────────────────────────────────────────────────────┐
│ localhost:{APP_PORT} │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ nginx │ │
│ │ (리버스 프록시 + 정적 파일) │ │
│ └────────────────────────┬────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ web │ │
│ │ (Laravel + PHP-FPM) │ │
│ └────────────┬────────────────────────┬───────────┘ │
│ ↓ ↓ │
│ ┌────────────────────┐ ┌─────────────────────┐ │
│ │ postgres │ │ redis │ │
│ │ (PostgreSQL) │ │ (캐시/세션/큐) │ │
│ └────────────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
서비스 구성
| 서비스 | 이미지 | 역할 | 포트 |
|---|---|---|---|
| nginx | nginx:alpine | 웹서버, 리버스 프록시 | APP_PORT:80 |
| web | Custom PHP 8.4 | Laravel 애플리케이션 | 9000 (내부) |
| postgres | postgres:18 | 데이터베이스 | DB_PORT:5432 |
| redis | redis:7-alpine | 캐시, 세션, 큐 | REDIS_PORT:6379 |
서비스별 역할
nginx:
- 외부 요청 수신 (
:80) - PHP 요청은
web:9000으로 프록시 - 정적 파일 직접 서빙 (
/js,/css,/images) - Gzip 압축, 보안 헤더
web (Laravel):
- PHP-FPM으로 실행
- Laravel 애플리케이션 처리
- PostgreSQL, Redis 연결
- OPcache 활성화
postgres:
- 모든 데이터 저장
- RLS (Row-Level Security) 지원
- 헬스체크로 준비 상태 확인
redis:
- 세션 저장 (session.save_handler)
- 캐시 (CACHE_DRIVER=redis)
- 큐 (QUEUE_CONNECTION=redis)
- AOF 영속성 활성화
파일 구조
workspace/{project}/
├── _docker/
│ ├── docker-compose.amd64.yml # Intel/AMD용
│ ├── docker-compose.arm64.yml # Apple Silicon용
│ └── conf/
│ ├── nginx/
│ │ └── default.conf # nginx 설정
│ ├── php/
│ │ ├── Dockerfile # PHP 이미지 빌드
│ │ ├── php.ini # PHP 설정
│ │ └── docker-entrypoint.sh
│ ├── postgres/
│ │ └── init.sql # 초기 SQL (선택)
│ └── redis/
│ └── redis.conf # Redis 설정 (선택)
└── .env # 환경변수