diff --git a/docs/SERVER_DEPLOY.md b/docs/SERVER_DEPLOY.md new file mode 100644 index 0000000..0e59512 --- /dev/null +++ b/docs/SERVER_DEPLOY.md @@ -0,0 +1,186 @@ +# 서버 배포 가이드 + +## 서버 정보 + +| 항목 | 값 | +|------|------| +| 서버 IP | `116.122.157.166` | +| OS | Ubuntu 22.04.5 LTS | +| SSH 접속 | `ssh wixon@116.122.157.166` (비밀번호: `1111`) | +| 도메인 | `trash.wxn.co.kr` | +| 호스팅 | 카페24 (qm391-0435.cafe24.com) | + +## Gitea (Git 서버) + +| 항목 | 값 | +|------|------| +| 내부 URL | `http://localhost:3001` | +| 컨테이너 | `gitea` (Docker) | +| 관리자 계정 | `wixon` / `wixon1234!` | +| 관리자 이메일 | `admin@wxn.co.kr` | +| 레포 URL (내부) | `http://localhost:3001/wixon/jongryangje` | +| SSH 포트 (내부) | `2222` | +| DB | SQLite (`/srv/gitea/data/gitea/gitea.db`) | +| 데이터 경로 | `/srv/gitea/data` | +| docker-compose | `/srv/gitea/docker-compose.yml` | + +### Gitea 관리 명령 + +```bash +# 컨테이너 상태 확인 +sudo docker ps | grep gitea + +# 재시작 +cd /srv/gitea && sudo docker compose restart + +# 로그 확인 +sudo docker logs gitea --tail 50 + +# 사용자 추가 +sudo docker exec -u git gitea gitea admin user create \ + --username --password --email --admin +``` + +## 웹 서비스 구조 + +``` +[클라이언트] → [NPM (80/443)] → [nginx (8045)] → [PHP-FPM 8.2] → [CodeIgniter 4] + ↓ + [MySQL 3.36.27.239] +``` + +| 컴포넌트 | 포트 | 설명 | +|----------|------|------| +| Nginx Proxy Manager | 80/443 | 도메인 프록시 (Docker) | +| nginx | 8045 | PHP-FPM 연동 vhost | +| PHP-FPM 8.2 | unix socket | `/run/php/php8.2-fpm.sock` | +| Gitea | 3001 | Git 서버 (Docker) | +| MySQL | 3306 (원격 3.36.27.239) | 데이터베이스 | + +### 프로젝트 배포 경로 + +``` +/srv/jongryangje/ # 프로젝트 루트 (git clone) +/srv/jongryangje/public/ # nginx document root +/srv/jongryangje/.env # 환경 설정 (gitignore) +/srv/gitea/ # Gitea Docker 설정 +``` + +### nginx 설정 + +``` +/etc/nginx/sites-available/jongryangje # vhost 설정 +/etc/nginx/sites-enabled/jongryangje # symlink +``` + +### NPM 프록시 설정 + +NPM 컨테이너 내부에서 `trash.wxn.co.kr → 116.122.157.166:8045` 프록시: +``` +/data/nginx/proxy_host/7.conf +``` + +## 자동 배포 (CI/CD) + +### 플로우 + +``` +[로컬 git push] → [Gitea] → [Webhook (port 9000)] → [deploy.sh] → [git pull + composer install] +``` + +### 관련 파일 + +| 파일 | 용도 | +|------|------| +| `/srv/jongryangje/deploy.sh` | 배포 스크립트 (git pull + composer) | +| `/srv/jongryangje/webhook-server.sh` | Webhook 수신 서버 | +| `/etc/systemd/system/jongryangje-webhook.service` | Webhook systemd 서비스 | +| `/srv/jongryangje/writable/logs/deploy.log` | 배포 로그 | + +### 배포 명령 + +```bash +# 수동 배포 +ssh wixon@116.122.157.166 "/srv/jongryangje/deploy.sh" + +# 자동 배포 (로컬에서 push만 하면 됨) +git push gitea main + +# 배포 로그 확인 +ssh wixon@116.122.157.166 "tail -20 /srv/jongryangje/writable/logs/deploy.log" + +# webhook 서비스 상태 +ssh wixon@116.122.157.166 "sudo systemctl status jongryangje-webhook" +``` + +## 로컬 Git 설정 + +### Remote 목록 + +| Remote | URL | 용도 | +|--------|-----|------| +| `origin` | `github.com/wixon-associates/jongryangje` | GitHub (메인) | +| `gitea` | `localhost:13001/wixon/jongryangje` (SSH 터널) | 서버 배포용 | + +### SSH 터널 (Gitea push용) + +외부에서 Gitea 3001 포트에 직접 접근할 수 없어 SSH 터널을 사용합니다. + +```bash +# 터널 열기 +sshpass -p '1111' ssh -f -N -L 13001:localhost:3001 wixon@116.122.157.166 + +# push (터널 열린 상태에서) +git push gitea main + +# 또는 origin(GitHub)과 gitea 모두 push +git push origin main && git push gitea main +``` + +### push 자동화 스크립트 + +```bash +#!/bin/bash +# push-all.sh — GitHub + Gitea 동시 push +git push origin main +# SSH 터널 확인/열기 +if ! nc -z localhost 13001 2>/dev/null; then + sshpass -p '1111' ssh -f -N -L 13001:localhost:3001 wixon@116.122.157.166 + sleep 2 +fi +git push gitea main +echo "Push complete to GitHub + Gitea (auto-deploy triggered)" +``` + +## DNS 설정 + +`trash.wxn.co.kr` A 레코드를 `116.122.157.166`으로 설정 필요. + +``` +trash.wxn.co.kr → A → 116.122.157.166 +``` + +DNS가 적용되면 `http://trash.wxn.co.kr`으로 접속 가능합니다. + +## 서비스 관리 + +```bash +# nginx 재시작 +sudo systemctl restart nginx + +# PHP-FPM 재시작 +sudo systemctl restart php8.2-fpm + +# Gitea 재시작 +cd /srv/gitea && sudo docker compose restart + +# NPM 재시작 +sudo docker restart nginx-proxy-manager + +# Webhook 재시작 +sudo systemctl restart jongryangje-webhook + +# 전체 상태 확인 +sudo systemctl status nginx php8.2-fpm jongryangje-webhook +sudo docker ps +```