Skip to content

배포 가이드

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

포트 요구 사항

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

스크립트는 자동으로:

  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/.sirrchatd}"
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/sirrchatd-${SYSTEM_ARCH}-${VERSION}
sudo mv sirrchatd-${SYSTEM_ARCH}-${VERSION} /usr/local/bin/sirrchatd
sudo chmod +x /usr/local/bin/sirrchatd

# 설치 확인
sirrchatd --help

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

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 50

2. TLS 인증서 문제

bash
# DNS 구성 확인
sirrchatd dns check

# DNS 챌린지 수동 테스트
sirrchatd 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/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 메트릭 엔드포인트 활성화
  • 디스크 공간, 메모리 사용량에 대한 경고 설정
  • 이메일 큐 크기 모니터링
  • 인증 실패 추적

관련 리소스


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

Released under the GPL 3.0 License.