docs: [ops-manual] sam-dev 서버 유지보수 정책 문서화

- 01-server-overview: sam-dev 서비스 현황 갱신 (Swap, PHP 5.6/Apache 비활성화, cron 정리)
- 02-daily-operations: sam-dev 리소스 관리 섹션 추가 (Swap, Gitea 캐시, 비활성 서비스)
- 06-database: sam-dev binlog 7일 보관 정책 추가
This commit is contained in:
2026-03-09 16:16:47 +09:00
parent 85dc30bfcd
commit 04e877dea3
3 changed files with 98 additions and 8 deletions

View File

@@ -218,14 +218,24 @@
### 서비스 현황
| 서비스 | 포트 | 상태 |
|--------|------|------|
| Nginx | 80/443 | active |
| Apache | 8080 | active (레거시) |
| MySQL 8.4 | 3306 (localhost) | active |
| Gitea | 3000 | active |
| Next.js (PM2) | 3001 | active |
| fail2ban | - | active |
| 서비스 | 포트 | 상태 | 비고 |
|--------|------|------|------|
| Nginx | 80/443 | active | |
| PHP 8.4 FPM | unix socket | active | SAM 앱 (api, mng, sales) |
| PHP 7.3 FPM | unix socket | active | 5130.codebridge-x.com 레거시 전용 |
| MySQL 8.4 | 3306 (localhost) | active | binlog 7일 보관 |
| Gitea | 3000 | active | |
| Next.js (PM2) | 3001 | active | |
| fail2ban | - | active | |
| Swap | - | active | 4G (/swapfile, fstab 등록) |
| ~~Apache~~ | ~~8080~~ | **disabled** | 2026-03-09 비활성화 (front.5130.co.kr 미사용) |
| ~~PHP 5.6 FPM~~ | - | **disabled** | 2026-03-09 비활성화 (미사용) |
### 자동 정리 (cron, hskwon)
| 작업 | 주기 | 설명 |
|------|------|------|
| Gitea repo-archive 캐시 정리 | 매주 일요일 04:00 | 7일 이상 된 캐시 파일 삭제 + 빈 디렉토리 정리 |
### 방화벽 (UFW) 규칙

View File

@@ -48,6 +48,59 @@ chmod 640 /home/webservice/mng/shared/.env
---
## [개발] sam-dev 리소스 관리
sam-dev는 2 vCPU / 3.8GB RAM으로 여러 서비스가 공존하므로 리소스 관리가 중요하다.
### 주요 리소스 소비자
| 프로세스 | 메모리 | CPU (상시) | 비고 |
|----------|--------|-----------|------|
| MySQL | ~1.2G (30%) | 2~5% | |
| Gitea | ~400M (10%) | 1.8% | |
| Next.js (PM2) | ~380M (9.5%) | 0.5% | |
| PHP 8.4 FPM | ~250M (변동) | 요청 시 높음 | max_children=5 |
| PHP 7.3 FPM | ~30M | idle | 5130 레거시 전용 |
### Swap (4G, 2026-03-09 추가)
Swap 없이 운영하면 메모리 부족 시 OOM Killer가 프로세스를 즉시 종료한다.
```bash
# Swap 상태 확인
swapon --show
free -m
# /etc/fstab에 등록되어 있으므로 재부팅 후에도 유지됨
# /swapfile none swap sw 0 0
```
### Gitea repo-archive 캐시
Gitea는 Web UI에서 ZIP/TAR.GZ 다운로드 시 `/var/lib/gitea/data/repo-archive/`에 캐시를 생성한다.
기본 설정에서는 만료가 없어 무한 증가하므로, cron으로 7일 이상 된 캐시를 정리한다.
```bash
# 캐시 크기 확인
sudo du -sh /var/lib/gitea/data/repo-archive/
# 수동 정리 (긴급 시)
sudo rm -rf /var/lib/gitea/data/repo-archive/*
# 자동 정리: hskwon crontab (매주 일요일 04:00)
# 0 4 * * 0 find /var/lib/gitea/data/repo-archive -type f -mtime +7 -delete
# 0 4 * * 0 find /var/lib/gitea/data/repo-archive -type d -empty -delete
```
### 비활성화된 서비스 (2026-03-09)
| 서비스 | 사유 | 복원 명령 |
|--------|------|----------|
| PHP 5.6 FPM | 미사용 (아무 사이트도 참조 안 함) | `sudo systemctl enable --now php5.6-fpm` |
| Apache | front.5130.co.kr 미사용 | `sudo systemctl enable --now apache2` |
---
## 시스템 리소스 모니터링
양쪽 서버 공통 명령어:

View File

@@ -92,6 +92,33 @@ gunzip -c /home/hskwon/backups/mysql/gitea_YYYYMMDD_HHMMSS.sql.gz | mysql gitea
---
## [개발] MySQL Binlog 관리
sam-dev에서는 리플리케이션/PITR을 사용하지 않으므로 binlog 보관을 최소화한다.
**설정 파일:** `/etc/mysql/mysql.conf.d/mysqld.cnf`
```ini
binlog_expire_logs_seconds = 604800 # 7일 보관 (2026-03-09 설정)
max_binlog_size = 100M
```
```bash
# binlog 상태 확인
sudo ls -lh /var/lib/mysql/binlog.0* | wc -l # 파일 수
sudo du -shc /var/lib/mysql/binlog.0* | tail -1 # 총 크기
# 수동 퍼지 (필요 시)
mysql -u pro -p -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY);"
# binlog 완전 비활성화가 필요하면 (권장하지 않음)
# mysqld.cnf에 skip-log-bin 추가 후 MySQL 재시작
```
> **참고:** 운영서버(sam-prod)의 binlog는 CI/CD 백업에 활용되므로 별도 정책 적용.
---
## Slow Query 분석 (운영)
```bash