我的博客站点是基于 Ghost 开源部署的,当前已经使用了 Ghost 6.0 版本,最初我是用 Nginx + Docker 进行部署管理,后来接触到了 Dokploy,就把所有的服务都统一交由 Dokploy 部署了,体验很丝滑,本文介绍使用 Dokploy 部署 Ghost 博客的详细操作。

对于 Dokploy 不熟悉的朋友,可以参考我的入门文章 # Dokploy 托管你的全栈应用
Mailgun 的申请,可以参考 # Mailgun 的申请过程 & Ghost 使用

首先在 Dokploy 面板,创建一个 Project,输入名称和描述

CleanShot 2025-02-24 at 15.42.50@2x.png


CleanShot 2025-02-24 at 15.43.39@2x.png

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

CleanShot 2025-02-24 at 15.44.06@2x.png

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

CleanShot 2025-02-24 at 15.45.23@2x.png

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

CleanShot 2025-02-24 at 15.47.10@2x.png

直接点击 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 里面提供了比较详细的文档,点击进入

CleanShot 2025-02-24 at 15.50.20@2x.png

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

CleanShot 2025-02-24 at 20.58.49@2x.png

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

CleanShot 2025-02-24 at 16.11.55@2x.png

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

CleanShot 2025-02-24 at 20.59.33@2x.png

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

CleanShot 2025-02-24 at 21.00.55@2x.png

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