对不起我又来了,这次因为帮皮塔丘搭毛象所以启用了我尘封已久(明明天天都在运行)的服务器!因为看到了pullopen站长写的博客:有了一个VPS能做什么,对plume非常眼馋:
tag系统和搜索功能完善,可高级搜索,可以传图,与Mastodon的同步优于其他平台,可以直接从mastodon等平台评论,而不像WordPress插件或者Writefreely一样只是博客平台套了个自动发布的壳。最近更新更是增加了对中文界面的支持。
对,writefreely现在对fedi的支持还在开发阶段,启用fedi互联功能之后在毛象上看,就是个套着发布链接的壳…
因为不满足writefreely的套壳发布,就心血来潮搭了plume,见下图。
不过plume似乎是用二进制文件搭建更高效,参考Installing Plume (fediverse blog platform)。这篇文章与salt站长写的去中心化博客 WriteFreely 搭建指南非常像,因为都是二进制文件搭建。这两篇文章均有部分参考。
安装docker&docker-compose
首先判断自己的VPS架构:
uname -a
dpkg --print-architecture
然后按照docker官方文档选择自己的服务器系统进行安装,再安装docker compose。
或者是使用一键脚本安装即可。首先至docker-compose release界面找到最新的版本号(例如v2.2.3
),随后回到服务器执行:
#安装docker
bash <(curl -L https://get.docker.com/)
#安装特定版本的docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#以v2.2.3为例,这里替换为最新版本
chmod +x /usr/local/bin/docker-compose #赋权
如果想要更新docker-compose
版本,先运行which docker-compose
找到安装位置(例如/usr/local/bin/docker-compose
),随后rm -rf /usr/local/bin/docker-compose
删去旧版本,然后运行一键脚本命令直接安装新版本docker-compose
并赋权即可。
拉取plume配置文件与docker文件
参考plume官方文档,如果将plume的配置文件存放在/opt/plume
文件夹下,则运行:
cd /opt #跳转到/opt文件夹下
mkdir plume #新建plume文件夹
cd plume #跳转到/opt/plume,这将是你的plume配置文件夹
# 根据自己的服务器架构拉取相应的docker-compose.yml,默认amd64架构拉取第一个
curl https://docs.joinplu.me/docker-compose.sample.yml > docker-compose.yml
# 如果你的服务器架构是arm32v7则拉取这个
curl https://docs.joinplu.me/docker-compose.sample.arm32v7.yml > docker-compose.yml
# 如果你的服务器架构是arm64v8则拉取这个
curl https://docs.joinplu.me/docker-compose.sample.arm64v8.yml > docker-compose.yml
curl https://docs.joinplu.me/docker.sample.env > .env #拉取plume的环境变量文件并命名为.env
运行openssl rand -base64 32
,复制获取的32位随机字符,然后参考plume官方文档有用的环境变量编辑新创建的.env
文件:
BASE_URL=plume.tantalum.life #你的域名
# generate one with openssl rand -base64 32
ROCKET_SECRET_KEY=把刚刚获得的随机字符粘贴到这里
# Mail settings
MAIL_SERVER=smtp.zoho.com #邮箱服务的smtp
MAIL_USER=你的邮件服务邮箱
MAIL_PASSWORD=邮箱密码,或是需要手动获取的应用密码
MAIL_HELO_NAME=填写你的域名就行,这是古早的smtp设置参数
# DATABASE SETUP
POSTGRES_PASSWORD=填写数据库密码,自己设置,默认passw0rd
POSTGRES_USER=plume
POSTGRES_DB=plume
# you can safely leave those defaults
DATABASE_URL=postgres://plume:数据库密码@postgres:5432/plume #如果数据库密码为默认的passw0rd,则可以使用默认值
MIGRATION_DIRECTORY=migrations/postgres
USE_HTTPS=1
ROCKET_ADDRESS=0.0.0.0
ROCKET_PORT=7878
plm users reset-password
不发送任何东西)。 如果您不打算使用此功能,您可以简单地删除(或注释)用于配置邮件服务器的参数。保存退出。
配置数据库
首先查看一下docker-compose.yml
文件,运行nano docker-compose.yml
,文件内容如下:
version: '3'
services:
postgres:
image: postgres:10.5
env_file: .env
restart: unless-stopped
volumes:
- "./data/postgres:/var/lib/postgresql/data"
plume:
image: plumeorg/plume:latest
env_file: .env
restart: unless-stopped
volumes:
- "./data/plume/static/media:/app/static/media"
- "./.env:/app/.env"
- "./search_index:/app/search_index"
ports:
- "127.0.0.1:7878:7878"
观察此文件,可以发现plume的数据库使用了postgres10.5
版本,持久化数据volumes
位于./data/postgres
(相对地址),也就是/opt/plume/data/postgres
(绝对地址)。
此处有参考兔酱的这篇文章,运行:
docker run --name postgres10 -v /data/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=自己设置的数据库密码 -d postgres:10.5-alpine
#拉取pg镜像并初始化pg库,将临时容器命名为postgres10,挂载volume到上面的持久化数据所在文件夹
docker exec -it postgres10 createuser -U postgres --pwprompt plume
#创建一个用于连接数据库的用户plume并输入你的密码
docker exec -it postgres10 psql -U postgres #进入数据库
运行以下命令创建一个数据库名plume
,所有者为数据库用户plume
的数据库:
CREATE DATABASE plume
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER plume;
\q
终止临时postgres容器并删除:
docker stop postgres10
docker rm postgres10
安装plume
由于持久化数据volume
所在文件夹/opt/plume/data/postgres
未被删除,所以可以给plume使用:
docker-compose pull #拉取plume所需的镜像
docker-compose up -d postgres #启动数据库容器
docker-compose run --rm plume plm migration run #数据库第一次迁移运行
docker-compose run --rm plume plm search init #设置你的站点
docker-compose run --rm plume plm instance new -d 'domain.name' -n 'instance name' -l 'default licence'
#domain.com改为你的域名,instance name改为你的站点名(支持中文,可在网页上更改),default licence是默认文章许可协议(可在网页上更改)
#注册管理员帐号
docker-compose run --rm plume plm users new -n 'admin' -N 'name' -b 'bio' -e 'admin@domain.name' -p 'pass' --admin
#参数n的值为用户名,参数N的值为你的昵称,参数b的值为你的摘要(个人资料,先不用管,可以在网页上改),参数e的值为你的邮箱,参数p的值是管理员帐号的密码
docker-compose up -d #站点启动
Nginx反向代理
官方文档的教程到这里就结束了,但是反向代理还没完成,参考Installing Plume (fediverse blog platform)一文,为站点添加反向代理。
首先切换到root
用户,安装nginx(已安装则跳过):
sudo -i
apt install nginx -y
开启VPS的80/443端口:
ufw allow 80
ufw allow 443
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
去DNS服务商添加一条指向服务器ip,内容为域名的A记录。这里给出两种添加反向代理的方法,效果和配置文件都是完全一样的。第一种方法比较简单。
第一种方法
nano /etc/nginx/conf.d/plume.conf #新建plume.conf
将以下配置贴入并替换你的域名,保存。
server {
listen 80;
listen [::]:80;
server_name 你的域名;
return 301 https://你的域名$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
location / {
proxy_pass http://localhost:7878;
proxy_set_header Host $host;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_buffering off;
}
server_name 你的域名;
#ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
#ssl_trusted_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
access_log /var/log/nginx/plume.access.log;
error_log /var/log/nginx/plume.error.log;
}
测试配置文件是否有错误(试运行):
nginx -t
若没有错误,生效新的配置文件并运行 Nginx,开机启动:
nginx -s reload
systemctl start nginx
systemctl enable nginx
第二种方法
nano /etc/nginx/sites-available/plume.conf #新建plume.conf
将方法一中plume.conf
的配置贴入并替换你的域名,保存。
将配置文件映射到/etc/nginx/sites-enabled/plume.conf
:
ln -s /etc/nginx/sites-available/plume.conf /etc/nginx/sites-enabled/plume.conf
测试配置文件是否有错误(试运行):
nginx -t
若没有错误,生效新的配置文件并运行 Nginx,开机启动:
nginx -s reload
systemctl start nginx
systemctl enable nginx
配置SSL
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx -y
sudo certbot --nginx
Let‘s encrypt的证书90天到期后需要续期,届时只需运行sudo certbot --nginx
按提示操作即可。
补充中文支持
经pullopen站长建议,补充两点中文支持内容:
-
建议在.env中设置
SEARCH_CONTENT_TOKENIZER=ngram
,并且可选SEARCH_TAG_TOKENIZER=ngram
,docker-compose down
随后清空search_index文件夹,docker-compose up -d
重启之后运行docker-compose run --rm plume plm search init
重建索引。这样如果是官方repo,则会以2-8个字符的词组作为搜索关键词,而非默认的空格为分界。具体参考。 -
字数上限调整:在.env中添加
FORM_SIZE=xx
(默认128,可增加)即可提升字数上限(默认是128*1024字节,即差不多一万多字)。