No description
- Shell 67.5%
- Dockerfile 32.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| build/php | ||
| db | ||
| nginx/conf.d | ||
| site | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
| setup.sh | ||
First Garden Web - Gnuboard Multi-Site Infrastructure
퍼스트가든 웹사이트 및 2개 외부 사이트(HGarden, Waterplay)를 위한 고성능, 컨테이너 격리형 그누보드5 도커 인프라입니다.
1. 아키텍처 및 인그레스 구성
- HGarden (
h-garden.co.kr):- 인그레스: Cloudflare Tunnel (
cloudflared) 전용 라우팅. - 외부 포트 개방 없이 내부 도커 네트워크
frontend를 통해http://hgarden-web:80으로 직접 터널링. - Cloudflare의
CF-Connecting-IP헤더를 통해 방문자 실제 IP 복원.
- 인그레스: Cloudflare Tunnel (
- Waterplay (
waterplay.firstgarden.co.kr):- 인그레스: 외부 전용 Caddy LXC 리버스 프록시 연동.
- Docker LXC 호스트의 포트(
WATERPLAY_PORT: 8081)로 트래픽 인입. - Caddy 프록시 헤더(
X-Forwarded-For)를 통해 방문자 실제 IP 복원.
- 단일 MariaDB 10.11 컨테이너: 리소스 절약 및 사이트별 DB/계정(
hgarden,waterplay) 완전 격리 (db/init.sh). - PHP 8.2-FPM & Nginx 사이트별 독립 구동:
hgarden-app,hgarden-web/waterplay-app,waterplay-web간 장애 격리 및 프로세스 리소스 분리. - 순수 그누보드 코어 공용 관리:
site/default를 읽기 전용(:ro)으로 컨테이너 표준 경로(/var/www/html)에 마운트하여 단일 git pull로 코어 보안 패치 일괄 적용. - 고유 데이터 격리 마운트:
- HGarden:
site/hgarden/data(rw),site/hgarden/theme/custom-theme(rw) 오버레이 마운트 - Waterplay:
site/waterplay/data(rw),site/waterplay/theme/custom-theme(rw) 오버레이 마운트
- HGarden:
- 네트워크 분리 & 보안:
frontend: Ingress(Cloudflare Tunnel / Caddy) <-> Nginx <-> PHPbackend: PHP <-> MariaDB (DB는 외부 및 웹서버 직결 차단)
- 업로드 경로 보안 강화:
/data/file/등 업로드 경로 내 웹쉘/스크립트 실행 원천 차단 (403 Forbidden)
- MariaDB 대량 쿼리 튜닝:
- Intel i5 4C/4T, LXC 4-8GB 환경 맞춤
db/conf.d/custom.cnf(InnoDB Buffer Pool 2GB, 동시 커넥션 200, Flush Log commit 2, Slow Query 로깅).
- Intel i5 4C/4T, LXC 4-8GB 환경 맞춤
2. 외부 Caddy LXC 설정 예시 (Waterplay)
기존 Caddy LXC의 Caddyfile에 아래 설정을 추가합니다:
waterplay.firstgarden.co.kr {
reverse_proxy <Docker-LXC-IP>:8081 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
3. 디렉터리 구조
├── docker-compose.yml
├── .env
├── .env.example
├── setup.sh # 초기화 및 권한 설정, 그누보드 코어 clone 스크립트
│
├── build/
│ └── php/
│ ├── Dockerfile # PHP 8.2-FPM + 그누보드 필수 확장(gd, mysqli, pdo, opcache 등)
│ └── php.ini # 64M 업로드, 메모리 256M, opcache 최적화
│
├── nginx/
│ └── conf.d/
│ ├── cloudflare-realip.conf # Cloudflare 및 사설망 Real IP 복원
│ ├── hgarden/default.conf # HGarden Nginx (Cloudflare Tunnel 인그레스)
│ └── waterplay/default.conf # Waterplay Nginx (Caddy LXC 인그레스)
│
├── db/
│ ├── init.sh # hgarden, waterplay 및 독립 유저 초기화 (특수문자 패스워드 안전 지원)
│ ├── conf.d/custom.cnf # 대량 조회 대비 MariaDB InnoDB 성능 튜닝
│ └── data/ # MariaDB 데이터 영구 볼륨
│
└── site/
├── default/ # 공식 순수 그누보드 코어 (ro 마운트)
├── hgarden/
│ ├── data/ # hgarden 전용 data/ (dbconfig.php, 첨부파일 등)
│ └── theme/custom-theme/
└── waterplay/
├── data/ # waterplay 전용 data/
└── theme/custom-theme/
4. 빠른 시작 (Quick Start)
1) 환경 변수 설정
.env 파일에서 DB 비밀번호 및 Cloudflare Tunnel Token을 설정합니다.
cp .env.example .env
nano .env
2) 초기 셋업 스크립트 실행
./setup.sh
- 그누보드 코어 자동 최신화 (
site/default) site/hgarden/data,site/waterplay/data등 생성 및 권한 설정
3) 컨테이너 빌드 및 실행
docker compose build
docker compose up -d
4) 그누보드 설치
각 사이트 도메인 접속 후 안내에 따라 웹 인스톨러를 진행합니다.
- MySQL Host:
db - HGarden: DB명
hgarden/ 사용자:hgarden/ 비밀번호:.env에 설정한 값 - Waterplay: DB명
waterplay/ 사용자:waterplay/ 비밀번호:.env에 설정한 값