本页内容

  • 先决条件
  • 步骤 1 - 配置防火墙
  • 步骤 2 - 安装 Docker 和 Docker Compose
  • 步骤 3 - 创建并下载 Lemmy 文件
  • 步骤 4 - 配置 Lemmy
  • 步骤 5 - 安装 Lemmy
  • 步骤 6 - 安装 Nginx
  • 步骤 7 - 安装 SSL
  • 步骤 8 - 配置 Nginx
  • 步骤 9 - 访问 Lemmy
  • 步骤 10 - 升级 Lemmy
  • 步骤 11 - 备份和恢复 Lemmy 恢复 Lemmy 数据库
  • 结论
  • 恢复 Lemmy 数据库

Lemmy 是一个开源的、类 Reddit 的内容聚合和微博客平台,面向 Fediverse。它允许你创建和管理社区,并能够与其他 ActivityPub 服务(包括 Mastodon、Pleroma 和 Peertube)进行通信。

虽然有一些流行的 Lemmy 实例你可以加入和使用,但也可以为你自己的朋友和家人运行自己的 Lemmy 实例。在本教程中,你将学习如何在 Ubuntu 22.04 服务器上安装 Lemmy。

先决条件

  • 运行 Ubuntu 22.04 的服务器。
  • 非 root 的 sudo 用户。
  • 类似 example.com 的完全限定域名(FQDN)。
  • 确保所有软件包都已更新。 $ sudo apt update $ sudo apt upgrade
  • 系统需要的一些软件包。 $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y 其中某些软件包可能已经在你的系统上安装过了。

运行 Ubuntu 22.04 的服务器。

非 root 的 sudo 用户。

类似 example.com 的完全限定域名(FQDN)。

确保所有软件包都已更新。

$ sudo apt update
$ sudo apt upgrade

系统需要的一些软件包。

$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

其中某些软件包可能已经在你的系统上安装过了。

步骤 1 - 配置防火墙

第一步是配置防火墙。Ubuntu 默认自带 ufw(Uncomplicated Firewall,简易防火墙)。

检查防火墙是否在运行。

$ sudo ufw status

你将看到如下输出。

Status: inactive

允许 SSH 端口,以免在启用防火墙时中断当前的连接。

$ sudo ufw allow OpenSSH

同时允许 HTTP 和 HTTPS 端口。

$ sudo ufw allow http
$ sudo ufw allow https

启用防火墙

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

再次检查防火墙的状态。

$ sudo ufw status

你应该会看到类似的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

步骤 2 - 安装 Docker 和 Docker Compose

Ubuntu 22.04 自带较旧版本的 Docker。要安装最新版本,首先导入 Docker 的 GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

创建 Docker 仓库文件。

$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新系统的仓库列表。

$ sudo apt update

安装最新版本的 Docker。

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证其是否正在运行。

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-08-04 07:48:20 UTC; 4min 29s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2372 (dockerd)
      Tasks: 8
     Memory: 23.9M
        CPU: 295ms
     CGroup: /system.slice/docker.service
             ??2372 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker 需要 root 权限。如果你想在每次运行 docker 命令时避免输入 sudo,可以将你的用户名加入 docker 组。

$ sudo usermod -aG docker $(whoami)

你需要注销服务器并以同一用户重新登录才能使此更改生效,或者使用以下命令。

$ su - ${USER}

确认你的用户已加入 Docker 组。

$ groups
navjot wheel docker

步骤 3 - 创建并下载 Lemmy 文件

为 Lemmy 创建一个文件夹。

$ mkdir ~/lemmy

切换到该目录。

$ cd ~/lemmy

获取自定义的 Nginx 文件以便与 Docker 配合使用。

$ wget https://raw.githubusercontent.com/LemmyNet/lemmy-ansible/main/templates/nginx_internal.conf

获取 Docker compose 文件。

$ wget https://raw.githubusercontent.com/LemmyNet/lemmy-ansible/main/templates/docker-compose.yml

为 Pictrs 应用创建一个文件夹。

$ mkdir -p volumes/pict-rs

为该目录设置正确的权限。

$ sudo chown -R 991:991 volumes/pict-rs

步骤 4 - 配置 Lemmy

在继续安装之前,我们需要编辑下载的文件。

打开 Docker compose 文件进行编辑。

$ nano docker-compose.yml

在文件中进行以下更改:

  • 将文件中的变量 {{ lemmy_port }} 替换为 8536。
  • 将文件中的变量 {{ lemmy_docker_image }} 替换为 dessalines/lemmy:0.18.3。你可以从 Lemmy 的 Docker Hub 页面获取最新版本的 Lemmy Docker 镜像。该页面需要你拥有 Docker 账号。或者,你也可以从其 Github 发布页面获取版本。
  • 将文件中的变量 {{ lemmy_docker_ui_image }} 替换为 dessalines/lemmy-ui:0.18.3。请确保版本与 Lemmy 的 Docker 镜像一致,否则将无法正常工作。
  • 使用以下命令为 pict-rs 生成 API 密钥。 $ openssl rand -base64 32 lRLcaM5rovxzmztlDvtkGijJyBtg4KlEKC6HRb3dn7s= pictrs 服务下 environment 属性下的 PICTRS__API_KEY 密钥被错误地配置为它应该是 PostgreSQL 密码。请将 API 密钥变量中的 {{ postgres_password }} 变量替换为上面命令生成的密钥。
  • 将文件中的 {{ domain }} 变量替换为你的 Lemmy 实例的完全限定域名。
  • 将 {{ postgres_password }} 替换为你自己选择的用于 PostgreSQL 服务器的强密码。
  • 用以下内容替换现有的环境变量 RUST_LOG。 - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" - RUST_BACKTRACE=full
  • 在 PostgreSQL 服务下的 hostname 属性下添加以下部分。 command:/r/n [ "postgres", "-c", "session_preload_libraries=auto_explain", "-c", "auto_explain.log_min_duration=5ms", "-c", "auto_explain.log_analyze=true", "-c", "track_activity_query_size=1048576", ] ports:/r/n # use a different port so it doesnt conflict with potential postgres db running on the host - "5433:5432"

将文件中的变量 {{ lemmy_port }} 替换为 8536。

将文件中的变量 {{ lemmy_docker_image }} 替换为 dessalines/lemmy:0.18.3。你可以从 Lemmy 的 Docker Hub 页面获取最新版本的 Lemmy Docker 镜像。该页面需要你拥有 Docker 账号。或者,你也可以从其 Github 发布页面获取版本。

将文件中的变量 {{ lemmy_docker_ui_image }} 替换为 dessalines/lemmy-ui:0.18.3。请确保版本与 Lemmy 的 Docker 镜像一致,否则将无法正常工作。

使用以下命令为 pict-rs 生成 API 密钥。

$ openssl rand -base64 32
lRLcaM5rovxzmztlDvtkGijJyBtg4KlEKC6HRb3dn7s=

pictrs 服务下 environment 属性下的 PICTRS__API_KEY 密钥被错误地配置为它应该是 PostgreSQL 密码。请将 API 密钥变量中的 {{ postgres_password }} 变量替换为上面命令生成的密钥。

将文件中的 {{ domain }} 变量替换为你的 Lemmy 实例的完全限定域名。

将 {{ postgres_password }} 替换为你自己选择的用于 PostgreSQL 服务器的强密码。

用以下内容替换现有的环境变量 RUST_LOG。

- RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug"
- RUST_BACKTRACE=full

在 PostgreSQL 服务下的 hostname 属性下添加以下部分。

command:
  [
    "postgres",
    "-c",
    "session_preload_libraries=auto_explain",
    "-c",
    "auto_explain.log_min_duration=5ms",
    "-c",
    "auto_explain.log_analyze=true",
    "-c",
    "track_activity_query_size=1048576",
  ]
ports:
  # use a different port so it doesnt conflict with potential postgres db running on the host
  - "5433:5432"

编辑完成后,按 Ctrl + X 并在提示时输入 Y 来保存文件。接下来,创建并打开 lemmy.hjson 文件进行编辑。

$ nano lemmy.hjson

粘贴以下代码。

{
  # for more info about the config, check out the documentation
  # https://join-lemmy.org/docs/en/administration/configuration.html

  database: {
    host: "postgres"
    user: "lemmy"
    password: "yourpsqlpassword"
    database: "lemmy"
    port: 5432
  }
  hostname: "example.com"
  pictrs: {
    url: "http://pictrs:8080/"
     # Set a custom pictrs API key. ( Required for deleting images )
    api_key: "lRLcaM5rovxzmztlDvtkGijJyBtg4KlEKC6HRb3dn7s="
  }
  email: {
    smtp_server: "email-smtp.us-west-2.amazonaws.com:465"
    smtp_login: "AmazonSESUserID"
    smtp_password:"AmazonSESPassword"
    smtp_from_address: "
[email protected]
"
    # Whether or not smtp connections should use tls. Can be none, tls, or starttls
    tls_type: "tls"
  }
  setup: {
    # Username for the admin user
    admin_username: "admin"
    # Password for the admin user. It must be at least 10 characters.
    admin_password: "tf6HHDS4RolWfFhk4Rq9"
    # Name of the site (can be changed later)
    site_name: "Howtoforge Lemmy"
    # Email for the admin user (optional, can be omitted and set later through the website)
    admin_email: "
[email protected]
"
  }
}

编辑完成后,按 Ctrl + X 并在提示时输入 Y 来保存文件。

下一步是创建一个自定义的 PostgreSQL 配置文件以优化数据库。访问 PGTune 网站,根据服务器规模生成相应的值。

在 Ubuntu 22.04 上安装 Lemmy 类 Reddit 内容聚合平台

输入服务器参数,点击 Generate 按钮,创建自定义配置。

创建并打开 customPostgresql.conf 文件进行编辑。

$ nano customPostgresql.conf

粘贴你从 PGTune 获得的代码。

# DB Version: 15
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 2 GB
# CPUs num: 2
# Connections num: 100
# Data Storage: ssd

max_connections = 100
shared_buffers = 512MB
effective_cache_size = 1536MB
maintenance_work_mem = 128MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 2621kB
min_wal_size = 1GB
max_wal_size = 4GB

按 Ctrl + X 并在提示时输入 Y 来保存文件。

步骤 5 - 安装 Lemmy

现在所有文件都已配置完毕,是时候运行 Lemmy 了。运行以下命令启动 Docker 容器。

$ docker compose up -d

检查容器的状态。

$ docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                               NAMES
75443bb3db3e   nginx:1-alpine               "/docker-entrypoint.…"   32 seconds ago   Up 29 seconds   80/tcp, 0.0.0.0:8536->8536/tcp, :::8536->8536/tcp   lemmy-proxy-1
8393c8d625af   dessalines/lemmy-ui:0.18.1   "docker-entrypoint.s…"   32 seconds ago   Up 30 seconds   1234/tcp                                            lemmy-lemmy-ui-1
ea743c8279f7   dessalines/lemmy:0.18.1      "/app/lemmy"             32 seconds ago   Up 26 seconds                                                       lemmy-lemmy-1
78855ae7871e   postgres:15-alpine           "docker-entrypoint.s…"   33 seconds ago   Up 31 seconds   5432/tcp                                            lemmy-postgres-1
9556b57afdb9   asonix/pictrs:0.4.0          "/sbin/tini -- /usr/…"   33 seconds ago   Up 31 seconds   6669/tcp, 8080/tcp                                  lemmy-pictrs-1

你也可以直接使用 Docker Compose 查看状态。

$ docker compose ps
NAME                IMAGE                        COMMAND                  SERVICE             CREATED              STATUS              PORTS
lemmy-lemmy-1       dessalines/lemmy:0.18.1      "/app/lemmy"             lemmy               About a minute ago   Up About a minute
lemmy-lemmy-ui-1    dessalines/lemmy-ui:0.18.1   "docker-entrypoint.s…"   lemmy-ui            About a minute ago   Up About a minute   1234/tcp
lemmy-pictrs-1      asonix/pictrs:0.4.0          "/sbin/tini -- /usr/…"   pictrs              About a minute ago   Up About a minute   6669/tcp, 8080/tcp
lemmy-postgres-1    postgres:15-alpine           "docker-entrypoint.s…"   postgres            About a minute ago   Up About a minute   5432/tcp
lemmy-proxy-1       nginx:1-alpine               "/docker-entrypoint.…"   proxy               About a minute ago   Up About a minute   80/tcp, 0.0.0.0:8536->8536/tcp, :::8536->8536/tcp

你可以通过打开 URL http://:8536/ 来测试,应该会看到 Lemmy 的主页。这说明一切正常。下一步是安装 Nginx 和 Certbot,以便通过域名提供 Lemmy 服务。

步骤 6 - 安装 Nginx

Ubuntu 22.04 自带较旧版本的 Nginx。要安装最新版本,你需要下载官方的 Nginx 仓库。

导入 Nginx 的签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

为 Nginx 的稳定版添加仓库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

更新系统仓库。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。

$ nginx -v
nginx version: nginx/1.24.0

启动 Nginx。

$ sudo systemctl start nginx

检查服务的状态。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-08-04 09:01:56 UTC; 3s ago
       Docs: https://nginx.org/en/docs/
    Process: 5297 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 5298 (nginx)
      Tasks: 2 (limit: 2308)
     Memory: 1.9M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??5298 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??5299 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

步骤 7 - 安装 SSL

我们需要安装 Certbot 来生成 SSL 证书。你可以使用 Ubuntu 的仓库安装 Certbot,也可以通过 Snapd 工具获取最新版本。我们将使用 Snapd 版本。

Ubuntu 22.04 默认已安装 Snapd。运行以下命令以确保你的 Snapd 版本是最新的。

$ sudo snap install core && sudo snap refresh core

安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令,通过创建指向 /usr/bin 目录的符号链接,确保可以运行 Certbot 命令。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

运行以下命令生成 SSL 证书。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m 
[email protected]
 -d example.com

上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

检查 Certbot 续期调度服务。

$ sudo systemctl list-timers

你会发现 snap.certbot.renew.service 是计划运行的服务之一。

NEXT                        LEFT          LAST                        PASSED       UNIT                       ACTIVATES
Fri 2023-08-04 09:50:30 UTC 46min left    Fri 2023-08-04 01:49:37 UTC 7h ago       apt-daily.timer            apt-daily.service
Sat 2023-08-05 00:00:00 UTC 14h left      Wed 2023-06-28 04:41:28 UTC 5h 7min ago  dpkg-db-backup.timer       dpkg-db-backup.service
Fri 2023-08-04 18:54:00 UTC 9h left       n/a                         n/a          snap.certbot.renew.timer   snap.certbot.renew.service

对该过程进行一次空运行(dry run),以检查 SSL 续期是否正常工作。

$ sudo certbot renew --dry-run

如果未见任何错误,说明一切就绪。你的证书将自动续期。

步骤 8 - 配置 Nginx

创建并打开文件 /etc/nginx/conf.d/lemmy.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/lemmy.conf

在其中粘贴以下代码。

limit_req_zone $binary_remote_addr zone=example.com_ratelimit:10m rate=1r/s;

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    # Hide nginx version
    server_tokens off;
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    access_log  /var/log/nginx/lemmy.access.log;
    error_log   /var/log/nginx/lemmy.error.log;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    # use https://blog.cloudflare.com/announcing-1111 Cloudfare+Apnic labs, It is free and secure
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=300s;

    # Hide nginx version
    server_tokens off;

    # Enable compression for JS/CSS/HTML bundle, for improved client load times.
    # It might be nice to compress JSON, but leaving that out to protect against potential
    # compression+encryption information leak attacks like BREACH.
    gzip on;
    gzip_types text/css application/javascript image/svg+xml;
    gzip_vary on;

    # Various content security headers
    add_header Referrer-Policy "same-origin";
    add_header X-Content-Type-Options "nosniff";
    add_header X-Frame-Options "DENY";
    add_header X-XSS-Protection "1; mode=block";


    location / {
      proxy_pass http://localhost:8536;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

请注意,Nginx 配置中要使用的根目录是 /var/www/html/Lemmy/public/ 。

编辑完成后,按 Ctrl + X 并在提示时输入 Y 来保存文件。

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下行。

server_names_hash_bucket_size  64;

按 Ctrl + X 并在提示时输入 Y 来保存文件。

验证 Nginx 配置文件的语法。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 Nginx 服务。

$ sudo systemctl restart nginx

步骤 9 - 访问 Lemmy

打开 URL https://example.com,你将看到如下 Lemmy 主页。

在 Ubuntu 22.04 上安装 Lemmy 类 Reddit 内容聚合平台

点击顶部的 Login 链接,弹出登录页面。

在 Ubuntu 22.04 上安装 Lemmy 类 Reddit 内容聚合平台

输入步骤 4 中使用的凭据,然后点击 Login 按钮继续。你将被带回到 Lemmy 主页。从此你便可以开始使用 Lemmy 了。

在 Ubuntu 22.04 上安装 Lemmy 类 Reddit 内容聚合平台

步骤 10 - 升级 Lemmy

要升级 Lemmy,打开 ~/lemmy 文件夹中的 docker-compose.yml 文件。

$ cd ~/lemmy
$ nano docker-compose.yml

在文件中修改 Lemmy、Lemmy-UI 和 Pictrs 等应用的版本号。编辑完成后,按 Ctrl + X 并在提示时输入 Y 来保存文件。

关闭 Lemmy 容器。

$ docker compose down --remove-orphan

使用新配置重新启动容器。

$ docker compose up -d

步骤 11 - 备份和恢复 Lemmy

要备份 Lemmy,我们需要对数据库和 volumes 文件夹都进行转储。运行以下命令备份数据库。

$ cd ~/lemmy
$ docker compose exec postgres pg_dumpall -c -U lemmy | gzip > lemmy_dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.gz

在上述命令中,postgres 是 compose 文件中 PostgreSQL 的服务名。

接下来,使用以下命令备份 volumes 文件夹。

$ sudo rsync -avP volumes ~/backup/lemmy

你可以使用以下备份脚本,从本地系统远程运行以进行备份。

#!/bin/sh
# DB Backup
ssh USERNAME@SERVER_IP "docker-compose exec postgres pg_dumpall -c -U lemmy" | gzip > ~/BACKUP_LOCATION/INSTANCE_NAME_dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.gz

# Volumes folder Backup
rsync -avP -zz --rsync-path="sudo rsync" USERNAME@SERVER_IP:/LEMMY_LOCATION/volumes ~/BACKUP_LOCATION/FOLDERNAME

恢复 Lemmy 数据库

要在新的 Lemmy 安装上恢复数据库,运行以下一组命令。

# Start only the PostgreSQL container first
$ docker compose up -d postgres

# Restore from the .sql.gz backup
$ gunzip < db_dump.sql  |  docker-compose exec -T postgres psql -U lemmy

# Note: You may need to change the permissions on the postgres directory, depending on your system.
$ chown -R $USER volumes
$ docker compose restart postgres

# Continue with the startup
$ docker compose up -d

如果你不小心先启动了 Lemmy,需要使用以下命令清空现有数据库。

# Drop the existing DB
docker exec -i FOLDERNAME-postgres-1 psql -U lemmy -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"

# This also might be necessary when doing a db import with a different password.
docker exec -i FOLDERNAME-postgres-1 psql -U lemmy -c "alter user lemmy with password 'bleh'"

现在你可以继续执行上面的恢复命令。

结论

至此,本教程关于在 Ubuntu 22.04 服务器上安装类 Reddit 内容聚合平台 Lemmy 的内容就结束了。如果你有任何问题,请在下方评论中留言。