# 서버 인프라 / 배포 가이드 ## 접속 정보 요약 | 서비스 | 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 --password --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 ```