セルフホスト
はじめる
当社のセルフホスト型メール ソリューションは、当社のすべての製品と同様に、フロントエンドとバックエンドの両方で 100% オープンソースです。これは次のことを意味します。
- 完全な透明性: メールを処理するコードのすべての行は公開精査の対象となります
- コミュニティへの貢献: 誰でも改善や問題の修正に貢献できます
- オープン性によるセキュリティ: 脆弱性はグローバルコミュニティによって特定され、修正される
- ベンダーロックインなし: あなたは決して私たちの会社の存在に依存しません
コードベース全体はGitHubで公開されています。 https://github.com/forwardemail/forwardemail.netMIT ライセンスに基づいてライセンスされています。
アーキテクチャには次のコンテナが含まれます。
- 送信メール用の SMTP サーバー
- メール取得用の IMAP/POP3 サーバー
- 管理用Webインターフェース
- 構成保存用データベース
- キャッシュとパフォーマンスのためのRedis
- 安全で暗号化されたメールボックスストレージのためのSQLite
要件
インストール スクリプトを実行する前に、次のものがあることを確認してください。
- オペレーティング·システム: Linux ベースのサーバー (現在 Ubuntu 22.04 以降をサポート)。
- 資源: 1 つの vCPU と 2GB の RAM
- ルートアクセス: コマンドを実行するための管理者権限。
- ドメイン名: DNS 構成の準備が整ったカスタム ドメイン。
- クリーンIP: ブラックリストをチェックして、サーバーにスパムの評判がないクリーンな IP アドレスがあることを確認します。詳細情報 ここ.
- ポート25をサポートするパブリックIPアドレス
- 設定する機能 逆PTR
- IPv4およびIPv6のサポート
[!TIP] 当社のリストをご覧ください 素晴らしいメールサーバープロバイダー
クラウド初期化 / ユーザーデータ
ほとんどのクラウド ベンダーは、仮想プライベート サーバー (VPS) がプロビジョニングされるときに cloud-init 構成をサポートしています。これは、スクリプトの初期セットアップ ロジックで使用するために事前にいくつかのファイルと環境変数を設定するための優れた方法であり、スクリプトの実行中に追加情報を求めるプロンプトを表示する必要がなくなります。
オプション
EMAIL
- certbot の有効期限通知に使用されるメールDOMAIN
- カスタムドメイン(例:example.com
)セルフホスティング設定に使用AUTH_BASIC_USERNAME
- サイトを保護するために初回セットアップ時に使用するユーザー名AUTH_BASIC_PASSWORD
- サイトを保護するために初回セットアップ時に使用されるパスワード/root/.cloudflare.ini
- (Cloudflareユーザーのみ) certbotがDNS設定に使用するcloudflare設定ファイル。APIトークンを設定する必要があります。dns_cloudflare_api_token
。 続きを読む ここ.
例:
#cloud-config
write_files:
- path: /root/.cloudflare.ini
content: |
dns_cloudflare_api_token = "xxx"
owner: root:root
permissions: '0600'
- path: /etc/profile.d/env.sh
content: |
export EMAIL="test@myemail.com"
export DOMAIN="mydomain.com"
runcmd:
- chmod +x /etc/profile.d/env.sh
インストール
サーバーで次のコマンドを実行して、インストール スクリプトをダウンロードして実行します。
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
インストール スクリプトのデバッグ
追加 DEBUG=true
詳細出力の場合はインストール スクリプトの前に次の行を追加します。
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
プロンプト
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- 初期設定: 最新の転送メール コードをダウンロードし、環境を構成し、カスタム ドメインの入力を求め、必要なすべての証明書、キー、シークレットを設定します。
- セットアップのバックアップ: 安全なリモート ストレージとして S3 互換ストアを使用して mongoDB と redis をバックアップする cron を設定します。それとは別に、安全で暗号化されたバックアップのために変更があった場合は、ログイン時に sqlite がバックアップされます。
- セットアップのアップグレード: インフラストラクチャ コンポーネントを安全に再構築して再起動する夜間更新を探す cron を設定します。
- 証明書の更新: Certbot / lets encryptはSSL証明書に使用され、キーは3か月ごとに期限切れになります。これにより、ドメインの証明書が更新され、関連するコンポーネントが使用するために必要なフォルダーに配置されます。 重要なファイルパス
- バックアップから復元: mongodb と redis をトリガーしてバックアップ データから復元します。
初期設定(オプション1)
オプションを選択 1. Initial setup
始めます。
完了すると成功メッセージが表示されます。 docker ps
見る の コンポーネントが起動しました。コンポーネントの詳細については以下を参照してください。
サービス
サービス名 | デフォルトポート | 説明 |
---|---|---|
ウェブ | 443 | すべての管理者とのやり取りのためのWebインターフェース |
API | 4000 | データベースを抽象化するAPIレイヤー |
ブリー | なし | バックグラウンドジョブとタスクランナー |
SMTP | 465/587 | 送信メール用の SMTP サーバー |
SMTPブリー | なし | SMTP バックグラウンドジョブ |
MX | 2525 | 受信メールとメール転送のためのメール交換 |
IMAP | 993/2993 | 受信メールとメールボックス管理用の IMAP サーバー |
POP3 | 995/2995 | 受信メールとメールボックス管理用の POP3 サーバー |
の | 3456 | SQLite データベースとのやり取りのための SQLite サーバー |
SQLite ブリー | なし | SQLite バックグラウンドジョブ |
カルダブ | 5000 | カレンダー管理用のCalDAVサーバー |
モンゴDB | 27017 | ほとんどのデータ管理にMongoDBデータベースを使用 |
レディス | 6379 | キャッシュと状態管理のためのRedis |
の | なし | 暗号化されたメールボックス用の SQLite データベース |
重要なファイルパス
注記: ホストパス 以下は相対的である /root/forwardemail.net/self-hosting/
.
成分 | ホストパス | コンテナパス |
---|---|---|
モンゴDB | ./mongo-backups | /backups |
レディス | ./redis-data | /data |
スクライト | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
環境変数ファイル | ./.env | /app/.env |
SSL 証明書/キー | ./ssl | /app/ssl/ |
秘密鍵 | ./ssl/privkey.pem | /app/ssl/privkey.pem |
フルチェーン証明書 | ./ssl/fullchain.pem | /app/ssl/fullchain.pem |
認定CA | ./ssl/cert.pem | /app/ssl/cert.pem |
DKIM秘密鍵 | ./ssl/dkim.key | /app/ssl/dkim.key |
[!重要] 保存する
.env
ファイルを安全に保管してください。これは障害発生時の復旧に不可欠です。 これは/root/forwardemail.net/self-hosting/.env
.
構成
初期DNS設定
選択したDNSプロバイダーで、適切なDNSレコードを設定します。括弧内の内容に注意してください(<>
) は動的であり、値に応じて更新する必要があります。
タイプ | 名前 | コンテンツ | TTL |
---|---|---|---|
A | "@"、"."、または空白 | <IPアドレス> | 自動車 |
CNAME | アピ | <ドメイン名> | 自動車 |
CNAME | カルダブ | <ドメイン名> | 自動車 |
CNAME | feバウンス | <ドメイン名> | 自動車 |
CNAME | iマップ | <ドメイン名> | 自動車 |
CNAME | MX | <ドメイン名> | 自動車 |
CNAME | ポップ3 | <ドメイン名> | 自動車 |
CNAME | SMTP | <ドメイン名> | 自動車 |
MX | "@"、"."、または空白 | mx.<ドメイン名> (優先度 0) | 自動車 |
TXT | "@"、"."、または空白 | 「v=spf1a-すべて」 | 自動車 |
逆DNS / PTRレコード
逆 DNS (rDNS) または逆ポインター レコード (PTR レコード) は、電子メールを送信するサーバーの正当性を確認するのに役立つため、電子メール サーバーにとって不可欠です。各クラウド プロバイダーはこれを異なる方法で実行するため、ホストと IP を対応するホスト名にマップするための「逆 DNS」の追加方法を調べる必要があります。プロバイダーのネットワーク セクションにある可能性が高いです。
ポート25がブロックされました
一部の ISP およびクラウド プロバイダーは、悪意のある行為者を避けるために 25 をブロックします。SMTP/送信メール用にポート 25 を開くには、サポート チケットを提出する必要がある場合があります。
オンボーディング
-
ランディング ページを開く https://<domain_name> に移動し、<domain_name> を DNS 設定で構成されたドメインに置き換えます。メール転送ランディング ページが表示されます。
-
ログインしてドメインを登録する
- 有効なメールアドレスとパスワードでサインインしてください。
- 設定するドメイン名を入力します (DNS 構成と一致する必要があります)。
- 指示に従って必要なものを追加してください MX と TXT 検証のための記録。
- 完全なセットアップ
- 確認が完了したら、「エイリアス」ページにアクセスして最初のエイリアスを作成します。
- オプションで設定 送信メール用の SMTP の中に ドメイン設定これには追加の DNS レコードが必要です。
[!NOTE] サーバー外部に情報は送信されません。セルフホスト オプションと初期アカウントは、ドメイン、エイリアス、および関連する電子メール構成を管理するための管理者ログインと Web ビュー専用です。
テスト
最初のエイリアスを作成する
- エイリアス ページに移動します エイリアス管理ページを開きます:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- 新しいエイリアスを追加する
- クリック エイリアスを追加 (右上)。
- エイリアス名を入力し、必要に応じて電子メール設定を調整します。
- (オプション)有効にする IMAP/POP3/CalDAV チェックボックスを選択してサポートしてください。
- クリック エイリアスを作成します。
- パスワードを設定する
- クリック パスワードの生成 安全なパスワードを作成します。
- このパスワードは、電子メール クライアントにログインするために必要になります。
- メールクライアントを設定する
- Thunderbird などの電子メール クライアントを使用します。
- エイリアス名と生成されたパスワードを入力します。
- 設定する IMAP と SMTP それに応じて設定します。
メールサーバーの設定
ユーザー名: <alias name>
タイプ | ホスト名 | ポート | 接続セキュリティ | 認証 |
---|---|---|---|---|
SMTP | smtp.<ドメイン名> | 465 | SSL / TLS | 通常のパスワード |
IMAP | imap.<ドメイン名> | 993 | SSL / TLS | 通常のパスワード |
最初のメールの送受信
設定が完了すると、新しく作成して自分でホストしたメール アドレスでメールを送受信できるようになります。
トラブルシューティング
なぜUbuntu以外では動作しないのか
現在、Debian、MacOSのサポートを検討しており、他のOSも検討する予定です。 議論 または、他の人をサポートしたい場合は寄付してください。
certbot acmeチャレンジが失敗する理由
最も一般的な落とし穴は、certbot / letsencryptが時々要求することです 2 課題。必ず追加する必要があります BOTH txt レコード。
例: 次のような 2 つのチャレンジが表示される場合があります: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
DNS 伝播が完了していない可能性もあります。次のようなツールを使用できます。 https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
これにより、TXT レコードの変更を反映する必要があるかどうかがわかります。また、ホスト上のローカル DNS キャッシュがまだ古い値を使用しているか、最近の変更が反映されていない可能性もあります。
もう一つの選択肢は、CerbotのDNSの自動変更を使用する方法です。 /root/.cloudflare.ini
初期 VPS セットアップ時に cloud-init / user-data に API トークンを含むファイルを追加するか、このファイルを作成してスクリプトを再度実行します。これにより、DNS の変更とチャレンジの更新が自動的に管理されます。
基本認証のユーザー名とパスワードは何ですか
セルフホスティングの場合、簡単なユーザー名でブラウザのネイティブ認証ポップアップを初めて表示します(admin
)とパスワード(初期設定時にランダムに生成されます)。これは、自動化やスクレーパーが何らかの理由でウェブエクスペリエンスで最初のサインアップを先取りした場合に備えて保護するために追加したものです。このパスワードは、初期設定後に .env
ファイル AUTH_BASIC_USERNAME
と AUTH_BASIC_PASSWORD
.
何が実行されているかを知るには
実行できます docker ps
実行中のコンテナをすべて確認するには、 docker-compose-self-hosting.yml
ファイル。 docker ps -a
すべてを表示します(実行されていないコンテナも含みます)。
実行されるべき何かが実行されていないかどうかを知るにはどうすればいいですか?
実行できます docker ps -a
すべてを表示します (実行されていないコンテナも含む)。終了ログまたはメモが表示される場合があります。
ログを見つけるにはどうすればいいですか
より多くのログを取得するには docker logs -f <container_name>
何かが出た場合は、おそらく .env
ファイルが正しく構成されていません。
ウェブUIでは、 /admin/emails
と /admin/logs
それぞれ送信メール ログとエラー ログ用です。
送信メールがタイムアウトになるのはなぜですか
MX サーバーへの接続時に「接続がタイムアウトしました...」などのメッセージが表示される場合は、ポート 25 がブロックされていないか確認する必要があります。ISP またはクラウド プロバイダーがデフォルトでこれをブロックするのはよくあることです。その場合、これを開くにはサポートに問い合わせるか、チケットを提出する必要があります。
電子メール構成のベストプラクティスとIPレピュテーションをテストするにはどのツールを使用すればよいですか
ぜひご覧ください よくある質問はこちら.