writefreely 配置记录
花几个小时,从买服务器买域名到最终上线,部分参考官方文档,主要参考一篇论坛指南,总算搞定了。
主机和所用服务如下:
- vps: vultr
- OS: Ubuntu 19.10
- db: sqlite
- server: nginx
配置 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 配置的端口。然后可以选择单用户还是多用户站点。
这里介绍一些隐私相关的字段:
federation
: 是否选择加入 fediverse,博客可被其他 instance 关注private
: 文章仅对本实例用户可见local_timeline
: 开启本地时间线,也就是 Reader 页面open_registration
: 是否可以公开注册user_invites
: 能否邀请注册,谁能生成邀请链接
设置完应该会自动创建数据库,所以可以跳过 ./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 来验证证书是否安装成功。