关于 Docker 下 Pleroma 实例部署的一些推荐设置

根据 之前这篇文章 您是否已经成功搭建好了您的 Pleroma 实例?接下来您可以参考这篇文章来对您的实例与实例容器进行一些调整以便于更加便捷的管理。

接下来的内容若无事先说明均于 pleroma-docker-compose 目录下进行。

容器文件映射

对实例前端的部分设置无法使用 Admin FE 修改,需要操作容器内文件,因此我们需要将容器内文件映射到宿主机上。在 docker-compose.yml 中添加以下内容:

services:
  pleroma:
    volumes:
      - ./volumes/pleroma/static:/var/lib/pleroma/static

保存后使用 docker-compose up -d 重新构建容器。

待容器重启完毕后即可在 pleroma-docker-compose/volumes/pleroma/static 目录下找到实例前端的静态文件。文件目录应该是这样:

static
├── frontends
│   ├── installed-frontend-name-1 # Name
│   │   ├── ref # Reference(Ref)
│   │   │   ├── static-files1
│   │   │   ├── static-files2
│   │   │   ├── ...
│   ├── installed-frontend-name-2 
│   │   ├── ref
│   │   │   ├── static-files1
│   │   │   ├── static-files2
│   │   │   ├── ...
├── instance
│   ├── panel.html # 自定义栏 HTML 内容
├── static
│   ├── terms-of-service.html # 实例 TOS 页面

前端安装

Pleroma 支持多种前端,你可以通过在 pleroma-docker-compose/volumes/pleroma/static/frontends 目录下新建一个文件夹,例如 pleroma-docker-compose/volumes/pleroma/static/frontends/mikan,然后在该文件夹下新建一个 ref 文件夹,将前端的静态文件放入其中的方式安装(注意修改文件夹权限),也可以通过命令安装。

docker exec -it pleroma /opt/pleroma/bin/pleroma_ctl frontend install 前端名称 --ref reference名称 --build-url 前端静态文件下载地址

例如:

docker exec -it pleroma /opt/pleroma/bin/pleroma_ctl frontend install soapbox-fe --ref production --build-url https://gitlab.com/soapbox-pub/soapbox/-/jobs/artifacts/develop/download?job=build-production

等待安装完成后来到后端 Admin FE,在 Frontend 选项卡中的 Primary 选择刚刚安装的前端。

右下角 Submit 后刷新前端页面即可看到效果(可能需要清理 cookies )。若要恢复原版前端点击 Primary 旁边的垃圾桶即可。

Pleroma FE 主题设置

按照上文所述方法(或者在 Admin FE 中)安装并激活独立版本的 Pleroma FE 后,我们可以手动为其安装更多配色方案(主题)。

获取更多配色方案可在 Google 上搜索 Pleroma FE theme json(但我不知道为什么搜出来的都是暗色系的)。我的实例 上也有部分配色方案,你可以在前端设置界面直接导出。

导出后请将 json 文件存入 ./volumes/pleroma/static/frontends/pleroma-fe/develop/static 中,并重命名为 主题名称.json。随后将要为文件进行权限设置。

请在终端下定位到刚才主题文件的文件夹,输入 ls -l,查看原始文件权限。 不出意外的话应该是跟我一样的结果:

-rw-r--r-- 1 systemd-network 65533  2676 Nov 21 01:19 breezy-dark.json
-rw-r--r-- 1 systemd-network 65533  2645 Nov 21 01:19 breezy-light.json
-rw-r--r-- 1 systemd-network root   8629 Nov 22 01:01 helicidae-ii.json
-rw-r--r-- 1 systemd-network 65533  8804 Nov 22 00:42 helicidae.json
-rw-r--r-- 1 systemd-network 65533  1128 Nov 21 01:19 mammal.json
-rw-r--r-- 1 systemd-network 65533  3402 Nov 21 01:19 paper.json
-rw-r--r-- 1 systemd-network 65533  3842 Nov 21 01:19 pleroma-dark.json
-rw-r--r-- 1 systemd-network 65533  4363 Nov 21 01:19 pleroma-light.json
-rw-r--r-- 1 systemd-network 65533  6289 Nov 21 01:19 redmond-xx-se.json
-rw-r--r-- 1 systemd-network 65533  6093 Nov 21 01:19 redmond-xx.json
-rw-r--r-- 1 systemd-network 65533  5730 Nov 21 01:19 redmond-xxi.json
-rw-r--r-- 1 root            root  11083 Nov 22 00:34 刚刚新建的文件.json

可以看到,除了 刚刚新建的文件.json 以外,其他文件的权限都是 rw-r--r--,而 刚刚新建的文件.json 的权限是 rw-r--r--,这会导致 docker 的权限用户在 systemd-network 用户组的用户无法更改 root 用户组的用户创建的文件,所以我们需要将 刚刚新建的文件.json 的权限改为 rw-r--r--,并将所有权转移为 systemd-network 用户组。运行以下指令:

简单说一下 Linux 的权限标记:上文提到的 ‘-rw-r—r—’ 是指文件的权限标记,第一个字符代表文件类型,第二到第四个字符代表文件所有者的权限,第五到第七个字符代表文件所属用户组的权限,第八到第十个字符代表其他用户的权限。其中,r 代表可读,w 代表可写,x 代表可执行,- 代表无该权限。权限标记后三组可以用二进制代替,例如 rw- r— r— 可以写成 110 100 100,即 644。其实这里只要让 docker 能够读取到文件就行了,不用更改权限标记,但是为了不为自己后期遇上各种奇奇怪怪问题埋下祸根建议还是让文件的权限标记和其他文件保持一致。

sudo chown systemd-network 刚刚新建的文件.json
sudo chmod 644 刚刚新建的文件.json

执行完后再次运行 ls -l,可以看到 刚刚新建的文件.json 的权限已经变成了 rw-r--r--,并且所有权已经转移为 systemd-network 用户组。

-rw-r--r-- 1 systemd-network 65533  5730 Nov 21 01:19 redmond-xxi.json
-rw-r--r-- 1 systemd-network root  11083 Nov 22 00:34 刚刚新建的文件.json

至此,我们已经将主题文件导入到 Pleroma 中了,接下来我们需要在 Pleroma FE 的主题列表中再添加刚才导入的主题文件,才算安装完成,否则你的主题文件将不会列在前端主题列表中。

回到上一级目录,你会找到一个叫 styles.json 的文件,打开编辑,紧接着最后一条记录添加一条新的,格式如下:

{
  "原本的记录": "/static/themes/原本的文件.json", 
  "主题文件别名": "/static/themes/刚刚新建的文件.json" 
}

注:关于别名,你可以自己定义,但是不要和原本的记录重复。稍后会提到别名的作用。

保存即可,权限不会更改,然后回到网站前端刷新页面即可看到新主题已显示在列表中。

如果遇到没显示主题名称的情况应该是主题文件的 json 内未定义主题名称,建议手动修改一下。在原本主题文件第二行后添加一行 "name":"主题显示名称", 然后保存即可。

关于主题别名,它是用来在配置里指定默认主题的。打开 Admin FE,找到 Frontend 里的 Theme 的配置项。

在这里输入你刚才配置的主题别名。然后刷新前端即可看到默认主题已经变成你刚才指定的主题了(如果你在前端使用个人设定覆盖了默认主题的话,需要清理 Cookies 或者到浏览器隐私模式下访问才能看到效果)。