自托管

要求

在运行安装脚本之前,请确保您具有以下信息:

  • 操作系统:基于Linux的服务器(例如Ubuntu 22.04+)。
  • 资源:1 个 vCPU 和 2GB RAM
  • 根访问权限:执行命令的管理权限。
  • 域名:已准备好进行 DNS 配置的自定义域。
  • 清洁 IP:通过检查黑名单确保您的服务器拥有干净的 IP 地址,并且没有垃圾邮件记录。更多信息 这里.

[!TIP] 查看我们的列表 优秀的邮件服务器提供商

云初始化/用户数据

大多数云供应商都支持在配置虚拟专用服务器 (VPS) 时使用 cloud-init 配置。这是提前设置一些文件和环境变量以供脚本初始设置逻辑使用的好方法,这样就无需在脚本运行时提示其他信息。

选项

  • EMAIL - EMAIL 用于 certbot 到期提醒的环境变量
  • DOMAIN - 用于自托管设置的自定义域
  • 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
  • 初始设置:下载最新的转发电子邮件代码,配置环境,提示您的自定义域并设置所有必要的证书、密钥和机密。
  • 设置备份:将设置一个 cron 来备份 mongoDB 和 redis,使用与 S3 兼容的存储进行安全的远程存储。另外,如果对安全的加密备份有更改,则登录时将备份 sqlite。
  • 设置升级:设置一个 cron 来查找夜间更新,以便安全地重建和重新启动基础设施组件。
  • 续订证书:Certbot / lets encrypt 用于 SSL 证书,密钥每 3 个月过期一次。这将更新您域的证书并将其放在相关组件使用的必要文件夹中。请参阅 重要文件路径
  • 从备份恢复:将触发mongodb和redis从备份数据中恢复。

初始设置(选项 1)

选择选项 1. Initial setup 开始。

完成后,你应该会看到一条成功消息。你甚至可以运行 docker ps 查看 组件已启动。下面提供有关组件的更多信息。

服务

服务名称默认端口描述
网页443所有管理员交互的 Web 界面
API4000抽象数据库的 API 层
布莉没有任何后台作业和任务运行器
SMTP465/587用于发送邮件的 SMTP 服务器
SMTP 布里没有任何SMTP 后台作业
MX2525用于接收电子邮件和转发电子邮件的邮件交换
IMAP993/2993用于入站电子邮件和邮箱管理的 IMAP 服务器
POP3995/2995用于入站电子邮件和邮箱管理的 POP3 服务器
SQLite3456SQLite 服务器,用于与 SQLite 数据库交互
SQLite 布里没有任何SQLite 后台作业
卡尔达夫5000用于日历管理的 CalDAV 服务器
MongoDB27017MongoDB数据库用于大多数数据管理
雷迪斯6379Redis 用于缓存和状态管理
SQLite没有任何用于加密邮箱的 SQLite 数据库

重要文件路径

笔记: 主机路径 以下是相对于 /root/forwardemail.net/self-hosting/.

成分主机路径容器路径
MongoDB./mongo-backups/backups
雷迪斯./redis-data/data
SQLite 库./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 地址>汽车
CNAMEapi<域名>汽车
CNAME卡尔达夫<域名>汽车
CNAME铁反弹<域名>汽车
CNAME映射<域名>汽车
CNAME麦克<域名>汽车
CNAMEpop3<域名>汽车
CNAME简体中文:<域名>汽车
MX“@”、“.”或空白mx.<域名> (优先级 0)汽车
TXT“@”、“.”或空白“v=spf1 a-全部”汽车
反向 DNS/PTR 记录

反向 DNS (rDNS) 或反向指针记录 (PTR 记录) 对于电子邮件服务器至关重要,因为它们有助于验证发送电子邮件的服务器的合法性。每个云提供商的做法都不同,因此您需要查找如何添加“反向 DNS”以将主机和 IP 映射到其相应的主机名。最有可能是在提供商的网络部分。

端口 25 被阻止

一些 ISP 和云提供商会屏蔽 25 端口以避免恶意行为者。您可能需要提交支持工单以开放端口 25 供 SMTP / 外发电子邮件使用。

入职

  1. 打开登录页面 导航至 https://<domain_name>,将 <domain_name> 替换为您在 DNS 设置中配置的域。您应该会看到“转发电子邮件”登录页面。

  2. 登录并加入您的域名

  • 使用有效的电子邮件和密码登录。
  • 输入您想要设置的域名(这必须与 DNS 配置相匹配)。
  • 按照提示添加所需的 MXTXT 记录以供核查。
  1. 完成设置
  • 验证后,访问别名页面来创建您的第一个别名。
  • 可选配置 SMTP 用于出站电子邮件 在里面 域名设置。这需要额外的 DNS 记录。

[!NOTE] 不会将任何信息发送到您的服务器之外。自托管选项和初始帐户仅用于管理员登录和 Web 视图,以管理域、别名和相关电子邮件配置。

测试

创建你的第一个别名

  1. 导航到别名页面 打开别名管理页面:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. 添加新别名
  • 点击 添加别名 (右上)。
  • 输入别名并根据需要调整电子邮件设置。
  • (可选)启用 IMAP/POP3/CalDAV 通过选择复选框来支持。
  • 点击 创建别名。
  1. 设置密码
  • 点击 生成密码 创建一个安全的密码。
  • 您需要输入此密码才能登录您的电子邮件客户端。
  1. 配置您的电子邮件客户端
  • 使用像 Thunderbird 这样的电子邮件客户端。
  • 输入别名和生成的密码。
  • 配置 IMAPSMTP 设置。
电子邮件服务器设置

用户名: <alias name>

类型主机名港口连接安全验证
SMTPsmtp.<域名>465SSL / TLS普通密码
IMAPimap.<域名>993SSL / TLS普通密码

发送/接收您的第一封电子邮件

配置完成后,您应该能够向新创建的自托管电子邮件地址发送和接收电子邮件!

维护

How do I backup my data

关注 安装脚本 并选择 option 2 在提示符中。

How do I renew my certificates

关注 安装脚本 并选择 option 3 在提示符中。

How do I upgrade to the latest forward email code

关注 安装脚本 并选择 option 4 在提示符中。

How do I restore from a backup

关注 安装脚本 并选择 option 6 在提示符中。

故障排除

Why is the certbot acme challenge failing

最常见的陷阱是 certbot / letsencrypt 有时会请求 2 挑战。你需要确保添加 BOTH txt 记录。

示例: 您可能会看到两个这样的挑战: _acme-challenge.example.com -> “randomstring1” _acme-challenge.example.com -> “randomstring2”

DNS 传播也可能未完成。您可以使用以下工具: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>。这将让您了解您的 TXT 记录更改是否应反映出来。主机上的本地 DNS 缓存也可能仍在使用旧的、过时的值或尚未获取最近的更改。

另一个选择是通过设置 /root/.cloudflare.ini 在初始 VPS 设置时,使用 cloud-init / user-data 中的 api 令牌创建文件,或者创建此文件并再次运行脚本。这将自动管理 DNS 更改和质询更新。

What is the basic auth username and password

对于自托管,我们添加了首次浏览器本机身份验证弹出窗口,其中包含一个简单的用户名(admin) 和密码(初始设置时随机生成)。我们添加此密码只是为了保护您,以防自动化/爬虫以某种方式抢先注册网络体验。您可以在初始设置后在 .env 归档于 AUTH_BASIC_USERNAMEAUTH_BASIC_PASSWORD.

How do I know what is running

你可以跑 docker ps 查看所有正在运行的容器,这些容器正在从 docker-compose-self-hosting.yml 文件。您还可以运行 docker ps -a 查看所有内容(包括未运行的容器)。

How do I know if something isn't running that should be

你可以跑 docker ps -a 查看所有内容(包括未运行的容器)。您可能会看到退出日志或注释。

How do I find logs

您可以通过以下方式获取更多日志 docker logs -f <container_name>。如果有什么事情发生,很可能与 .env 文件配置不正确。

在 Web UI 中,您可以查看 /admin/emails/admin/logs 分别用于出站电子邮件日志和错误日志。

Why are my outgoing emails timing out

如果您在连接到 MX 服务器时看到类似“连接超时”的消息,则可能需要检查端口 25 是否被阻止。ISP 或云提供商通常会默认阻止此端口,您可能需要联系支持人员/提交工单才能打开此端口。

What tool(s) should I use to test email configuration best practices and IP reputation

看看我们的 常见问题解答.

工具箱

谷歌邮政管理员工具

使用您的服务器 IP 地址检查以下网站是否在黑名单中。遗憾的是,常见的云提供商由于使用垃圾邮件而出现 IP 信誉问题的情况并不少见。如果您发现您的 IP 在黑名单中,建议启动新服务器并检查新 IP 地址。

垃圾邮件屋

垃圾邮件