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
三、验证邮件配置是否生效
- 进入 Ghost 后台(
/ghost) - 进入 Settings → Members
- 尝试“邀请成员”或“测试邮件”(部分版本支持)
- 或注册一个新用户,看是否收到验证邮件
你也可以在 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.yml 或 docker 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>'