图片来源 / Image Source: Releasing Pleroma 2.1.0
2022 更新!我决定装一个新的 Pleroma Soapbox。
- 为什么是 Pleroma?
- 占用资源在御三家里最少,没有太多我用不到的功能。
- 为什么是 Soapbox?
- Soapbox-FE 界面比较好看,至少看起来比较现代了。
- 既然有 Soapbox-BE 这种西装套自然没理由不用。
准备
从一个干净且装有 Docker 的 Debian VPS 开始,本文默认读者有一定的 Linux 使用经验。
关于 Debian sid / linux-cloud / UFW / Docker 等基本设置可以参考 通过 Docker 搭建 NaiveProxy + Hysteria 代理 这篇文章。
bash
# 开始之前先更新一下apt update && apt upgrade# 如果是 sid 就可以直接用 apt 安装 dockerapt install docker.io# 不是就运行下面的curl -fsSL https://get.docker.com | bash
为之后要用到的域名设置 DNS 记录,绑定到主机 IP。
- example.com - 用于 Soapbox
- pgadmin.example.com - 用于 pgAdmin
PostgreSQL + pgAdmin
为什么用 pgAdmin?因为我之后可能会整点别的服务(比如 Matrix),图个方便。如果不需要 pgAdmin,可以参考 官方安装教程。
通过 Docker 部署 PostgreSQL 和 pgAdmin。
新建名为 pgdata
的卷和名为 pgnetwork
的网络:
bash
docker volume create pgdatadocker network create pgnetwork
分别在 5432, 5433 端口搭建 PostgreSQL 和 pgAdmin:
bash
# Postgres, 5432 端口, pgnetwork, 映射 pgdata 卷docker run -d --name postgres \--network pgnetwork \-v pgdata:/data/db \-e POSTGRES_PASSWORD=postgres \-p 5432:5432 postgres# pgAdmin, 5433 端口, pgnetworkdocker run -d --name pgadmin \--network pgnetwork \-e "PGADMIN_DEFAULT_EMAIL=name@example.com" \-e "PGADMIN_DEFAULT_PASSWORD=admin" \-p 5433:80 dpage/pgadmin4
Caddy
这次的 Caddy 要反代本地服务,就直接用 host network 吧。 按照惯例用我自己的镜像。
bash
# caddy, 主机网络, 映射配置文件和证书目录docker run -d \--name caddy \--network=host \-v /etc/caddy/:/etc/caddy/ \-v /root/.local/share/caddy:/root/.local/share/caddy \--restart unless-stopped \kwaabot/caddy
先配置好用于 pgAdmin 的 Caddyfile:
/etc/caddy/Caddyfiletext
{email name@example.com}pgadmin.example.com {reverse_proxy localhost:5433}
访问 pgadmin.example.com 用上面设置的邮箱密码登录,添加服务器,PostgreSQL 的主机名称、用户名和密码默认都是 postgres。
Soapbox-BE + Soapbox-FE
Soapbox-BE 是 Pleroma 的分支,具有额外的错误修复和功能。
安装依赖
安装 Pleroma / Soapbox 需要的依赖项并创建用户:
原本这里还有
postgresql postgresql-contrib
,但上面已经通过 Docker 部署了 PostgreSQL 所以跳过。
bash
# 一把梭apt install sudo git build-essential cmake libmagic-dev imagemagick ffmpeg libimage-exiftool-perl nginx certbot unzip libssl-dev automake autoconf libncurses5-dev# 创建名为 pleroma 的系统用户, 不启用 Shell, 自动创建登入目录 /var/lib/pleromauseradd -r -s /bin/false -m -d /var/lib/pleroma -U pleroma
下载源码
下载并进入目录,然后切换到 pleroma 用户:
我写到这里时最新版本是
soapbox-v1.1.1
,参考本文自行搭建的话建议点进 gitlab 看一下最新版本。
bash
# 下载 Soapbox-BE 源码到 /opt/pleromagit clone -b soapbox-v1.1.1 https://gitlab.com/soapbox-pub/soapbox-be /opt/pleroma && cd /opt/pleroma# 修改目录所有者为 pleromachown -R pleroma:pleroma /opt/pleroma# 切换到 pleroma 用户sudo -Hu pleroma bash
安装 Elixir 环境
(这段应该以 pleroma 用户身份输入)
以推荐的方式安装 asdf 包管理器、Erlang 和 Elixir。
bash
# 安装 asdf 版本管理器, 同样建议看看有没有更新版本git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.9.0echo ". $HOME/.asdf/asdf.sh" >> ~/.bashrcecho ". $HOME/.asdf/completions/asdf.bash" >> ~/.bashrcexec bash# 安装 erlang 和 elixirasdf plugin-add erlangasdf plugin-add elixirasdf install
(大约需要 15 分钟。☕)
编译
bash
# 安装 hex 和 rebar3mix local.hex --forcemix local.rebar --force# 获取 Elixir 依赖项mix deps.get# 编译 SoapboxMIX_ENV=prod mix compile
(大约需要 10 分钟。☕)
生成配置
bash
# 生成配置MIX_ENV=prod mix pleroma.instance gen# 重命名为 prod.secret.exsmv config/generated_config.exs config/prod.secret.exs# 退出登录并回到 root 账号exit
会按顺序询问域名、实例名称、公开邮箱、通知邮箱、是否启用搜索、数据库地址、数据库名、数据库用户和密码、服务器要监听的 IP 和端口,
重命名为有效配置后用 exit
回到 root 账号。
配置数据库
用上面设置的邮箱和密码登录 pgAdmin,在 “数据库” 下右键新建一个名为 pleroma 的数据库,一切默认。
然后右键 “pleroma” 创建三个扩展,分别是 citext
,pg_trgm
和 uuid-ossp
,本节完成。
启动 Soapbox
复制 systemd 服务并启动,sleep 20 秒后看一下状态。
bash
# 复制 service 文件到 systemd 目录cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service# 设置开机自启并立即启动,隔 20 秒测试状态systemctl enable --now pleroma && sleep 20 && curl http://localhost:4000/api/v1/instance
更新 Soapbox-FE 到 1.3.0
Soapbox-BE 自带的 FE 版本是 1.2.3,而最新版本是 1.3.0。 这显然不怎么好,所以我提供两条命令搞定这个问题。
bash
# 下载到 /tmpcd /tmp && curl -L https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/v1.3.0/download?job=build-production -o soapbox-fe.zip# 解压到 /opt/pleroma/instancebusybox unzip soapbox-fe.zip -o -d /opt/pleroma/instance
更改将立即生效,不需要重启 Pleroma 服务。
更新 Soapbox-FE 到 develop 分支
来自 ☆۰•¤ 黛布拉 Official¤•۰★ (@debula@debula.ml) 的灵感,Soapbox-FE develop 分支的变化我认为比 1.2.3 到 1.3.0 还大。
依旧是两条命令搞定,不过最好自行找一下最新版。
步骤:GitLab 存储库切换到 develop
分支,点进最新一条带绿勾的 commit(如果有错误或警告就换上一条,直到没有为止),找到详情里的 Pipeline 点进去,下面切换到 Jobs 选项卡、复制里面 Stage 为 build
,Name 为 build-production
一项最右边按钮的链接地址。
bash
# 下载到 /tmpcd /tmp && curl -L https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/2386984469/artifacts/download?file_type=archive -o soapbox-fe.zip# 解压到 /opt/pleroma/instancebusybox unzip soapbox-fe.zip -o -d /opt/pleroma/instance
设置反向代理
systemctl status pleroma
确认运行正常后,在 Caddyfile 末尾添加 pleroma 反代:
/etc/caddy/Caddyfileini
{email name@example.com}pgadmin.example.com {reverse_proxy localhost:5433}example.com {reverse_proxy localhost:4000}
创建用户
创建一个管理员用户:
text
cd /opt/pleromasudo -Hu pleroma bash -i -c 'MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin'
需要注意的是 Pleroma 有个保留字列表,和下面一样的用户名都不能注册(哪怕是 admin)。
text
[".well-known", "~", "about", "activities", "api", "auth", "check_password", "dev", "friend-requests", "inbox", "internal", "main", "media", "nodeinfo", "notice", "oauth", "objects", "ostatus_subscribe", "pleroma", "proxy", "push", "registration", "relay", "settings", "status", "tag", "user-search", "user_exists", "users", "web", "verify_credentials", "update_credentials", "relationships", "search", "confirmation_resend", "mfa"]
修改信息
绝大多数配置都可以在网页 AdminFE 修改,但有一些不能。
实例图标
直接替换 /opt/pleroma/instance/static/favicon.png
,刷新就生效
关于页面
进入 /opt/pleroma/instance/static/instance
,ls 一下可以看到有个 about.example
文件夹。重命名成 about:
bash
mv about.example about
文件夹下除了 index.html 还有一些 dmca.html privacy.html tos.html,只保留自己需要的就行。(不过说实话真没什么用)
后记
本来还想部署一个 Matrix 服务,但 Dendrite 和 Conduit 都不支持 OpenID Connect,我又不想用 Synapse。
总之这篇文章就到这里了,欢迎 follow 我的新账号 kwa@kwaa.moe!
TODO:这次的部署只能说是照着官方教程加了点东西,但我还想更进一步。
所以以下内容之后将有可能随机更新:
- Dockerize Pleroma
- /opt/pleroma 里就有一个 Dockerfile,不过这次没用上。
- MinIO 分布式对象存储
- 便于管理且能整合多台 VPS 的硬盘