배포 가이드
이 가이드는 SirrMesh 서버의 프로덕션 환경 배포를 다룹니다.
시스템 요구 사항
하드웨어 요구 사항
yaml
최소 구성:
CPU: 2코어
RAM: 2GB
저장소: 20GB SSD
네트워크: 100Mbps
권장 구성:
CPU: 4코어
RAM: 4GB
저장소: 100GB SSD
네트워크: 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/sirrmesh/SirrMesh/main/start.sh | bash
# 또는 다운로드 후 실행
wget https://raw.githubusercontent.com/sirrmesh/SirrMesh/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/.sirrmeshd}"
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/sirrmeshd-${SYSTEM_ARCH}-${VERSION}
sudo mv sirrmeshd-${SYSTEM_ARCH}-${VERSION} /usr/local/bin/sirrmeshd
sudo chmod +x /usr/local/bin/sirrmeshd
# 설치 확인
sirrmeshd --help3. 소스에서 빌드 (선택 사항)
bash
# 저장소 복제
git clone https://github.com/sirrmesh/SirrMesh.git
cd sirrmeshd
# 빌드
make build
# 설치
sudo cp build/sirrmeshd /usr/local/bin/설정 가이드
기본 설정
$SIRRCHAT_HOME/sirrmeshd.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/sirrmeshd.service > /dev/null <<EOF
[Unit]
Description=SirrMesh Mail Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Environment="SIRRCHAT_HOME=/root/.sirrmeshd"
ExecStart=/usr/local/bin/sirrmeshd 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 sirrmeshd
# 부팅 시 자동 시작 설정
sudo systemctl enable sirrmeshd
# 서비스 상태 확인
sudo systemctl status sirrmeshd
# 로그 보기
sudo journalctl -u sirrmeshd -f
# 서비스 재시작
sudo systemctl restart sirrmeshd모니터링 및 유지 관리
로그 보기
bash
# 실시간 로그 보기
sudo journalctl -u sirrmeshd -f
# 최근 오류 로그 보기
sudo journalctl -u sirrmeshd -p err -n 100
# 오늘의 로그 보기
sudo journalctl -u sirrmeshd --since today헬스 체크 스크립트
~/check_sirrchat_health.sh 생성:
bash
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
echo "=== SirrMesh 헬스 체크 ==="
echo "시간: $(date)"
echo "=============================="
# 프로세스 상태 확인
if pgrep -x sirrmeshd > /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
# 설정 파일 문법 확인
sirrmeshd run --config $SIRRCHAT_HOME/sirrmeshd.conf
# 상세 오류 보기
sudo journalctl -u sirrmeshd-mail -n 502. TLS 인증서 문제
bash
# DNS 설정 확인
sirrmeshd dns check
# DNS 챌린지 수동 테스트
sirrmeshd 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/sirrmeshd/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 설정 백업
cp $SIRRCHAT_HOME/sirrmeshd.conf $BACKUP_DIR/
# 데이터베이스 백업
cp $SIRRCHAT_HOME/*.db $BACKUP_DIR/
# 최근 7일간 백업만 유지
find /backup/sirrmeshd -type d -mtime +7 -exec rm -rf {} +프로덕션 환경 권장 사항
데이터베이스 선택
- 개발 환경: SQLite (간단, 추가 설정 불필요)
- 프로덕션 환경: PostgreSQL (최고의 성능 및 기능)
- 대안: MySQL 8.0+ (양호한 성능)
스토리지 백엔드
- 개발 환경: 파일 시스템 스토리지
- 프로덕션 환경: S3 호환 스토리지 (확장 가능, 내구성)
모니터링
- Prometheus 메트릭 엔드포인트 활성화
- 디스크 공간, 메모리 사용량 알림 설정
- 메일 큐 크기 모니터링
- 인증 실패 횟수 추적
관련 리소스
- 공식 웹사이트: https://sirrchat.org
- GitHub 저장소: https://github.com/sirrmesh/SirrMesh
- 문서: https://docs.sirrchat.org
마지막 업데이트: 2025년 12월