我的博客站点是基于 Ghost 开源部署的,当前已经使用了 Ghost 6.0 版本,最初我是用 Nginx + Docker 进行部署管理,后来接触到了 Dokploy,就把所有的服务都统一交由 Dokploy 部署了,体验很丝滑,本文介绍使用 Dokploy 部署 Ghost 博客的详细操作。
对于 Dokploy 不熟悉的朋友,可以参考我的入门文章 # Dokploy 托管你的全栈应用
Mailgun 的申请,可以参考 # Mailgun 的申请过程 & Ghost 使用
首先在 Dokploy 面板,创建一个 Project,输入名称和描述


直接从 Dokploy 的模板市场里面创建,Create Service -> Template

在模板市场,搜索 Ghost,然后创建

创建完成之后,可以看到已经展示在 Service 列表了,点击进入

直接点击 Deploy 即可,如果需要更改配置,在 Raw 里面进行 Docker 配置的修改即可。
在 Provider -> Raw 这里,将 url 改为最终要部署的线上地址,我这里是配置了我的自定义域名: https://meepo.me
version: "3.8"
services:
ghost:
image: ghost:6-alpine
restart: always
environment:
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: example
database__connection__database: ghost
url: https://meepo.me
volumes:
- ghost:/var/lib/ghost/content
# 通过挂载配置文件来进行邮件 email 的配置 https://forum.ghost.org/t/how-to-add-smtp-mail-configuration/40981
- /root/service/ghost/config.production.json:/var/lib/ghost/config.production.json
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db:/var/lib/mysql
volumes:
ghost:
db:
volumes 推荐将 content 和 config.production.json 挂载到物理磁盘的位置
content 文件夹里面会存储博客站点相关的 apps data files images logs media public settings themes 等数据,如果后面博客迁移,可以直接把这部分内容给下载导出方便迁移,而如果不挂载,数据就存在容器内部了,容易丢失。配置时记得给 content 文件夹授予对应的权限 chmod 777 meepo-me-content
config.production.json 这个文件,可以提供诸如 mailgun email 之类的配置,这里需要注意,一定要将容器内部的 config.production.json 内容拷贝到 /root/service/ghost/config.production.json 中,然后再将你自己的自定义配置,根据这些进行扩展或者变更。
比如我这里将 mailgun 配置到 ghost 中的过程就参考了官方文档中的 email config
{
"url": "http://localhost:2368",
"server": {
"port": 2368,
"host": "::"
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": [
"file",
"stdout"
]
},
"process": "systemd",
"paths": {
"contentPath": "/var/lib/ghost/content"
},
"mail": {
"transport": "SMTP",
"options": {
"service": "Mailgun",
"auth": {
"user": "[email protected]",
"pass": "you password"
}
}
}
}
添加自定义域名: 在 Domains 里面将自己的域名添加上去,关于自定义域名的配置,Dokploy 里面提供了比较详细的文档,点击进入

选择 ghost 的 service,将自己的域名填写到 Host 里面,并且打开 HTTPS 开关,选择 Certificate Provider 为 Let's Encrypt,这样就拥有了免费证书以及提供 HTTPS 服务的能力。

我的域名是在 Cloudflare 托管的,参考官方 Dokploy & Cloudflare 配置文档

在 Cloudflare 中添加相关的 DNS 解析即可。

在 SSL/TLS 中设置类型为 Full(strict)

📢 添加完自定义域名之后,记得需要重新部署一下(重新点击一下 Depoloy 按钮)才能更新域名!按上述流程配置好之后,Ghost 博客站点就可以访问了。
Discussion