서버 인프라 문서 정리 (docs/server.md) + README 운영 환경 추가
- docs/SERVER_DEPLOY.md → docs/server.md 통합 재작성 - 접속 정보 (웹/Gitea/SSH), 서비스 구조, 자동 배포, SSL, 트러블슈팅 - 테스트 계정 4개 정보 포함 - README에 운영 환경 URL 요약 + 서버 가이드 링크 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
10
README.md
10
README.md
@@ -6,7 +6,15 @@
|
|||||||
백엔드는 **[CodeIgniter 4](https://codeigniter.com/)** 기반입니다.
|
백엔드는 **[CodeIgniter 4](https://codeigniter.com/)** 기반입니다.
|
||||||
|
|
||||||
**저장소:** [wixon-associates/jongryangje](https://github.com/wixon-associates/jongryangje)
|
**저장소:** [wixon-associates/jongryangje](https://github.com/wixon-associates/jongryangje)
|
||||||
| **[구현 화면 스크린샷](./docs/SCREENSHOTS.md)** | **[Notion 진행상황](https://www.notion.so/31b42b987c3780baba32ded04a1d41bb)** |
|
| **[구현 화면 스크린샷](./docs/SCREENSHOTS.md)** | **[Notion 진행상황](https://www.notion.so/31b42b987c3780baba32ded04a1d41bb)** | **[서버/배포 가이드](./docs/server.md)** |
|
||||||
|
|
||||||
|
### 운영 환경
|
||||||
|
|
||||||
|
| 서비스 | URL |
|
||||||
|
|--------|-----|
|
||||||
|
| 웹 서비스 | https://trash.wxn.co.kr |
|
||||||
|
| Gitea (Git) | https://gitea.wxn.co.kr |
|
||||||
|
| GitHub | https://github.com/wixon-associates/jongryangje |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,166 +0,0 @@
|
|||||||
# 서버 배포 가이드
|
|
||||||
|
|
||||||
## 서버 정보
|
|
||||||
|
|
||||||
| 항목 | 값 |
|
|
||||||
|------|------|
|
|
||||||
| 서버 IP | `116.122.157.166` |
|
|
||||||
| OS | Ubuntu 22.04.5 LTS |
|
|
||||||
| SSH 접속 | `ssh wixon@116.122.157.166` (비밀번호: `1111`) |
|
|
||||||
| 웹 도메인 | `https://trash.wxn.co.kr` |
|
|
||||||
| Gitea 도메인 | `https://gitea.wxn.co.kr` |
|
|
||||||
| 호스팅 | 카페24 (qm391-0435.cafe24.com) |
|
|
||||||
|
|
||||||
## Gitea (Git 서버)
|
|
||||||
|
|
||||||
| 항목 | 값 |
|
|
||||||
|------|------|
|
|
||||||
| 외부 URL | `https://gitea.wxn.co.kr` |
|
|
||||||
| 내부 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` | `gitea.wxn.co.kr/wixon/jongryangje` | 서버 배포용 (HTTPS) |
|
|
||||||
|
|
||||||
### push 방법
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# GitHub + Gitea 동시 push (Gitea push 시 자동 배포)
|
|
||||||
git push origin main && git push gitea main
|
|
||||||
```
|
|
||||||
|
|
||||||
## DNS / SSL 설정
|
|
||||||
|
|
||||||
| 도메인 | A 레코드 | SSL |
|
|
||||||
|--------|----------|-----|
|
|
||||||
| `trash.wxn.co.kr` | `116.122.157.166` | Let's Encrypt (자동 갱신) |
|
|
||||||
| `gitea.wxn.co.kr` | `116.122.157.166` | Let's Encrypt (자동 갱신) |
|
|
||||||
|
|
||||||
SSL 인증서 경로:
|
|
||||||
- `/etc/letsencrypt/live/trash.wxn.co.kr/`
|
|
||||||
- `/etc/letsencrypt/live/gitea.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
|
|
||||||
```
|
|
||||||
261
docs/server.md
Normal file
261
docs/server.md
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
# 서버 인프라 / 배포 가이드
|
||||||
|
|
||||||
|
## 접속 정보 요약
|
||||||
|
|
||||||
|
| 서비스 | URL | 계정 |
|
||||||
|
|--------|-----|------|
|
||||||
|
| 웹 서비스 | https://trash.wxn.co.kr | (아래 테스트 계정 참조) |
|
||||||
|
| Gitea | https://gitea.wxn.co.kr | `wixon` / `wixon1234!` |
|
||||||
|
| SSH | `ssh wixon@116.122.157.166` | `wixon` / `1111` |
|
||||||
|
|
||||||
|
### 웹 테스트 계정 (비밀번호: `test1234!`)
|
||||||
|
|
||||||
|
| ID | 역할 | Level | 소속 |
|
||||||
|
|----|------|-------|------|
|
||||||
|
| `tester_admin` | Super Admin | 4 | 전체 (지자체 선택 필요) |
|
||||||
|
| `tester_local` | 지자체관리자 | 3 | 중구청 |
|
||||||
|
| `tester_shop` | 지정판매소 | 2 | - |
|
||||||
|
| `tester_user` | 일반 사용자 | 1 | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 서버 환경
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|------|
|
||||||
|
| IP | `116.122.157.166` |
|
||||||
|
| OS | Ubuntu 22.04.5 LTS |
|
||||||
|
| 호스팅 | 카페24 (`qm391-0435.cafe24.com`) |
|
||||||
|
| PHP | 8.2.30 (PHP-FPM) |
|
||||||
|
| nginx | 호스트 설치 (80/443/8045) |
|
||||||
|
| Docker | 28.5.1 |
|
||||||
|
| DB | MySQL (원격 `3.36.27.239`) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 서비스 구조
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─── https://trash.wxn.co.kr
|
||||||
|
[클라이언트] ─── nginx ───┤
|
||||||
|
(80/443) └─── https://gitea.wxn.co.kr
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
nginx (8045) Gitea Docker (3001)
|
||||||
|
│
|
||||||
|
PHP-FPM 8.2
|
||||||
|
│
|
||||||
|
CodeIgniter 4
|
||||||
|
│
|
||||||
|
MySQL 3.36.27.239
|
||||||
|
```
|
||||||
|
|
||||||
|
### 포트 구성
|
||||||
|
|
||||||
|
| 포트 | 서비스 | 설명 |
|
||||||
|
|------|--------|------|
|
||||||
|
| 80 | nginx | HTTP → HTTPS 리다이렉트 |
|
||||||
|
| 443 | nginx | HTTPS (Let's Encrypt) |
|
||||||
|
| 8045 | nginx | PHP-FPM vhost (내부) |
|
||||||
|
| 3001 | Gitea | Git 서버 (Docker, 내부) |
|
||||||
|
| 9000 | webhook | 배포 트리거 수신 (내부) |
|
||||||
|
| 3306 | MySQL | 원격 DB (`3.36.27.239`) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Gitea (Git 서버)
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|------|
|
||||||
|
| 외부 URL | https://gitea.wxn.co.kr |
|
||||||
|
| 관리자 | `wixon` / `wixon1234!` (`admin@wxn.co.kr`) |
|
||||||
|
| 레포 | https://gitea.wxn.co.kr/wixon/jongryangje |
|
||||||
|
| 컨테이너 | `gitea` (Docker) |
|
||||||
|
| DB | SQLite (`/srv/gitea/data/gitea/gitea.db`) |
|
||||||
|
| docker-compose | `/srv/gitea/docker-compose.yml` |
|
||||||
|
| 데이터 | `/srv/gitea/data` |
|
||||||
|
|
||||||
|
### 관리 명령
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 자동 배포 (CI/CD)
|
||||||
|
|
||||||
|
### 플로우
|
||||||
|
|
||||||
|
```
|
||||||
|
로컬 git push → Gitea → Webhook (9000) → deploy.sh → 서버 반영
|
||||||
|
```
|
||||||
|
|
||||||
|
`git push gitea main` 한 번이면 서버에 자동 반영됩니다.
|
||||||
|
|
||||||
|
### 배포 스크립트 (`/srv/jongryangje/deploy.sh`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
cd /srv/jongryangje
|
||||||
|
git fetch origin main && git reset --hard origin/main
|
||||||
|
composer install --no-dev --no-interaction | tail -3
|
||||||
|
chmod -R 777 writable/
|
||||||
|
echo "Deployed at $(date)"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 관련 파일
|
||||||
|
|
||||||
|
| 파일 | 용도 |
|
||||||
|
|------|------|
|
||||||
|
| `/srv/jongryangje/deploy.sh` | 배포 실행 (git fetch + reset + composer) |
|
||||||
|
| `/srv/jongryangje/webhook-server.sh` | Webhook 수신 (nc 기반) |
|
||||||
|
| `/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"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 배포 로그 확인
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh wixon@116.122.157.166 "tail -20 /srv/jongryangje/writable/logs/deploy.log"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 로컬 Git 설정
|
||||||
|
|
||||||
|
### Remote
|
||||||
|
|
||||||
|
| Remote | URL | 용도 |
|
||||||
|
|--------|-----|------|
|
||||||
|
| `origin` | `github.com/wixon-associates/jongryangje` | GitHub (소스 관리) |
|
||||||
|
| `gitea` | `gitea.wxn.co.kr/wixon/jongryangje` | 서버 배포 (auto-deploy) |
|
||||||
|
|
||||||
|
### Push 방법
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# GitHub + 서버 동시 배포
|
||||||
|
git push origin main && git push gitea main
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 서버 파일 구조
|
||||||
|
|
||||||
|
```
|
||||||
|
/srv/
|
||||||
|
├── jongryangje/ # 프로젝트 (git clone)
|
||||||
|
│ ├── public/ # nginx document root
|
||||||
|
│ ├── .env # 환경 설정 (gitignore)
|
||||||
|
│ ├── deploy.sh # 배포 스크립트
|
||||||
|
│ └── webhook-server.sh # Webhook 수신
|
||||||
|
└── gitea/ # Gitea Docker
|
||||||
|
├── docker-compose.yml
|
||||||
|
└── data/ # Gitea 데이터
|
||||||
|
|
||||||
|
/etc/nginx/sites-available/
|
||||||
|
├── jongryangje # PHP-FPM vhost (:8045)
|
||||||
|
├── jongryangje-ssl # trash.wxn.co.kr (80→443, SSL)
|
||||||
|
└── gitea # gitea.wxn.co.kr (80→443, SSL → :3001)
|
||||||
|
|
||||||
|
/etc/letsencrypt/live/
|
||||||
|
├── trash.wxn.co.kr/ # 웹 SSL 인증서
|
||||||
|
└── gitea.wxn.co.kr/ # Gitea SSL 인증서
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. SSL 인증서 (Let's Encrypt)
|
||||||
|
|
||||||
|
| 도메인 | 인증서 경로 | 만료 |
|
||||||
|
|--------|-------------|------|
|
||||||
|
| `trash.wxn.co.kr` | `/etc/letsencrypt/live/trash.wxn.co.kr/` | 자동 갱신 (certbot) |
|
||||||
|
| `gitea.wxn.co.kr` | `/etc/letsencrypt/live/gitea.wxn.co.kr/` | 자동 갱신 (certbot) |
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 인증서 상태 확인
|
||||||
|
sudo certbot certificates
|
||||||
|
|
||||||
|
# 수동 갱신
|
||||||
|
sudo certbot renew
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 서비스 관리
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# nginx
|
||||||
|
sudo systemctl restart nginx
|
||||||
|
sudo nginx -t # 설정 테스트
|
||||||
|
|
||||||
|
# PHP-FPM
|
||||||
|
sudo systemctl restart php8.2-fpm
|
||||||
|
|
||||||
|
# Gitea
|
||||||
|
cd /srv/gitea && sudo docker compose restart
|
||||||
|
|
||||||
|
# Webhook
|
||||||
|
sudo systemctl restart jongryangje-webhook
|
||||||
|
|
||||||
|
# 전체 상태
|
||||||
|
sudo systemctl status nginx php8.2-fpm jongryangje-webhook
|
||||||
|
sudo docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. DNS 설정
|
||||||
|
|
||||||
|
| 도메인 | 타입 | 값 |
|
||||||
|
|--------|------|------|
|
||||||
|
| `trash.wxn.co.kr` | A | `116.122.157.166` |
|
||||||
|
| `gitea.wxn.co.kr` | A | `116.122.157.166` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 트러블슈팅
|
||||||
|
|
||||||
|
### 사이트 접속 안 됨
|
||||||
|
```bash
|
||||||
|
# nginx 상태 확인
|
||||||
|
sudo systemctl status nginx
|
||||||
|
sudo tail -20 /var/log/nginx/error.log
|
||||||
|
|
||||||
|
# PHP-FPM 확인
|
||||||
|
sudo systemctl status php8.2-fpm
|
||||||
|
```
|
||||||
|
|
||||||
|
### 배포 안 됨
|
||||||
|
```bash
|
||||||
|
# webhook 서비스 확인
|
||||||
|
sudo systemctl status jongryangje-webhook
|
||||||
|
|
||||||
|
# 수동 배포로 테스트
|
||||||
|
/srv/jongryangje/deploy.sh
|
||||||
|
|
||||||
|
# 배포 로그
|
||||||
|
tail -30 /srv/jongryangje/writable/logs/deploy.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gitea 접속 안 됨
|
||||||
|
```bash
|
||||||
|
sudo docker ps | grep gitea
|
||||||
|
sudo docker logs gitea --tail 30
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user