Skip to content

배포 가이드

이 가이드는 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

포트 요구 사항

포트서비스설명
25SMTP메일 수신 (선택)
587Submission메일 제출
465SMTPS암호화된 메일 제출
993IMAPS암호화된 IMAP
143IMAPIMAP (선택)
8825SMTP 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

스크립트가 자동으로 수행하는 작업:

  1. 시스템 아키텍처 감지 및 올바른 바이너리 다운로드
  2. 설정 디렉터리 초기화
  3. DNS 및 TLS 인증서 구성 (15개 DNS 제공업체 지원)
  4. 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_HOME

2. 바이너리 다운로드

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 --help

3. 소스에서 빌드 (선택 사항)

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 50

2. TLS 인증서 문제

bash
# DNS 설정 확인
sirrmeshd dns check

# DNS 챌린지 수동 테스트
sirrmeshd dns export

3. 메일 발송/수신 불가

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 메트릭 엔드포인트 활성화
  • 디스크 공간, 메모리 사용량 알림 설정
  • 메일 큐 크기 모니터링
  • 인증 실패 횟수 추적

관련 리소스


마지막 업데이트: 2025년 12월

Released under the GPL 3.0 License.