自建服务 · 2023年10月7日 0

在一台服务器上运行多个Pleroma实例

Pleroma是一款轻量级的去中心化(decentralised)社交媒体网络软件,类似Mastodon、Misskey并可以与这些支持ActivityPub的社交媒体程序进行互通。

笔者有分别部署在不同的服务器的两个Pleroma实例。为便于维护现需要将另一个Pleroma实例迁移到已有一个Pleroma实例的服务器上,但在官方文档和Google均未找到相关内容。本篇文章将介绍如何在一台服务器上运行多个Pleroma实例。

本文是按照官方文档的“Installing on Linux using OTP releases”安装方法进行安装和设置的。

一、两个Pleroma实例共存要求

Pleroma的结构大概分为以下几部分:

  • 安装位置:/opt/pleroma/
  • 配置文件:/etc/pleroma/config.exs
  • 静态文件:/var/lib/pleroma/static/
  • 上传存储:/var/lib/pleroma/uploads/
  • 服务配置:/etc/systemd/system/pleroma_2.service
  • 用户:pleroma
  • PostgreSQL数据库:pleroma

安装位置同时也是Pleroma用户的家(Home)位置。

首先我们需要分开不同实例的这些目录,比如第二个实例(可自行更改):

  • 安装位置:/opt/pleroma_2/
  • 配置文件:/etc/pleroma_2/config.exs
  • 静态文件:/var/lib/pleroma_2/static/
  • 上传存储:/var/lib/pleroma_2/uploads/
  • 服务配置:/etc/systemd/system/pleroma_2.service
  • 用户:pleroma_2
  • PostgreSQL数据库:pleroma_2

那么此时就需要告诉第二个Pleroma实例你的新位置,以免读取成已有的Pleroma实例造成错误。

二、安装第二个Pleroma实例

此处类比官方文档的“Installing on Linux using OTP releases”安装方法进行安装和设置。

# 创建Pleroma_2用户
sudo adduser --system --shell  /bin/false --home /opt/pleroma_2 pleroma_2

# 设置环境变量系统架构(若已下载请忽略此步)
# 例如如果是 `amd64-musl` 那么命令为
export FLAVOUR="amd64-musl"

# 下载Pleroma并解压缩到临时目录(若已下载请忽略此步)
sudo 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/
"

# 将Pleroma移动至Pleroma_2的home目录
sudo su pleroma -s $SHELL -lc "
mv /tmp/release/* /opt/pleroma_2
rmdir /tmp/release
rm /tmp/pleroma.zip
"

# 建立第二实例的上传目录"/var/lib/pleroma_2/uploads"
sudo mkdir -p /var/lib/pleroma_2/uploads

# 建立第二实例的静态文件目录"/var/lib/pleroma_2/static",并授予正确权限
sudo mkdir -p /var/lib/pleroma_2/static
sudo chown -R pleroma /var/lib/pleroma_2

# 建立第二实例的配置文件目录(当然你也可以放在第一实例同一个目录下的另一个文件中,如"/etc/pleroma/config_2.exs")
sudo mkdir -p /etc/pleroma_2
sudo chown -R pleroma /etc/pleroma_2

# 运行配置文件生成器(迁移可忽略本部分,因为早已生成了配置文件)
# 请注意询问目录时输入您先前创建的供第二实例使用的目录
# 注意两个实例的端口号不能设置为同一个(默认为4000)
# 注意两个实例的数据库应当不同,如第二实例用户为“pleroma_2”数据库为“pleroma_2”
sudo su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"

迁移的读者可以把原来相应位置的文件移动到新服务器的上述目录内。

三、共存的修改操作

本部分考虑到直接迁移的读者,因此对于第二实例为初次安装的读者会有一些重复,可以作为二次确认。

第一,在config.exs文件中(/etc/pleroma_2/config.exs)修改静态文件和上传存储位置,另外还需要修改端口以免冲突。

config :pleroma, Pleroma.Web.Endpoint,
   #修改端口,默认端口是4000
   http: [ip: {0, 0, 0, 0}, port: 4001],

#修改静态文件目录
config :pleroma, :instance, static_dir: "/var/lib/pleroma_2/static"
#修改上传文件目录
config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma_2/uploads"

请注意配置文件权限(特别是迁移的读者),可以直接运行命令设置权限

sudo chown pleroma_2 /etc/pleroma_2/config.exs
sudo chmod o= /etc/pleroma_2/config.exs

第二,新建名为“pleroma_2”的用户(第二部分已介绍)

第三,修改第二个Pleroma的服务配置(/etc/systemd/system/pleroma_2.service)

如果没有的话可以从”/opt/pleroma_2/installation/pleroma.service”复制过来。

一共有以下5处需要修改:

; Name of the user that runs the Pleroma service.
User=pleroma_2

; Make sure that all paths fit your installation.
; Path to the home directory of the user running the Pleroma service.
Environment="HOME=/opt/pleroma_2"
; Path to the folder containing the Pleroma installation.
WorkingDirectory=/opt/pleroma_2
; Path to the Pleroma binary.
ExecStart=/opt/pleroma_2/bin/pleroma start
ExecStop=/opt/pleroma_2/bin/pleroma stop

然后应用服务配置:

sudo systemctl enable pleroma_2

第四,修改环境变量

在翻阅源代码时发现Pleroma的配置文件位置和实例sname均需通过修改环境变量来实现。Pleroma的环境变量位置位于“/opt/pleroma_2/releases/2.5.5/env.sh”(根据版本路径不同而不同)

注释掉原来的sname内容(RELEASE_NODE),然后添加配置文件位置的环境变量(PLEROMA_CONFIG_PATH)。文件内容变为:

export RELEASE_DISTRIBUTION="${RELEASE_DISTRIBUTION:-name}"
#export RELEASE_NODE="${RELEASE_NODE:-pleroma_xx@127.0.0.1}"
export RELEASE_NODE="pleroma_2@127.0.0.1"
export PLEROMA_CONFIG_PATH="/etc/pleroma_2/config.exs"

第五,数据库配置

首先进入postgresql命令行

sudo su - postgres
psql

分别执行如下语句以新建数据库和授予权限:(pleroma_2换为您先前设置的内容)

CREATE USER pleroma_2 WITH ENCRYPTED PASSWORD '你设置的密码';
CREATE DATABASE pleroma_2 OWNER pleroma_2;

然后使用\q退出命令行,使用”Ctrl + A + D”退出当前用户postgres。

数据库信息需要与配置文件中的数据库信息一致。如你在语句中设置的密码要与配置文件中”password”一致。

对于第二实例为初次安装可以直接跳到第六部,下面进行数据库的导入操作:

需要先从原来的服务器中导出数据库,导出数据库至sql文件

pg_dump pleroma > movedb.sql

由于我们的用户名已经不是”pleroma”而是”pleroma_2″,因此需要对sql文件进行一些修改,以免运行时有权限问题。

  • 将所有”OWNER TO pleroma”替换为”OWNER TO pleroma_2″
  • 将所有”; Owner: pleroma”替换为”; Owner: pleroma_2″

(笔者直接在gedit打开,使用Ctrl + H替换全部符合内容)

然后需要将修改后的sql文件传输至新服务器,使用以下命令:(-f指向刚才修改的sql文件)

sudo su postgres -s $SHELL -lc "psql -d pleroma_2 -f /path/to/movedb.sql"

至此我们就完成了数据库导入操作。

第六,试运行

建议先使用命令运行看看能否成功,若成功再使用service或systemctl进行运行。

su pleroma_2 -s $SHELL -lc "./bin/pleroma_2 start"

此处笔者的第二实例成功开启,遂开启pleroma_2 service。

sudo service pleroma_2 start

在systemctl status中可以看到第二Pleroma实例运行正常。

至此,您的第二实例应该成功的运行了。

心情表态
+1
0
+1
1
+1
0
+1
0
+1
0
+1
0