1Panel 中安装 Ghost 踩过的坑

配置 nginx 时,碰到无限重定向的问题。ERR_TOO_MANY_REDIRECTS

解决方案:https://github.com/TryGhost/Ghost/issues/2796

server {
        listen                          443 ssl spdy;

        location / {
            proxy_pass              http://localhost:8080;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto https; # 增加这行
            proxy_set_header        Host $http_host;
            proxy_intercept_errors  on;
        }
}

配置邮箱发送问题

在使用 Docker 自部署的 Ghost 博客系统中,若要启用邮箱相关功能(如用户注册/密码重置邮件、订阅通知、成员邀请等),你需要配置 Ghost 的邮件服务。Ghost 默认使用内置的 Nodemailer 来发送邮件,但生产环境中建议使用外部 SMTP 服务(如 Gmail、SendGrid、Mailgun、腾讯企业邮、阿里云邮件推送等)。

以下是详细设置步骤:


一、准备 SMTP 邮箱服务

首先,你需要一个支持 SMTP 的邮箱账户,例如:

  • Gmail(需开启“两步验证”并生成应用专用密码)
  • Outlook / Hotmail
  • 腾讯企业邮(smtp.exmail.qq.com)
  • 阿里云邮件推送(smtpdm.aliyun.com)
  • SendGrid(推荐用于生产环境)
  • Mailgun

获取以下信息:

  • SMTP 服务器地址(如 smtp.gmail.com)
  • SMTP 端口(通常 587 或 465)
  • 用户名(通常是完整邮箱地址)
  • 密码(或应用专用密码)
  • 是否启用 TLS/SSL

二、配置 Ghost 的邮件设置(通过环境变量)

Ghost 支持通过环境变量配置邮件服务。在 Docker 部署时,你可以在 docker run 命令或 docker-compose.yml 中设置。

方法 1:使用 docker-compose.yml(推荐)

version: '3.8'
services:
  ghost:
    image: ghost:5-alpine
    container_name: ghost-blog
    restart: always
    ports:
      - "2368:2368"
    environment:
      # Ghost 基础配置
      url: https://yourdomain.com
      NODE_ENV: production

      # 邮件配置(使用 SMTP)
      mail__transport: SMTP
      mail__options__host: smtp.exmail.qq.com        # SMTP 服务器
      mail__options__port: 587                       # 端口(587 用于 STARTTLS,465 用于 SSL)
      mail__options__secure: false                   # 若使用 465,则设为 true;587 通常为 false
      mail__options__auth__user: your@email.com      # 邮箱账号
      mail__options__auth__pass: yourpassword        # 邮箱密码或应用专用密码
      mail__options__service: null                   # 可选,如 'Gmail',但建议直接指定 host/port

    volumes:
      - ./ghost-content:/var/lib/ghost/content
⚠️ 注意:环境变量中的双下划线 __ 在 Ghost 中会被解析为嵌套对象,例如 mail__transport 对应配置中的 mail.transport

方法 2:使用 docker run 命令

docker run -d \
  --name ghost-blog \
  -e url=https://yourdomain.com \
  -e NODE_ENV=production \
  -e mail__transport=SMTP \
  -e mail__options__host=smtp.exmail.qq.com \
  -e mail__options__port=587 \
  -e mail__options__secure=false \
  -e mail__options__auth__user=your@email.com \
  -e mail__options__auth__pass=yourpassword \
  -p 2368:2368 \
  -v ./ghost-content:/var/lib/ghost/content \
  ghost:5-alpine

三、验证邮件配置是否生效

  1. 进入 Ghost 后台(/ghost
  2. 进入 Settings → Members
  3. 尝试“邀请成员”或“测试邮件”(部分版本支持)
  4. 或注册一个新用户,看是否收到验证邮件

你也可以在 Ghost 日志中查看邮件发送是否成功:

docker logs ghost-blog

遇到警告:Missing mail.from config, falling back to a generated email address. Please update your config file and set a valid from address

说明 Ghost 没有配置 发件人邮箱地址(mail.from,因此它会自动生成一个类似 ghost@yourdomain.com 的地址来发送邮件。虽然邮件可能仍能发送成功,但很多邮件服务商(如 Gmail、QQ 邮箱)会将这类“伪造发件人”的邮件识别为垃圾邮件,甚至直接拒收


✅ 解决方案:显式设置 mail.from

你需要在 Ghost 配置中指定一个合法、可信的发件人邮箱地址,且该邮箱应与你 SMTP 账号的域名一致(例如你用 blog@yourdomain.com 发信,就设 mail.from = "Blog <blog@yourdomain.com>")。


方法一:通过 Docker 环境变量设置(推荐)

docker-compose.ymldocker run 命令中添加环境变量:

environment:
  # 其他配置...
  mail__from: '"Your Blog Name" <noreply@yourdomain.com>'
🔔 注意:双引号需要转义(在 YAML 中用单引号包裹整个值,内部双引号保留)邮箱地址建议使用你拥有且已配置 SPF/DKIM 的域名邮箱(如 noreply@yourdomain.com)不要使用 Gmail 等第三方邮箱作为 from 地址(除非你用的是 Gmail SMTP 且 from 是该 Gmail 账号)

完整示例(docker-compose.yml 片段):

environment:
  url: https://yourblog.com
  NODE_ENV: production
  mail__transport: SMTP
  mail__options__host: smtp.exmail.qq.com
  mail__options__port: 465
  mail__options__secure: true
  mail__options__auth__user: noreply@yourdomain.com
  mail__options__auth__pass: your_password
  mail__from: '"My Ghost Blog" <noreply@yourdomain.com>'