Ghost 注册多域名 ssh 证书

注册多域名 ssh 证书,主要是为了实现 ghost 博客系统的 oss 存储(利用阿里云 oss 存储 ghost 上传的静态资源),基于一篇文章只讨论一个具体内容的原则,这部分内容将在后面的文章中进行描述。

注册多域名的 ssh 证书

Ghost 是自带了生成 ssh 证书的功能的,不需要用户手动操作,但生成的证书只有一级域名。

服务器为 Ubuntu 16.04,客户端为 Mac OS 终端环境(类似 Linux)。

简要步骤如下:

  1. 将你需要验证的域名全部解析到你的服务器。
  2. 设置 Nginx,使得所有域名的 http 请求都可以访问存放验证文件的文件夹。
  3. 调用 /etc/letsencrypt/acme.sh 生成证书,此方法是 ghost 内部使用的方法,与 ghost 整个系统兼容,因此不用进行额外的配置。
  4. 恢复 Nginx 设置,恢复域名解析的设置。
  5. 将生成的证书下载到本地备用,待会要填到 oss 设置中。

下面对需要的步骤进行详细解释:

域名解析

将你需要验证的域名全部解析到你的服务器(包括你的 oss 的域名,调用 oss 资源也需要使用该证书)。因为生成证书的脚本会自动在你的服务器上生成验证文件,来验证你对域名的所有权。

设置 Nginx

ssh 登录服务器,并切换用户(这个用户是在安装 ghost 时,ghost 要求你注册的一个拥有管理员权限的账户)。

$ ssh root@xx.xx.xx.xx
$ su - username

进入下面的文件夹,可以看到里面有一些配置文件,以你网站的域名命名:

$ cd /var/www/ghost/system/files
$ ls
ghost_yoursite-com.service  yoursite.com.conf  yoursite.com-ssl.conf

修改 yoursite.com.conf,为其添加配置:

$ sudo nano yoursite.com.conf

打开后,复制 server 及其后面整个大括号内的内容。将域名修改为你需要验证的域名,此处我将其修改为了通配符,可以匹配所有二级域名。在所有的 location 字段中,只保留 /.well-known 的字段,其它的删除。余下的部分保持不变。示例如下(添加到原文件后面):

server {
    listen 80;
    listen [::]:80;

    # 此处修改为你需要验证的域名
    server_name *.yoursite.com;
    root /var/www/ghost/system/nginx-root;

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

ctrl + X 保存文件,重启 Nginx。

sudo server nginx restart

生成证书

同样按照上面的方法,登录你的服务器,并切换用户。

sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt --domain {domain} --domain www.{domain} --webroot {ghost root}/system/nginx-root --reloadcmd "nginx -s reload" --accountemail {email}

其中 {domain} 是你需要注册的域名,你可以无限多的添加 --domain 参数。 {ghostroot} 是你 ghost 的安装路径,默认为 /var/www/ghost{email} 是你的邮箱地址,这个没什么影响。

恢复 Nginx 配置和域名解析

用同样的方法,将你的 Nginx 配置文件修改为之前的设置(其实不改也不会有什么问题)。将你的域名解析恢复到正确的设置,例如 oss 绑定的域名需要再解析回 oss。

下载生成的 oss 证书

生成的证书存放在 /etc/letsencrypt/yoursite.com ,你可以先查看一下里面都有哪些文件。

退出 ssh,回到我们本地的终端。

下载证书备用。 {your-local-path} 是你本地的目标文件夹。 注意,目标文件夹一定要已经建立,否则命令会将这个路径当作文件名,写到这个文件里。

scp root@xx.xx.xx.xx:/etc/letsencrypt/yoursite.com/fullchain.cer {your-local-path}
scp root@xx.xx.xx.xx:/etc/letsencrypt/yoursite.com/swiity.com.key {your-local-path}

重启一下 ghost(同样需要切换用户)。

cd /var/www/ghost
ghost restart
显示评论