No description
  • Shell 67.5%
  • Dockerfile 32.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-15 14:37:48 +09:00
build/php feat: 퍼스트가든 그누보드 멀티사이트(hgarden, waterplay) 도커 인프라 초기 구축 2026-10-15 13:46:52 +09:00
db feat: 퍼스트가든 그누보드 멀티사이트(hgarden, waterplay) 도커 인프라 초기 구축 2026-10-15 13:46:52 +09:00
nginx/conf.d feat: 인그레스 분리 설정 (hgarden: Cloudflare Tunnel, waterplay: 외부 Caddy LXC 연동) 및 phpmyadmin 추가 2026-10-15 13:58:10 +09:00
site feat: 퍼스트가든 그누보드 멀티사이트(hgarden, waterplay) 도커 인프라 초기 구축 2026-10-15 13:46:52 +09:00
.env.example feat: 인그레스 분리 설정 (hgarden: Cloudflare Tunnel, waterplay: 외부 Caddy LXC 연동) 및 phpmyadmin 추가 2026-10-15 13:58:10 +09:00
.gitignore feat: 퍼스트가든 그누보드 멀티사이트(hgarden, waterplay) 도커 인프라 초기 구축 2026-10-15 13:46:52 +09:00
docker-compose.yml 두개 사이트 모두 caddy 구동 2026-10-15 14:37:48 +09:00
README.md feat: 인그레스 분리 설정 (hgarden: Cloudflare Tunnel, waterplay: 외부 Caddy LXC 연동) 및 phpmyadmin 추가 2026-10-15 13:58:10 +09:00
setup.sh feat: 퍼스트가든 그누보드 멀티사이트(hgarden, waterplay) 도커 인프라 초기 구축 2026-10-15 13:46:52 +09:00

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 복원.
  • 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) 오버레이 마운트
  • 네트워크 분리 & 보안:
    • frontend: Ingress(Cloudflare Tunnel / Caddy) <-> Nginx <-> PHP
    • backend: 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 로깅).

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에 설정한 값