This page looks best with JavaScript enabled

Plume | 利用Docker-compose搭建Fedi开源博客平台

有潜力代替Lofter的同人写作平台

 ·  ☕ 7 min read

对不起我又来了,这次因为帮皮塔丘搭毛象所以启用了我尘封已久(明明天天都在运行)的服务器!因为看到了pullopen站长写的博客:有了一个VPS能做什么,对plume非常眼馋:

tag系统和搜索功能完善,可高级搜索,可以传图,与Mastodon的同步优于其他平台,可以直接从mastodon等平台评论,而不像WordPress插件或者Writefreely一样只是博客平台套了个自动发布的壳。最近更新更是增加了对中文界面的支持。

对,writefreely现在对fedi的支持还在开发阶段,启用fedi互联功能之后在毛象上看,就是个套着发布链接的壳…

因为不满足writefreely的套壳发布,就心血来潮搭了plume,见下图。

image alt
刚搭建的Plume站点: One杂物馆

不过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
注意:目前,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 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=ngramdocker-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字节,即差不多一万多字)。


Roelxy
WRITTEN BY
Roelxy
新世紀摸魚戰士