对不起我又来了,这次因为帮皮塔丘搭毛象所以启用了我尘封已久(明明天天都在运行)的服务器!因为看到了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 -adpkg --print-architecture
然后按照docker官方文档选择自己的服务器系统进行安装,再安装docker compose。
或者是使用一键脚本安装即可。首先至docker-compose release界面找到最新的版本号(例如v2.2.3
),随后回到服务器执行:
#安装dockerbash <(curl -L https://get.docker.com/)#安装特定版本的docker-composecurl -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 32ROCKET_SECRET_KEY=把刚刚获得的随机字符粘贴到这里
# Mail settingsMAIL_SERVER=smtp.zoho.com #邮箱服务的smtpMAIL_USER=你的邮件服务邮箱MAIL_PASSWORD=邮箱密码,或是需要手动获取的应用密码MAIL_HELO_NAME=填写你的域名就行,这是古早的smtp设置参数
# DATABASE SETUPPOSTGRES_PASSWORD=填写数据库密码,自己设置,默认passw0rdPOSTGRES_USER=plumePOSTGRES_DB=plume
# you can safely leave those defaultsDATABASE_URL=postgres://plume:数据库密码@postgres:5432/plume #如果数据库密码为默认的passw0rd,则可以使用默认值MIGRATION_DIRECTORY=migrations/postgresUSE_HTTPS=1ROCKET_ADDRESS=0.0.0.0ROCKET_PORT=7878
注意目前,Plume 仅在您需要重置密码时发送邮件(并且仅从 Web 界面,
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 postgres10docker 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 -iapt install nginx -y
开启VPS的80/443端口:
ufw allow 80ufw allow 443sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTsudo 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 reloadsystemctl start nginxsystemctl 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 reloadsystemctl start nginxsystemctl enable nginx
配置SSL
sudo apt-get updatesudo apt-get install software-properties-commonsudo add-apt-repository universesudo add-apt-repository ppa:certbot/certbotsudo apt-get updatesudo apt-get install certbot python3-certbot-nginx -ysudo 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字节,即差不多一万多字)。