炸站工魔爪之Pleroma搭建
目录
Pleroma是什么
Pleroma是一个联邦社交网络平台,与 Mastodon 和其他 ActivityPub 实现兼容,是根据 AGPLv3授权的自由软件。
它实际上由两部分组成: 一个后端(简称 Pleroma)和一个面向用户的前端(简称 Pleroma-FE)。还包括乳齿象的前端,如果你喜欢的话。它是我们称之为 fediverse 的一部分,这是一个由实例组成的联邦网络,这些实例使用通用协议,并且可以相互通信。一个实例上的一个帐户就足以与整个联邦宇宙对话!
实际体验
相较于与长毛象,Pleroma更为轻量,这也能让它在小型服务器上较好地运行。
以我自己的体验举例,小破站使用的VPS配置是2核1GB内存,在添加了2GB虚拟内存、接了同一个中继的前提下:运行长毛象站点在高峰期CPU常常跑满,打开页面时加载也非常缓慢;而运行Pleroma站点CPU的占用率在40%以下,目前使用速度方面是令我满意的。
美中不足的是,Pleroma的整体中文生态比不上Mastodon丰富,在搭建、运维等方面的教程都比较少;对新手而言,建站及之后的维护过程中一旦出现问题,能搜索到的有效解决资料比较少。苦手如我,在建站第二天出现了网页打不开但第三方APP能够正常使用的状况,怒调一晚上后,报错越多,最后选择炸服务器重建……
在安装方面,照着已有的(或者官网)教程能够按部就班地搭建成功。(因此本文也就是一份搬运工的粘码记录)
安装历程
已有的准备
- VPS,系统 Ubuntu 20.04
- 域名,解析到 cloudflare
- Terminal,SSH登录到服务器
- 打开能看懂的Pleroma安装教程
前置安装
- 安装依赖
apt install curl unzip libncurses5 postgresql postgresql-contrib nginx certbot libmagic-dev
- 安装可选安装包
apt install imagemagick ffmpeg libimage-exiftool-perl
以上两步,如果出现错误,可执行以下命令后,重新尝试安装
apt-get update
- 添加虚拟内存(SWAP)
使用的是 一键添加/删除Swap虚拟内存 脚本:
wget https://web.archive.org/web/20200920015125if_/https://www.moerats.com/usr/shell/swap.sh && bash swap.sh
运行命令后,输入数字1,再输入虚拟内存数值,回车即可。
free -h
可查看当前内存使用情况
- Postgresql 性能调优(可选)
- 注意,这一步在整体搭建完成之后进行。如果是新购入的服务器,在没有安装Postgresql之前,是找不到
postgresql.conf
文件的。
所以本文档从站点搭建完成后,开始说明这一步:
输入命令行,查看postgresql版本号
apt show postgresql
在回车后返回的信息中,找到Version
一行,看后面的数字。
Version: 12+214ubuntu0.1
# 这里的 12 即是需要知道的postgresql版本号
在 PGTune中输入当前服务器配置:
- DB version: (12,postgresql版本号)
- OS Type: (Linux)
- DB Type: (Web application)
- Total Memory(RAM): (1,服务器内存)GB
- Number of CPUSs: (2,CPU数量)
- Number of Connections: (postgresql连接数,可不填)
- Data Storage: (SSD Storage)
点击Generate
按钮,右边会根据输入情况生成相应配置。
接下来将生成的配置填写进postgresql.conf
中
nano /etc/postgresql/版本号/main/postgresql.conf
*注意替换版本号为数字。
在PGTune中生成的配置中,部分项只需要在原有的内容中找到并修改为对应数值即可:
max_connections = 200
shared_buffers = 256MB
min_wal_size = 1GB
max_wal_size = 4GB
而在原有配置文件中找不到的项,复制好,粘贴进最底部
# Add settings for extensions here
# DB Version: 12
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 1 GB
# CPUs num: 2
# Data Storage: ssd
effective_cache_size = 768MB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 7864kB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 1310kB
max_worker_processes = 2
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
max_parallel_maintenance_workers = 1
保存退出后,systemctl restart postgresql
重启PostgreSQL。
安装 Pleroma
- 创建Pleroma用户
adduser --system --shell /bin/false --home /opt/pleroma pleroma
- 检测并设置环境变量 FLAVOUR
arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"
将返回的结果amd64
,替换到以下命令中
export FLAVOUR="amd64"
- 下载安装 Pleroma 所需的文件到 /tmp 文件夹并解压
su pleroma -s $SHELL -lc "
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
unzip /tmp/pleroma.zip -d /tmp/
"
- 移动文件到 /opt/pleroma 并删除临时文件夹
su pleroma -s $SHELL -lc "
mv /tmp/release/* /opt/pleroma
rmdir /tmp/release
rm /tmp/pleroma.zip
"
- 创建 /uploads 文件夹并设置适当的权限
mkdir -p /var/lib/pleroma/uploads
chown -R pleroma /var/lib/pleroma
- 创建 static 文件(用于存放表情等文件)并设置其所有者为用户 pleroma
mkdir -p /var/lib/pleroma/static
chown -R pleroma /var/lib/pleroma
- 创建存放配置文件的文件夹并设置其所有者为用户 pleorma
mkdir -p /etc/pleroma
chown -R pleroma /etc/pleroma
- 生成 config 配置文件
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"
- config 文件生成成功,回答对应问题
What domain will your instance use? (e.g pleroma.soykaf.com) [] # 输入站点域名
What is the name of your instance? # 输入站点名称
What is your admin email address? # 输入管理员邮箱
What email address do you want to use for sending email notifications? # 输入用来发送通知的邮箱(此处仅输入即可)
Do you want search engines to index your site? (y/n) [n] # 是否希望搜索引擎收录您的网站,建议 n
后面几个问题可以回车默认,接下来几个需要再费点心选择
Do you want to store the configuration in the database (allows controlling it from admin-fe)? (y/n) y # 您希望将配置信息存入数据库吗(允许从管理后台进行控制)?
Do you want to strip location (GPS) data from uploaded images? (y/n) # 您希望从上传的图片中消除 GPS 信息吗?
Do you want to anonymize the filenames of uploads? (y/n) # 您希望将上传文件的文件名匿名化吗?
Do you want to deduplicate uploaded files? (y/n) # 您希望去除重复的已上传文件吗?
成功后,提示:
All files successfully written! Refer to the installation instructions for your platform for next steps. Please transfer your config to the database after running database migrations. Refer to “Transfering the config to/from the database” section of the docs for more information.
- 创建 postgres 数据库
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
- 更新数据库 schema
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
- 启动实例以验证一切都按预期工作
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
- 等待大约 60 秒并检测实例运行状况,如果它正确地显示了您的网址、网站名称和电子邮件地址,则说明实例已经安装成功
sleep 60 && curl http://localhost:4000/api/v1/instance
- 最后,暂时先暂停实例的运行
su pleroma -s $SHELL -lc "./bin/pleroma stop"
设置 nginx 并获取 Let’s Encrypt SSL 证书
- 获取Let’s Encrypt 证书
certbot certonly --standalone --preferred-challenges http -d <yourinstance.tld>
*<yourinstance.tld>
替换成站点域名
-
输入您的邮箱地址(用于紧急重建和安全通知)并按照指示选择 A(agree)和 Y(yes)
-
出现
Congratulations! …
即为成功 -
开启防火墙80、443端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
- 复制 Pleroma nginx 配置到 nginx 文件夹
cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.conf
ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf
- 使用 nano 编辑器打开 Nginx 配置文件
nano /etc/nginx/sites-available/pleroma.conf
- 将文件中所有 example.tld 更改为您的实例的对应名称; 分别有六处,请注意替换
替换点一:
server {
server_name example.tld;#这里1,注意分号保留
listen 80;
listen [::]:80;
替换点二:
location / {
return 301 https://$example.tld$request_uri; #这里2,注意 $example.tld 替换
}
替换点三到六:
server {
server_name example.tld;#这里3
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_trusted_certificate /etc/letsencrypt/live/example.tld/chain.pem;#这里4
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;#这里5
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;#这里6
修改完毕后保存退出
- 检查nginx配置
nginx -t
提示成功
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 启动 nginx
systemctl start nginx
或重启 nginx
reload nginx -s reload
设置系统服务
- 将 pleroma.service 复制到适当的文件夹中
cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
- 启动 pleroma 并设置开机自启动
systemctl start pleroma
systemctl enable pleroma
到这里为止,在浏览器中输入站点域名,就可以看到页面了!
设置 Let’s Encrypt 证书的自动更新
- 创建路径
mkdir -p /var/lib/letsencrypt
- 使用 nano 编辑器打开 Nginx 配置文件
nano /etc/nginx/sites-available/pleroma.conf
-
去除
location ~ /.well-known/acme-challenge { root /var/lib/letsencrypt/; }
前的 # 注释符号 -
检查配置
nginx -t
- 重启 nginx
systemctl restart nginx
- 确认自动更新任务设置成功
certbot renew --cert-name <站点域名> --webroot -w /var/lib/letsencrypt/ --dry-run --post-hook 'systemctl reload nginx'
回车出现以下内容成功
Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/yourinstance.tld/fullchain.pem (success) ** DRY RUN: simulating ‘certbot renew’ close to cert expiry ** (The test certificates above have not been saved.)
- 添加自动任务
echo '#!/bin/sh
certbot renew --cert-name <站点域名> --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
' > /etc/cron.daily/renew-pleroma-cert
chmod +x /etc/cron.daily/renew-pleroma-cert
- 确认任务添加成功
run-parts --test /etc/cron.daily
若显示内容中包含 /etc/cron.daily/renew-pleroma-cert
则添加成功
创建管理员用户
- 进入Plerome
cd /opt/pleroma/bin
- 命令行回车后记得选
y
su pleroma -s $SHELL -lc "./bin/pleroma_ctl user new <管理员账号> <管理员有效> --admin"
回车后,会出现一个链接,复制链接到浏览器,可以设置密码
当然可重复使用该步骤创建多个管理员
出现过的问题及解决
- Q: 提示服务器主机名找不到
sudo: unable to resolve host <主机名>: Name or service not known
A: 在hosts
文件中添加地址和名字
sudo vim /etc/hosts
按键Ins
,输入地址和名字,输入完毕,按键esc
,输入:wp!
保存退出。
重启网络
sudo /etc/init.d/networking restart
- 在<获取Let’s Encrypt 证书>步骤中,有可能提示端口被占用报错,此时可检查ginx是否启动
如果nginx已启动,先暂停nginx服务
systemctl stop nginx
再重新运行命令
关于运维
我在管理员设置项中点了点,就把前端页面炸了……
所以……额……
先去看 文档吧!
搭建参考
-
在 Debian 10 / Ubuntu 20.04 上安装 Pleroma 这篇帮助很大,基本上是参照着来的。
-
主要是【添加虚拟内存】和【PostgreSQL性能优化】 ( https://www.notion.so/2eb194c8e0d74b3087e7570773cded4d)
最后更新于: 2022 年 7 月 24 日