Docker 환경 설정
multi-saas-kit의 Docker 환경 구성을 이해합니다.
2파일 체계
아키텍처별로 2개의 Docker Compose 파일을 제공합니다:
| 파일 | 아키텍처 |
|---|---|
docker-compose.amd64.yml | Intel/AMD (x86_64) |
docker-compose.arm64.yml | Apple Silicon (ARM64) |
dev/prod 분리 없음
서버 분리로 환경을 구분합니다. 동일한 설정으로 모든 환경에서 일관성을 유지합니다.
Makefile이 시스템 아키텍처를 자동 감지하므로 수동 선택 불필요!
서비스 구성
┌─────────────────────────────────────┐
│ localhost:8080 │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ nginx │ │
│ │ (웹서버) │ │
│ └──────────┬──────────┘ │
│ ↓ │
│ ┌─────────────────────┐ │
│ │ web │ │
│ │ (Laravel + PHP) │ │
│ └──────────┬──────────┘ │
│ │ │
│ ┌──────────┴──────────┐ │
│ ↓ ↓ │
│ ┌────────┐ ┌─────────┐ │
│ │postgres│ │ redis │ │
│ └────────┘ └─────────┘ │
└──────────────────────────────────── ─┘
서비스 목록
| 서비스 | 역할 |
|---|---|
| nginx | 웹서버, 정적 파일 서빙 |
| web | Laravel 애플리케이션 (PHP-FPM) |
| postgres | PostgreSQL 데이터베이스 |
| redis | 캐시, 세션, 큐 |
파일 위치
workspace/{project}/
├── _docker/
│ ├── docker-compose.amd64.yml # Intel/AMD
│ ├── docker-compose.arm64.yml # Apple Silicon
│ └── conf/
│ ├── nginx/
│ │ └── default.conf
│ ├── php/
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── postgres/
│ │ └── init.sql
│ └── redis/
│ └── redis.conf
└── .env
데이터 저장 위치
데이터는 프로젝트 외부에 저장됩니다:
multi-saas-kit/
├── workspace/{project}/ # 소스 코드 (Git 관리)
└── data/projects/{project}/ # 데이터 (Git 제외)
├── postgres/
└── redis/
장점:
- 릴리즈 스냅샷이 가벼움
- 백업/복원 단순화
- 소스와 데이터 완전 분리
.env 설정
필수 변수
# 프로젝트 식별
PROJECT_NAME=myapp
# 포트 설정
APP_PORT=8080
DB_PORT=5432
REDIS_PORT=6379
# Laravel
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:...
# Database
DB_CONNECTION=pgsql
DB_DATABASE=myapp_db
DB_USERNAME=postgres
DB_PASSWORD=secret
# Redis
REDIS_CLIENT=phpredis
포트 충돌 시
여러 프로젝트 동시 실행 시 포트 변경:
# 프로젝트 A
APP_PORT=8080
DB_PORT=5432
REDIS_PORT=6379
# 프로젝트 B
APP_PORT=8081
DB_PORT=5433
REDIS_PORT=6380
컨테이너 이름
프로젝트별로 고유한 컨테이너 이름:
{PROJECT_NAME}-web
{PROJECT_NAME}-postgres
{PROJECT_NAME}-redis
{PROJECT_NAME}-nginx
예: myapp-web, myapp-postgres
자주 쓰는 명령어
모든 명령어는 루트 폴더에서 NAME 파라미터로 실행합니다.
# 시작
make up NAME=myapp
# 중지
make down NAME=myapp
# 상태 확인
make status NAME=myapp
# 로그 확인
make logs NAME=myapp
# 컨테이너 쉘 접속
make shell NAME=myapp # 앱
make shell-db NAME=myapp # PostgreSQL
문제 해결
컨테이너가 시작되지 않음
# 선행조건 검사
make check-prereq
# 로그 확인
make logs NAME=myapp
DB 연결 실패
# DB 컨테이너 상태 확인
docker ps | grep postgres
# DB 로그 확인
make logs-db NAME=myapp
포트 충돌
Error: port 8080 is already in use
→ .env에서 APP_PORT 변경