Skip to content

デプロイガイド

このガイドでは、SirrChat サーバーの本番環境へのデプロイについて説明します。

システム要件

ハードウェア要件

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/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.