writefreely 配置记录

#dev

花几个小时,从买服务器买域名到最终上线,部分参考官方文档,主要参考一篇论坛指南,总算搞定了。

主机和所用服务如下:

配置 VPS 和下载安装包

先在 vultr 上买了个最低端的服务器($5/mo),操作系统选 Ubuntu,启动后 passwd 改密码。做完这一步后,用 wget 下载 writefreely 的安装包,tar 解压。比如 amd64 的安装包下载步骤如下:

wget https://github.com/writeas/writefreely/releases/download/v0.11.2/writefreely_0.11.2_linux_amd64.tar.gz
tar -zxvf writefreely_0.11.2_linux_amd64.tar.gz

购买和绑定域名

我是在 GoDaddy 上买的,可以用支付宝(但是要取消优惠码)。买完之后进入 DNS 管理,修改其中一条类型为 A 名称为 @(即没有二级域名)的指向为 VPS 的 IP 地址,再添加一条 A 类型名称为 www 的。

安装和配置 nginx

照抄论坛指南,安装 nginx:

sudo apt install nginx

设置防火墙 uncomplicated firewall:

sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'OpenSSH'
sudo ufw enable
sudo ufw status

检查 nginx 运行状态,显示绿色的 active 就对了:

systemctl status nginx

然后访问 VPS 的 IP 地址,应该能看到 nginx 的欢迎页。

web 根目录和反向代理

设置一下 web 根目录的权限:

sudo chmod -R 755 writefreely

然后创建一个新的 server block:

sudo vim /etc/nginx/sites-available/writefreely

在里面写上如下内容:

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

    server_name example.com; // 填自己的域名

    gzip on;
    gzip_types
      application/javascript
      application/x-javascript
      application/json
      application/rss+xml
      application/xml
      image/svg+xml
      image/x-icon
      application/vnd.ms-fontobject
      application/font-sfnt
      text/css
      text/plain;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_vary on;

    location ~ ^/.well-known/(webfinger|nodeinfo|host-meta) {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080; // 自定义的端口
        proxy_redirect off;
    }

    location ~ ^/(css|img|js|fonts)/ {
        root /home/$USER/writefreely/static; // writefreely 静态文件的绝对路径
        # Optionally cache these files in the browser:
        # expires 12M;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080; // 自定义的端口
        proxy_redirect off;
    }
}

解释一下反向代理,意思是 nginx 监听端口后再转发到应用的端口(这里是 8080),而不是由应用直接监听。这种设置比较适合一个服务器上跑了多个应用的情况。

一会儿 https 用的 cert-bot 还会修改这个文件,暂时先这样退出保存。

然后把 sites-available 里的配置链接到 sites-enabled

sudo ln -s /etc/nginx/sites-available/writefreely /etc/nginx/sites-enabled/

配置 writefreely

这部分跟着官方教程来就可以。

cd writefreely
./writefreely --config

按步骤走一遍,其中数据库的部分,因为选用 sqlite,所以不必配置用户密码等;服务器选 reverse proxy,端口填上刚才 nginx 配置的端口。然后可以选择单用户还是多用户站点。

这里介绍一些隐私相关的字段:

设置完应该会自动创建数据库,所以可以跳过 ./writefreely --init-db,下一步生成密钥:

./writefreely --gen-keys

创建管理员用户和密码:

./writefreely --create-admin <username>:<password>

创建 writefreely 服务

接下来我们需要让应用在服务器上跑起来并一直运行下去,所以需要创建一个服务:

sudo vim etc/systemd/system/writefreely.service

然后复制粘贴以下内容,把应用的绝对路径改成自己的:

[Unit]
Description=Write Freely Instance
After=syslog.target network.target

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/var/www/writefreely
ExecStart=/var/www/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

配置 https

以上做完之后,应该可以从域名访问到 writefreely 了,最后一步是给网站自动配置 https 证书,让 https 流量走 443 端口。

打开这个网站 Certbot,在 “My HTTP website is running __ on __” 的下拉列表里找到你用的服务器和系统。以 nginx on ubuntu (other) 为例,安装 certbot

wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

获得证书并自动安装:

sudo /usr/local/bin/certbot-auto --nginx

按命令行提示做完后,可以用 SSL Labs 来验证证书是否安装成功。