基于Ghost的博客部署

背景

作为前端开发,博客系统更倾向于使用node或者说基于js搭建的框架。之前使用的是hexo,优点是纯静态,资源消耗低。但由于博客的编写与发布并不方便,导致长期都没有过post....这次重新建站决心使用一套轻量级,后台管理友好,扩展性强的博客系统,于是就选用了Ghost(官网地址)。

Ghost基于node开发,对于后续的改造和维护会更熟悉一点。另外官方提供了docker镜像,便于项目的迁移。整体上完美地贴合了我的需求。

docker镜像安装与配置

Ghost的镜像地址为:https://hub.docker.com/_/ghost/,页面上有比较多的介绍。基于alpine的镜像比基于Debian的体积更小,于是选用了alpine版本的镜像。Readme中提供了一个MySQL接入的例子,经过多次尝试不知道为何Ghost始终链接不到MySQL,于是放弃。考虑个人博客的数据量不大,将来也不一定有独立一个DB的需求,于是选择了Ghost默认的sqlite3。具体的docker-compose配置如下:

version: "3.1"
services:
  ghost:
    image: ghost:alpine
    restart: always
    volumes:
      - "./ghost/content:/var/lib/ghost/content"
    environment:
      url: "https://www.mypal.wang/blog/"
      mail__transport: "SMTP"
      mail__options__service: "Mailgun"
      mail__options__auth__user: "email@example.com"
      mail__options__auth__pass: "password"
    container_name: ghost

volumes配置将docker容器目录/var/lib/ghost/content映射到宿主机器上,主要为了便于查看和备份当前的博客数据,以及将来的数据迁移。

environment配置的字段在官方文档中有详细地说明:https://docs.ghost.org/docs/config#section-running-ghost-with-config-env-variables
这里要注意的是官方文档的配置使用json格式,在yaml配置中使用两道下划线表示层级。
我的样例中配置了URL表示blog的根目录,我这里没有将域名根目录设置为blog地址,而是设置了path:/blog/,可以让这个域名将来扩展更多的服务。
后面几项配置都是设置的邮件服务器,由于Ghost后台用户管理需要使用邮件认证,如果需要配置多用户或找回用户密码,必须设置SMTP服务器(db中的密码已加盐,通过更新db来设置和修改密码还是比较麻烦的)。官方推荐使用Mailgun,具体配置方法这里就不展开介绍了。貌似免费版Mailgun只能发邮件给白名单用户,而白名单的设置步骤为,Mailgun官网给目标email发送一封邮件,在邮件链接中确认下算是白名单添加成功,然后才能正常给目标邮箱发送邮件。整个过程略蛋疼,如果不需要多用户管理的话,还是不要配邮箱了。

关于sqlite3数据库,Ghost会自动生成和创建数据库文件,存放在content/data/ghost.db,无需特别的设置,还是比较方便的。

Ghost默认监听2368端口,如果有特殊需要,可以在environment中指定端口号。如果不需要nginx反代,在yaml文件中设置端口映射即可:

    ports:
      - 80:2368

nginx配置

使用nginx配置Ghost的反向代理,可以将根目录重定向到/blog/下

server {
    server_name         www.mypal.wang;
    listen              443 ssl http2;

    include             /etc/nginx/conf.d/snippets/ssl.conf;
    access_log          /var/log/nginx/access.log;

    location /blog {
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    Host      $http_host;
        proxy_pass          http://ghost:2368;
    }

    location = / {
        return 302 https://$host/blog/;
    }
}

Ghost后台管理

Ghost的后台管理地址固定为/ghost,无法修改,但可以指定其域名与展示端分离,environment中设置admin__url字段即可。

首次进入管理后台,需要设置管理员的邮箱及密码,设置完成后即可登录进入管理后台。

PC端管理后台功能是最全的,可以编辑发布post;管理后台用户;对外观进行一些更改,设置一些封面图片、博客标题,管理导航栏;还可以上传应用第三方或自己修改的主题;加载一些集成插件。

移动端h5后台基本只能用于浏览配置。

此外Ghost官方还提供了桌面版及移动端APP。在PC端其实Web已经足够全面,登录态能够保持,没有太大必要安装APP,反而更不方便。而移动端APP,仅能编辑Markdown版本的post,其他功能都没有,也是非常单薄的。

至此,具有最基础功能的Ghost系统已经能够在线上运行了,在下一篇中将介绍本站添加的一些Ghost插件。