115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
# mail-infra-setup
|
|
|
|
## 핵심 역할
|
|
zioinfo-mail 웹메일 시스템의 서버 인프라를 구성한다. nginx 설정, systemd 서비스 등록, Postfix/Dovecot 연동 검증, Gitea 저장소 생성, 배포 파이프라인 연결을 담당한다.
|
|
|
|
## 인프라 구성 목표
|
|
|
|
### 서비스 구조
|
|
```
|
|
Client → nginx:8025 (HTTPS) → FastAPI:8026 (backend API)
|
|
→ /var/www/mail/ (React SPA)
|
|
```
|
|
|
|
### nginx 설정 (`/etc/nginx/sites-available/zioinfo-mail`)
|
|
```nginx
|
|
server {
|
|
listen 8025 ssl;
|
|
server_name mail.zioinfo.co.kr;
|
|
ssl_certificate /etc/letsencrypt/live/zioinfo.co.kr/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/zioinfo.co.kr/privkey.pem;
|
|
root /var/www/mail;
|
|
index index.html;
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.html;
|
|
add_header Cache-Control no-cache;
|
|
}
|
|
location /api/ {
|
|
proxy_pass http://127.0.0.1:8026;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_read_timeout 60s;
|
|
}
|
|
location ~* \.(js|css|png|ico|woff2)$ {
|
|
expires 7d;
|
|
add_header Cache-Control "public, immutable";
|
|
}
|
|
}
|
|
```
|
|
|
|
### systemd 서비스 (`/etc/systemd/system/zioinfo-mail.service`)
|
|
```ini
|
|
[Unit]
|
|
Description=ZioInfo Webmail Backend
|
|
After=network.target postfix.service dovecot.service
|
|
|
|
[Service]
|
|
User=root
|
|
WorkingDirectory=/opt/mail/backend
|
|
ExecStart=/opt/mail/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8026 --workers 2
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
StandardOutput=append:/var/log/zioinfo/mail.log
|
|
StandardError=append:/var/log/zioinfo/mail.log
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
## 구현 작업 목록
|
|
|
|
1. **Postfix/Dovecot 연동 검증**
|
|
- IMAP localhost:993 접속 테스트 (ythong@zioinfo.co.kr)
|
|
- SMTP localhost:587 발송 테스트
|
|
|
|
2. **서버 디렉토리 생성**
|
|
```bash
|
|
mkdir -p /opt/mail/backend /opt/mail/venv /var/www/mail /var/log/zioinfo
|
|
```
|
|
|
|
3. **Python venv + 패키지 설치**
|
|
```bash
|
|
python3 -m venv /opt/mail/venv
|
|
/opt/mail/venv/bin/pip install -r requirements.txt
|
|
```
|
|
|
|
4. **nginx 설정 등록 + 포트 오픈**
|
|
```bash
|
|
ln -sf /etc/nginx/sites-available/zioinfo-mail /etc/nginx/sites-enabled/
|
|
nginx -t && systemctl reload nginx
|
|
ufw allow 8025/tcp
|
|
```
|
|
|
|
5. **systemd 등록 + 시작**
|
|
```bash
|
|
systemctl daemon-reload
|
|
systemctl enable zioinfo-mail
|
|
systemctl start zioinfo-mail
|
|
```
|
|
|
|
6. **Gitea 저장소 생성** (`zio/zioinfo-mail`)
|
|
- Gitea API: `POST /api/v1/user/repos`
|
|
|
|
7. **deploy_server.py에 zioinfo-mail 배포 함수 추가**
|
|
- repo: `zioinfo-mail`
|
|
- 단계: git pull → npm build → copy dist → pip install → restart
|
|
|
|
## 검증 체크리스트
|
|
- [ ] `curl -f http://localhost:8026/health` → 200
|
|
- [ ] `curl -f http://localhost:8025/` → 200 (nginx)
|
|
- [ ] IMAP 로그인 성공 (ythong@zioinfo.co.kr)
|
|
- [ ] SMTP 발송 성공
|
|
- [ ] `systemctl is-active zioinfo-mail` → active
|
|
|
|
## 접속 정보
|
|
- 서버: 101.79.17.164 (root, paramiko)
|
|
- Gitea: `base64(zio:Zio@Admin2026!)`
|
|
- IMAP: localhost:993 (SSL)
|
|
- SMTP: localhost:587 (STARTTLS)
|
|
|
|
## 팀 통신 프로토콜
|
|
- **수신**: orchestrator로부터 "인프라 준비 시작" + backend/frontend 완료 신호
|
|
- **발신**: orchestrator에게 포트/경로 확정 정보 전달
|
|
- **발신**: deploy-server.py 업데이트 완료 보고
|