docs:ops-manual 서버 점검 결과 반영 — Grafana 알림, 개발서버 보안, 백업 설정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -205,6 +205,53 @@
|
||||
|
||||
---
|
||||
|
||||
## 개발서버 (sam-dev)
|
||||
|
||||
### 서버 사양
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| IP | 114.203.209.83 |
|
||||
| 호스트명 | sam-dev |
|
||||
| OS | Ubuntu 24.04.2 LTS |
|
||||
| 사용자 | hskwon (SSH 키 인증, sudo NOPASSWD) |
|
||||
|
||||
### 서비스 현황
|
||||
|
||||
| 서비스 | 포트 | 상태 |
|
||||
|--------|------|------|
|
||||
| Nginx | 80/443 | active |
|
||||
| Apache | 8080 | active (레거시) |
|
||||
| MySQL 8.0 | 3306 (localhost) | active |
|
||||
| Gitea | 3000 | active |
|
||||
| Next.js (PM2) | 3001 | active |
|
||||
| fail2ban | - | active |
|
||||
|
||||
### 방화벽 (UFW) 규칙
|
||||
|
||||
| 포트 | 프로토콜 | 용도 |
|
||||
|------|---------|------|
|
||||
| 22/tcp | ALLOW | SSH |
|
||||
| 80/tcp | ALLOW | HTTP |
|
||||
| 443/tcp | ALLOW | HTTPS |
|
||||
| 3000/tcp | ALLOW | Gitea |
|
||||
|
||||
> MySQL(3306), Apache(8080), Next.js(3001), CUPS(631) 등은 외부 차단
|
||||
|
||||
### 주요 디렉토리
|
||||
|
||||
```
|
||||
/home/webservice/
|
||||
react/ Next.js 프론트엔드
|
||||
api/ Laravel API
|
||||
mng/ Laravel Admin
|
||||
sales/ Plain PHP 레거시
|
||||
|
||||
/data/GIT/samproject/ Gitea bare repositories
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 아키텍처 다이어그램
|
||||
|
||||
### 운영서버
|
||||
|
||||
@@ -20,17 +20,16 @@ sudo systemctl status jenkins
|
||||
| 파일 | 용도 |
|
||||
|------|------|
|
||||
| /var/lib/jenkins/ | Jenkins 홈 (jobs, plugins, credentials) |
|
||||
| /etc/systemd/system/jenkins.service.d/override.conf | JVM 옵션 (메모리, CSP) |
|
||||
| /etc/systemd/system/jenkins.service.d/override.conf | JVM 메모리 설정 |
|
||||
| /var/lib/jenkins/env-files/ | 배포 환경변수 (.env 파일) |
|
||||
| /var/lib/jenkins-agent/ | Agent 워크스페이스 (빌드 실행 격리) |
|
||||
| /etc/systemd/system/jenkins-agent.service | Agent systemd 서비스 |
|
||||
|
||||
**JVM 설정:**
|
||||
**JVM 메모리 설정:**
|
||||
|
||||
```bash
|
||||
# /etc/systemd/system/jenkins.service.d/override.conf
|
||||
# - 메모리: -Xmx2048m -Xms512m
|
||||
# - CSP: DirectoryBrowserSupport.CSP (workspace 브라우저 보안)
|
||||
# Environment="JAVA_OPTS=-Xmx2048m -Xms512m -Djava.awt.headless=true"
|
||||
|
||||
# 변경 후 적용
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
@@ -156,17 +156,19 @@ node_filefd_allocated
|
||||
|
||||
**설정 경로:** Grafana > Alerting > Alert rules
|
||||
|
||||
**권장 알림 규칙:**
|
||||
**현재 설정된 알림 규칙 (SAM Alerts 폴더):**
|
||||
|
||||
| 조건 | 임계값 | 설명 |
|
||||
|------|--------|------|
|
||||
| CPU 사용률 | > 90% (5분) | CPU 과부하 |
|
||||
| 메모리 사용률 | > 85% | 메모리 부족 |
|
||||
| 디스크 사용률 | > 80% | 디스크 공간 부족 |
|
||||
| 서비스 다운 | target down > 1분 | 스크래핑 실패 |
|
||||
| 규칙명 | 조건 | 대기 시간 | 설명 |
|
||||
|--------|------|-----------|------|
|
||||
| CPU 사용률 > 90% | avg(rate(node_cpu_idle[5m])) | 5분 | CPU 과부하 |
|
||||
| 메모리 사용률 > 85% | MemAvailable/MemTotal | 5분 | 메모리 부족 |
|
||||
| 디스크 사용률 > 80% | filesystem_avail/size (/) | 5분 | 디스크 공간 부족 |
|
||||
| 서비스 다운 (스크래핑 실패) | up < 1 | 1분 | Prometheus 타겟 다운 |
|
||||
|
||||
**알림 채널:** Grafana > Alerting > Contact points 에서 이메일, Slack 등 설정
|
||||
|
||||
> **TODO:** Contact Point에 실제 이메일 주소 또는 Slack Webhook 설정 필요 (현재 기본 email placeholder)
|
||||
|
||||
---
|
||||
|
||||
## [운영] 성능 모니터링
|
||||
|
||||
@@ -519,4 +519,4 @@ sudo systemctl restart grafana-server
|
||||
| 역할 | 연락처 | 비고 |
|
||||
|------|--------|------|
|
||||
| 서버 관리 | hskwon | SSH 접속 가능 |
|
||||
| IDC 업체 | (IDC 연락처 기입) | 서버 물리적 장애, 네트워크 |
|
||||
| IDC 업체 | (확인 후 기입 필요) | 서버 물리적 장애, 네트워크 |
|
||||
|
||||
@@ -75,6 +75,17 @@ sudo -u jenkins ssh-keyscan -H 211.117.60.189 >> /var/lib/jenkins/.ssh/known_hos
|
||||
| 80 | Anywhere | HTTP |
|
||||
| 443 | Anywhere | HTTPS |
|
||||
|
||||
### [개발] 규칙
|
||||
|
||||
| 포트 | 허용 범위 | 용도 |
|
||||
|------|-----------|------|
|
||||
| 22 | Anywhere | SSH |
|
||||
| 80 | Anywhere | HTTP |
|
||||
| 443 | Anywhere | HTTPS |
|
||||
| 3000 | Anywhere | Gitea |
|
||||
|
||||
> MySQL(3306), Apache(8080), Next.js(3001) 등은 외부 차단됨
|
||||
|
||||
### 공통 명령어
|
||||
|
||||
```bash
|
||||
@@ -136,10 +147,18 @@ sudo fail2ban-client restart sshd
|
||||
|
||||
### 화이트리스트 설정
|
||||
|
||||
**현재 설정:**
|
||||
|
||||
| 서버 | ignoreip |
|
||||
|------|----------|
|
||||
| 운영 | 127.0.0.1/8, 110.10.147.46 (CI/CD) |
|
||||
| CI/CD | 127.0.0.1/8, 211.117.60.189 (운영) |
|
||||
| 개발 | 127.0.0.1/8, 110.10.147.46 (CI/CD), 211.117.60.189 (운영) |
|
||||
|
||||
```bash
|
||||
# /etc/fail2ban/jail.local
|
||||
[DEFAULT]
|
||||
ignoreip = 127.0.0.1/8 관리자_IP_1 관리자_IP_2
|
||||
ignoreip = 127.0.0.1/8 110.10.147.46 211.117.60.189
|
||||
|
||||
# 변경 후
|
||||
sudo systemctl restart fail2ban
|
||||
|
||||
@@ -168,14 +168,23 @@ sudo tar czf /home/hskwon/backups/grafana/grafana-data-$(date +%Y%m%d).tar.gz /v
|
||||
**자동 백업:** crontab 매일 03:00 실행
|
||||
|
||||
- 스크립트: /home/hskwon/scripts/backup-db.sh
|
||||
- 인증 정보: /home/hskwon/.sam_backup.cnf (chmod 600)
|
||||
- 저장소: /home/hskwon/backups/mysql/
|
||||
- 보존: 14일
|
||||
|
||||
**수동 원격 백업:**
|
||||
**백업 대상:**
|
||||
|
||||
| DB | 서버 | 사용자 | 비고 |
|
||||
|----|------|--------|------|
|
||||
| gitea | localhost | root (auth_socket) | Gitea DB |
|
||||
| sam | 211.117.60.189 (운영) | sam_backup | 운영 메인 DB |
|
||||
| sam_stat | 211.117.60.189 (운영) | sam_backup | 통계 DB |
|
||||
|
||||
**수동 백업 실행:**
|
||||
|
||||
```bash
|
||||
ssh sam-prod "mysqldump --single-transaction --routines sam" | gzip \
|
||||
> /home/hskwon/backups/mysql/sam_production_$(date +%Y%m%d).sql.gz
|
||||
# 전체 백업 (Gitea + 운영 DB)
|
||||
/home/hskwon/scripts/backup-db.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -771,11 +771,11 @@ echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.gpg]" \
|
||||
sudo apt update
|
||||
sudo apt install -y jenkins
|
||||
|
||||
# JVM 옵션 (메모리 + CSP)
|
||||
# JVM 메모리 제한
|
||||
sudo mkdir -p /etc/systemd/system/jenkins.service.d
|
||||
sudo tee /etc/systemd/system/jenkins.service.d/override.conf > /dev/null << 'EOF'
|
||||
[Service]
|
||||
Environment="JAVA_OPTS=-Xmx2048m -Xms512m -Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:;\""
|
||||
Environment="JAVA_OPTS=-Xmx2048m -Xms512m -Djava.awt.headless=true"
|
||||
EOF
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
Reference in New Issue
Block a user