Ghost是一个流行的内容创建平台,它使用 JavaScript 和 Node.js 编写。开源软件提供了创作、主题、发布和维护自己的博客所需的一切。

Ghost 是官方 Ghost(Pro) 托管服务支持的开源软件。您可以通过添加 Node.js 并使用 Ghost CLI设置堆栈来将其安装在您自己的服务器上。Ghost 也可作为Docker 映像使用,它为您捆绑了所有依赖项。

在本指南中,我们将使用 Docker 快速启动新的 Ghost 博客。在继续之前在您的主机上安装 Docker 和 Docker Compose 。虽然您可以单独使用 Docker 部署 Ghost,但 Compose 可以更轻松地提供和管理您的站点启动所需的配置值。

如果您刚开始使用 Docker 并且还没有安装 Docker,我建议您查看我们的教程《在 Ubuntu 上安装 Docker 分步图文指南》。

还有:使用 Docker 安装 WordPress 图文指南 https://www.linuxmi.com/docker-install-wordpress.html

启动 Ghost 容器

您可以使用单个 Docker 命令启动基本的 Ghost 站点:

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker run -d -p 2368:2368 –name simple-ghost ghost:4
[sudo] linuxmi 的密码:

Unable to find image 'ghost:4' locally
4: Pulling from library/ghost
Digest: sha256:efaf40cd7358826043ad16becc14df21f9ea3a889c0efd8cd4dc3938140beaa8
Status: Downloaded newer image for ghost:4
fc849c615016c326a9253f6f9699de02d3b2498ec36218fdcd1f8eb3f317db28

这将在其默认端口 2368 上启动 Ghost。访问http://localhost:2368以查看您的站点或http://localhost:2368/ghost访问 Ghost 管理面板。您需要提供一些首次运行设置以完成 Ghost 安装并创建初始用户帐户。

如果您只是在尝试 Ghost,这种方法非常适合快速实验。但是,我们尚未设置持久存储,因此当容器停止时您的数据将会丢失。(持久化存储见:https://www.linuxmi.com/docker-run-mysql.html

这是一个更完整的示例,它使用 Docker Compose 使用Docker 卷设置 Ghost 。将卷挂载到/home/linuxmi/www.linuxmi.com/ghost目录以将 Ghost 的数据存储在容器外。

version: "3"
services:
  ghost:
    image: ghost:4
    ports:
      - 8989:2368
    environment:
      url: http://192.168.150.173
    volumes:
      - ghost:/home/linuxmi/www.linuxmi.com/ghost
    restart: unless-stopped
volumes:
  ghost:

这个 Compose 文件展示了对容器配置的一些其他更改。容器公开的 2368 端口映射到主机上的 8989 端口,从而允许您使用localhost:8989访问 Ghost。重新启动策略已更改以unless-stopped确保您的站点在主机重新启动后自动启动。

现在使用 Compose 调出您的网站:

docker-compose up -d

如下:

配置 Ghost

Ghost 支持多个配置参数来自定义其操作并设置您的站点。当您使用 Docker 时,您可以将这些值作为环境变量提供。

Ghost 的配置文件使用嵌套的 JSON 对象来存储值。您可以通过将每个树级别替换为__(双下划线)字符来将 JSON 键转换为对应的环境变量:

# in a JSON config file
{
    "mail": {
        "transport": "SMTP"
    }
}

# as an environment variable
mail__transport=SMTP

使用文件中的environment字段docker-compose.yml将这些参数提供给 Ghost 容器:

version: "3"
services:
  ghost:
    environment:
      mail__transport: SMTP

有关受支持选项的详尽列表,请参阅Ghost 文档。您可以设置邮件系统,使用单独的 URL访问管理面板,覆盖目录路径并通过可用的环境变量切换隐私选项。

url选项特别重要,因为它是实时生产站点所必需的。这定义了外部访问者将用于访问您的站点的 URL。将此设置为您网站的域名docker-compose.yml

environment:
  url: https://www.linuxmi.com

使用外部数据库

Ghost 默认使用以文件形式存储在站点内容目录中的 SQLite 数据库。它将作为上面创建的 Docker 卷的一部分进行持久化。您可以通过-prefixed 环境变量提供连接详细信息来使用外部MySQL 数据库:database

services:
  ghost:
    # ...
    environment:
      database__client: mysql
      database__connection__host: ghost_mysql
      database__connection__user: root
      database__connection__password: databasePw
      database__connection__database: ghost

  ghost_mysql:
    image: mysql:5.7
    expose:
      - 3306
    environment:
      MYSQL_DATABASE: ghost
      MYSQL_ROOT_PASSWORD: databasePw
    volumes:
      - mysql:/var/lib/mysql
    restart: unless-stopped

volumes:
  mysql:

此 Compose 文件包含另一个在附加容器中运行 MySQL 的服务。在 Ghost 服务上设置环境变量以提供 MySQL 连接详细信息。创建一个单独的mysql卷来保存数据库存储文件。

Compose 会自动将服务链接到 Docker 网络。Ghost 可以ghost_mysql通过使用服务名称作为主机名来访问容器。如果您想使用现有的非 Dockerized MySQL 数据库,您可以删除ghost_mysql服务定义并提供 MySQL 服务器的 IP 地址、数据库模式名称和用户凭据。

将流量代理到您的容器

现在您的 Ghost 站点应该可以运行了,但它仍然暴露在端口 8080 上。如果您不会在主机上运行其他任何东西,您可以绑定端口 80 或 443 以使其通过服务器的域名直接访问。在其他情况下,使用 NGINX 等反向代理将流量从 Web 转发到您的 Ghost 容器。

将 NGINX 添加到您的主机:

sudo apt update
sudo apt install nginx

# 允许HTTP/HTTPS流量通过防火墙
sudo ufw allow 80
sudo ufw allow 443

在 /etc/nginx/sites-available/ghost.example.com 中为你的站点定义一个NGINX主机:

server {
    
    server_name www.linuxmi.com;
    index index.html;

    access_log /var/log/nginx/ghost_access.log
    error_log /var/log/nginx/ghost_error.log error;

    location / {
        proxy_pass http://127.0.0.1:8989;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Original-IP $remote_addr;
    }

}

该文件将 NGINX 配置为ghost.example.com通过 8080 端口转发流量localhost,该端口之前绑定到您的 Ghost 容器。通过链接到 NGINX 的sites-enabled目录来启用新的配置文件:

sudo ln -s /etc/nginx/sites-available/www.linuxmi.com /etc/nginx/sites-enabled/www.linuxmi.com

重新启动 NGINX 以应用您的更改:

sudo service nginx restart

现在您可以使用免费的 Let’s Encrypt 服务设置 SSL 。

相关链接https://www.linuxmi.com/lets-encrypt-certbot-ssl.html  与 https://www.linuxmi.com/ubuntu-20-04-lets-encrypt-nginx.html

添加 Let’s Encrypt 的 Certbot 以自动化证书颁发和更新:

sudo apt install certbot

使用 Certbot 为您的 NGINX 站点获取证书:

sudo certbot --nginx

Certbot 将读取您的 NGINX 站点并为其server_name配置字段生成证书。它会自动重新配置 NGINX 以在您的站点上提供证书。您现在应该可以通过 HTTPS 访问您的域名来访问您的 Ghost 博客了。

虽然我们在本文中专注于 NGINX,但还有其他选项可以将 Web 流量代理到您的 Ghost 容器。Traefik 是领先的竞争者,为 Docker 提供一流的支持。部署 Traefik 实例可以让您通过在 Ghost 容器上设置的Docker 标签配置路由和自动 SSL。

管理 Ghost 更新

您可以通过将站点的 Docker 容器替换为运行更新版本的 Ghost 映像的新容器来更新 Ghost。由于您的站点内容安全地存储在单独的 Docker 卷中,因此在卷重新附加到新容器时会保留这些内容。

如果您在 中标记主要映像版本docker-compose.yml,例如,您可以通过运行以下标志ghost:4更新到最新的次要版本:docker-compose up--pull

docker-compose up -d --pull

这指示 Compose 检查图像标签中的更改并在可用时提取更新版本。它将使用与标签匹配的最新映像版本将您的容器替换为新实例。

当您想要更改您正在使用的标签时,请更新文件image中的引用docker-compose.yml。重复docker-compose up -d拉取镜像并启动新容器。例如,如果 Ghost v5 将来发布,您可以更改您的docker-compose.ymltoimage: ghost:5以移动到新的主要版本。

Docker 通过拉取最新镜像并替换您的容器,可以轻松获取 Ghost 更新。尽管如此,您仍然应该注意您正在应用的更改。如果您需要采取额外步骤来完成迁移,请在进行重大升级之前查阅Ghost 更新日志。

使用ghost-cli

ghost-cli在 Ghost Docker 映像中可用。当 Ghost 安装在传统的非容器化环境中时,该实用程序用于设置和维护 Ghost。

您可以ghost-cli通过 Docker 使用ghost带有docker exec. 这是一个使用version子命令显示您正在使用的 Ghost 版本的示例:

docker exec -it my-ghost-container ghost version

尽管许多ghost-cli组件都可以工作,但有些组件在 Dockerized 环境中不受支持。与 Ghost 的 Docker 映像一起使用时,诸如installsetupupdateuninstall等命令会损坏、无意义或违反最佳实践。Ghost 及其所有依赖项都内置在映像中,无需“安装”;应该通过启动一个新容器来应用更新,如上所示。

概括

Ghost 是一个现代博客平台,提供简洁的仪表板、丰富的内容创建功能以及高级主题和自定义支持。使用 Docker 托管 Ghost 简化了设置过程,减少了您需要的操作系统包的数量,并有助于使您的站点更易于跨环境移植。

一旦您的 Dockerized 博客投入使用,请使用标准Ghost 开发文档来管理您的站点及其内容。您可以使用平台的内置功能设置会员资格、新闻通讯、自定义主题和API 集成。

Ghost 文档:https://ghost.org/docs/config

发表评论