# 서버 배포 가이드

## 서버 정보

| 항목 | 값 |
|------|------|
| 서버 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 <name> --password <pass> --email <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
```
