배포 가이드
이 가이드는 SirrChat 서버의 프로덕션 배포를 다룹니다.
시스템 요구 사항
하드웨어 요구 사항
yaml
최소 구성:
CPU: 2코어
RAM: 2GB
Storage: 20GB SSD
Network: 100Mbps
권장 구성:
CPU: 4코어
RAM: 4GB
Storage: 100GB SSD
Network: 1Gbps소프트웨어 요구 사항
yaml
운영 체제:
- Ubuntu 20.04+
- Debian 11+
- CentOS 8+
- macOS 12+
의존성:
- Go 1.24+ (소스에서 빌드하는 경우)
- Git
- Make포트 요구 사항
| 포트 | 서비스 | 설명 |
|---|---|---|
| 25 | SMTP | 메일 수신 (선택 사항) |
| 587 | Submission | 메일 제출 |
| 465 | SMTPS | 암호화된 메일 제출 |
| 993 | IMAPS | 암호화된 IMAP |
| 143 | IMAP | IMAP (선택 사항) |
| 8825 | SMTP Alt | 대체 SMTP 포트 |
빠른 배포
원클릭 배포 스크립트
빠른 배포를 위해 자동화 스크립트 사용:
bash
# 배포 스크립트 다운로드 및 실행
curl -sSL https://raw.githubusercontent.com/mail-chat-chain/mailchatd/main/start.sh | bash
# 또는 먼저 다운로드
wget https://raw.githubusercontent.com/mail-chat-chain/mailchatd/main/start.sh
chmod +x start.sh
sudo ./start.sh스크립트는 자동으로:
- 시스템 아키텍처 감지 및 올바른 바이너리 다운로드
- 구성 디렉토리 초기화
- DNS 및 TLS 인증서 구성 (15개 DNS 제공업체 지원)
- systemd 서비스 생성 및 시작
수동 배포
1. 시스템 준비
bash
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# 의존성 설치
sudo apt install -y build-essential git curl wget
# 작업 디렉토리 생성
export SIRRCHAT_HOME="${SIRRCHAT_HOME:-$HOME/.sirrchatd}"
mkdir -p $SIRRCHAT_HOME2. 바이너리 다운로드
bash
# 시스템 아키텍처 자동 감지
get_system_arch() {
local os=$(uname -s | tr '[:upper:]' '[:lower:]')
local arch=$(uname -m)
case "$arch" in
x86_64|amd64) arch="amd64" ;;
aarch64|arm64) arch="arm64" ;;
*) arch="amd64" ;;
esac
echo "${os}-${arch}"
}
SYSTEM_ARCH=$(get_system_arch)
VERSION="v0.3.1"
# 해당 버전 다운로드
wget https://download.sirrchat.org/sirrchatd-${SYSTEM_ARCH}-${VERSION}
sudo mv sirrchatd-${SYSTEM_ARCH}-${VERSION} /usr/local/bin/sirrchatd
sudo chmod +x /usr/local/bin/sirrchatd
# 설치 확인
sirrchatd --help3. 소스에서 빌드 (선택 사항)
bash
# 리포지토리 복제
git clone https://github.com/mail-chat-chain/mailchatd.git
cd sirrchatd
# 빌드
make build
# 설치
sudo cp build/sirrchatd /usr/local/bin/구성
기본 구성
$SIRRCHAT_HOME/sirrchatd.conf 생성:
conf
# 도메인 구성
$(hostname) = mx1.example.com
$(primary_domain) = example.com
$(local_domains) = $(primary_domain)
# TLS 인증서 구성
tls {
loader acme {
hostname $(hostname)
email postmaster@$(hostname)
agreed
challenge dns-01
dns cloudflare {
api_token YOUR_CLOUDFLARE_API_TOKEN
}
}
}
# 스토리지 구성
storage.imapsql local_mailboxes {
driver sqlite3
dsn $SIRRCHAT_HOME/imapsql.db
}
# 인증 구성
auth.pass_table local_auth {
table file $SIRRCHAT_HOME/users
}
# SMTP 서비스
smtp tcp://0.0.0.0:8825 {
hostname $(hostname)
limits {
all rate 20 1s
all concurrency 10
}
dmarc yes
check {
require_mx_record
dkim
spf
}
source $(local_domains) {
deliver_to &local_mailboxes
}
}
# Submission 서비스
submission tls://0.0.0.0:465 tcp://0.0.0.0:587 {
hostname $(hostname)
auth &local_auth
source $(local_domains) {
default_destination {
modify {
dkim $(primary_domain) $(local_domains) default
}
deliver_to &remote_queue
}
}
}
# IMAP 서비스
imap tls://0.0.0.0:993 tcp://0.0.0.0:143 {
auth &local_auth
storage &local_mailboxes
}DNS 제공업체 구성
지원되는 DNS 제공업체 및 구성:
Cloudflare
conf
dns cloudflare {
api_token YOUR_API_TOKEN
}Amazon Route53
conf
dns route53 {
access_key_id YOUR_ACCESS_KEY
secret_access_key YOUR_SECRET_KEY
}DigitalOcean
conf
dns digitalocean {
api_token YOUR_API_TOKEN
}Google Cloud DNS
conf
dns googleclouddns {
service_account_json /path/to/service-account.json
}서비스 관리
Systemd 서비스 구성
메일 서비스 생성
bash
sudo tee /etc/systemd/system/sirrchatd-mail.service > /dev/null <<EOF
[Unit]
Description=SirrChat Mail Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Environment="SIRRCHAT_HOME=/root/.sirrchatd"
ExecStart=/usr/local/bin/sirrchatd run
Restart=always
RestartSec=3
LimitNOFILE=65535
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF서비스 시작 및 관리
bash
# systemd 구성 다시 로드
sudo systemctl daemon-reload
# 서비스 시작
sudo systemctl start sirrchatd-mail
# 부팅 시 자동 시작 활성화
sudo systemctl enable sirrchatd-mail
# 서비스 상태 확인
sudo systemctl status sirrchatd-mail
# 로그 보기
sudo journalctl -u sirrchatd-mail -f
# 서비스 재시작
sudo systemctl restart sirrchatd-mail모니터링 및 유지 관리
로그 보기
bash
# 실시간 로그 보기
sudo journalctl -u sirrchatd-mail -f
# 최근 오류 로그 보기
sudo journalctl -u sirrchatd-mail -p err -n 100
# 오늘의 로그 보기
sudo journalctl -u sirrchatd-mail --since today상태 확인 스크립트
~/check_sirrchat_health.sh 생성:
bash
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
echo "=== SirrChat 상태 확인 ==="
echo "시간: $(date)"
echo "=============================="
# 프로세스 상태 확인
if pgrep -x sirrchatd > /dev/null; then
echo -e "${GREEN}✓${NC} 프로세스가 실행 중입니다"
else
echo -e "${RED}✗${NC} 프로세스가 실행 중이 아닙니다"
exit 1
fi
# 포트 확인
for port in 587 993 8825; do
if netstat -tlnp 2>/dev/null | grep -q ":$port "; then
echo -e "${GREEN}✓${NC} 포트 $port가 수신 중입니다"
else
echo -e "${RED}✗${NC} 포트 $port가 수신 중이 아닙니다"
fi
done
# 디스크 공간 확인
DISK_USAGE=$(df -h $SIRRCHAT_HOME | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK_USAGE" -lt 80 ]; then
echo -e "${GREEN}✓${NC} 디스크 사용량: ${DISK_USAGE}%"
else
echo -e "${RED}⚠${NC} 디스크 사용량 높음: ${DISK_USAGE}%"
fi
echo "=============================="문제 해결
일반적인 문제
1. 서비스가 시작되지 않음
bash
# 구성 파일 구문 확인
sirrchatd run --config $SIRRCHAT_HOME/sirrchatd.conf
# 세부 오류 보기
sudo journalctl -u sirrchatd-mail -n 502. TLS 인증서 문제
bash
# DNS 구성 확인
sirrchatd dns check
# DNS 챌린지 수동 테스트
sirrchatd dns export3. 이메일을 보내거나 받을 수 없음
bash
# 포트가 열려 있는지 확인
netstat -tlnp | grep -E '25|587|993'
# 방화벽 확인
sudo ufw status보안 모범 사례
방화벽 구성
bash
# 기본 방화벽 규칙
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH 액세스
sudo ufw allow 22/tcp
# 메일 서비스 포트
sudo ufw allow 587/tcp comment 'Submission'
sudo ufw allow 993/tcp comment 'IMAPS'
sudo ufw allow 8825/tcp comment 'SMTP Alt'
# 방화벽 활성화
sudo ufw enable보안 체크리스트
- [ ] 방화벽 규칙이 올바르게 구성됨
- [ ] SSH가 키 인증을 사용함
- [ ] TLS 인증서가 구성되고 자동 갱신됨
- [ ] 시스템 자동 보안 업데이트 활성화됨
- [ ] 로그 로테이션 구성됨
- [ ] 정기 백업 구현됨
백업 권장 사항
bash
# 구성 및 데이터 백업
BACKUP_DIR="/backup/sirrchatd/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 구성 백업
cp $SIRRCHAT_HOME/sirrchatd.conf $BACKUP_DIR/
# 데이터베이스 백업
cp $SIRRCHAT_HOME/*.db $BACKUP_DIR/
# 최근 7일간의 백업 유지
find /backup/sirrchatd -type d -mtime +7 -exec rm -rf {} +프로덕션 권장 사항
데이터베이스 선택
- 개발: SQLite (간단, 추가 설정 불필요)
- 프로덕션: PostgreSQL (최고의 성능 및 기능)
- 대안: MySQL 8.0+ (우수한 성능)
스토리지 백엔드
- 개발: 파일시스템 스토리지
- 프로덕션: S3 호환 스토리지 (확장 가능, 내구성)
모니터링
- Prometheus 메트릭 엔드포인트 활성화
- 디스크 공간, 메모리 사용량에 대한 경고 설정
- 이메일 큐 크기 모니터링
- 인증 실패 추적
관련 리소스
- 공식 웹사이트: https://sirrchat.org
- GitHub 리포지토리: https://github.com/mail-chat-chain/mailchatd
- 문서: https://docs.sirrchat.org
마지막 업데이트: 2025년 12월