本页内容

  • 准备工作
  • 第 1 步 - 配置防火墙
  • 第 2 步 - 安装并配置 PostgreSQL
  • 第 3 步 - 安装 Redis
  • 第 4 步 - 安装 Nginx
  • 第 5 步 - 安装 SSL
  • 第 6 步 - 下载 BookWyrm
  • 第 7 步 - 配置 BookWyrm
  • 第 8 步 - 配置 Nginx
  • 第 9 步 - 安装 BookWyrm / 创建 BookWyrm 服务单元文件
  • 第 10 步 - 访问 BookWyrm
  • 第 11 步 - 备份 BookWyrm
  • 第 12 步 - 更新 BookWyrm
  • 结语
  • 创建 BookWyrm 服务单元文件

BookWyrm 是一个面向读书爱好者的开源联邦社交网络,可作为无广告的 Goodreads 替代方案。它使用 ActivityPub 协议在其他 BookWyrm 实例以及 Mastodon 等使用该协议的服务之间收发用户动态。它提供许多功能,例如书评、评分、阅读动态、书架(如“想读”、“正在读”和“已读”)、书单,以及关注其他用户及其阅读进度。它还提供用户管理功能,例如屏蔽或手动批准关注者,并为动态、书架和书单提供多级隐私设置。

在本教程中,你将学习如何在 Debian 12 服务器上安装 BookWyrm 这一面向读书爱好者的联邦社交网络。

准备工作

  • 一台运行 Debian 12 的服务器。
  • 一个具有 sudo 权限的非 root 用户。
  • 一个指向你服务器的完全限定域名(FQDN),例如 bookwyrm.example.com。
  • 一个邮件服务商(如 Amazon SES 或 Mailgun)提供的 SMTP 账户。
  • 确保系统所有软件均为最新。$ 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 debian-archive-keyring unzip -y 其中部分软件包可能已安装在你的系统中。

一台运行 Debian 12 的服务器。

一个具有 sudo 权限的非 root 用户。

一个指向你服务器的完全限定域名(FQDN),例如 bookwyrm.example.com。

一个邮件服务商(如 Amazon SES 或 Mailgun)提供的 SMTP 账户。

确保系统所有软件均为最新。

$ 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 debian-archive-keyring unzip -y

其中部分软件包可能已安装在你的系统中。

第 1 步 - 配置防火墙

第一步是配置防火墙。Debian 默认自带 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 步 - 安装并配置 PostgreSQL

Ubuntu 22.04 默认附带 PostgreSQL 14。我们将改用 PostgreSQL 15。

运行以下命令以添加 PostgreSQL 的 GPG 密钥。

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

将 APT 软件源添加到你的源列表中。

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

更新系统软件源。

$ sudo apt update

现在,你可以使用以下命令安装 PostgreSQL。

$ sudo apt install postgresql postgresql-contrib

postgresql-contrib 软件包包含一些额外的工具。

检查 PostgreSQL 服务的状态。

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Sat 2023-09-09 07:39:21 UTC; 16s ago
   Main PID: 3653 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 09 07:39:21 bookwyrm systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Sep 09 07:39:21 bookwyrm systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

你可以看到该服务默认已启用并正在运行。

启动 PostgreSQL 命令行。

$ sudo -i -u postgres psql

创建 BookWyrm 数据库。

postgres=# CREATE DATABASE bookwyrm TEMPLATE template0 ENCODING 'UNICODE';

创建 BookWyrm 用户并设置一个强密码。

postgres-# CREATE USER bookwyrmuser WITH PASSWORD 'Your_Password';

将数据库所有者更改为 BookWyrm 用户。

postgres-# ALTER DATABASE bookwyrm OWNER TO bookwyrmuser;

将数据库的所有权限授予 BookWyrm 用户。

postgres-# GRANT ALL PRIVILEGES ON DATABASE bookwyrm TO bookwyrmuser;

退出命令行。

postgres-# \q

验证你的凭据是否有效。

$ psql --username bookwyrmuser --password --host localhost bookwyrm
Password:
psql (15.4 (Debian 15.4-1.pgdg120+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

bookwyrm=>

输入 \q 退出命令行。

第 3 步 - 安装 Redis

Magento 使用 Redis 进行会话和缓存存储。这一步完全可选,你也可以使用数据库来存储会话。但 Redis 的表现更好。最新版本的 Magento 兼容 Redis 7.0。Ubuntu 自带 Redis 6.0,因此我们将使用 Redis 官方软件源进行安装。

导入 Redis 官方 GPG 密钥。

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

将 APT 软件源添加到你的源列表中。

$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

更新系统软件源列表。

$ sudo apt update

执行以下命令以安装 Redis 服务器。

$ sudo apt install redis

确认 Redis 版本。

$ redis-server -v
Redis server v=7.2.1 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=95712a67f5005c28

让我们使用以下命令验证服务连接。

$ redis-cli

你将切换到 Redis 命令行。

第一步是为 Redis 默认用户设置密码。请将 Your_Redis_Password 替换为你自选的强密码。请确保在密码前加上 > 字符。

127.0.0.1:6379> acl setuser default >Your_Redis_Password

测试 Redis 身份验证。

127.0.0.1:6379> AUTH Your_Redis_Password
OK

向服务发送 Ping。

127.0.0.1:6379> ping
PONG

输入 exit 退出服务。

如果需要,你可以使用以下命令生成 Redis 密码。

$ openssl rand 60 | openssl base64 -A
OaYOuq6J9HhxMV0sGCeZbaGecphCl4GBfVkCOPkNjkQE1FX9DKpGSCJcDb8UV+AuFKA8tR1PgjGequn1

第 4 步 - 安装 Nginx

Debian 12 自带较旧版本的 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] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新系统软件源。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装结果。在 Debian 系统上,以下命令必须配合 sudo 才能生效。

$ sudo 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; preset: enabled)
     Active: active (running) since Sat 2023-09-09 08:40:27 UTC; 1s ago
       Docs: https://nginx.org/en/docs/
    Process: 6946 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 6947 (nginx)
      Tasks: 2 (limit: 1107)
     Memory: 1.7M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??6947 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??6948 "nginx: worker process"

第 5 步 - 安装 SSL

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

Debian 12 默认未安装 Snapd。请安装 Snapd 软件包。

$ sudo apt install 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

验证 Certbot 是否能正常工作。

$ certbot --version
certbot 2.6.0

生成 SSL 证书。

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

上述命令会将证书下载到你服务器上的 /etc/letsencrypt/live/bookwyrm.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     ----------------------------------------------------------------------------------------------------------------               
Sat 2023-09-09 23:49:00 UTC 15h left       -                           -            snap.certbot.renew.timer     snap.certbot.renew.service
Sun 2023-09-10 00:00:00 UTC 15h left       -                           -            dpkg-db-backup.timer         dpkg-db-backup.service
Sun 2023-09-10 00:00:00 UTC 15h left       Sat 2023-09-09 06:42:47 UTC 2h 1min ago  exim4-base.timer             exim4-base.service

进行一次演练,以检查 SSL 续期是否正常工作。

$ sudo certbot renew --dry-run

如果没有看到错误,说明一切就绪。你的证书将自动续期。

第 6 步 - 下载 BookWyrm

为 BookWyrm 创建一个目录。

$ sudo mkdir /opt/bookwyrm

切换到该目录。

$ cd /opt/bookwyrm

从 GitHub 克隆 BookWyrm 应用的生产分支。

$ sudo git clone https://github.com/bookwyrm-social/bookwyrm.git --branch production --single-branch ./

通过复制示例文件来创建环境文件。

$ sudo cp .env.example .env

第 7 步 - 配置 BookWyrm

为 BookWyrm 生成一个密钥(secret key)。

$ openssl rand 60 | openssl base64 -A
wcMjI1FW0mL9RfyxYDNZE/8bQP88kVIAUh7ekcSNAOUQCVfNeuMeW3und4BO5WbyCYy+9KpHqoEHWCkl

打开环境文件进行编辑。

$ sudo nano .env

配置以下变量。

SECRET_KEY="wcMjI1FW0mL9RfyxYDNZE/8bQP88kVIAUh7ekcSNAOUQCVfNeuMeW3und4BO5WbyCYy+9KpHqoEHWCkl"
DOMAIN=bookwyrm.example.com

[email protected]

POSTGRES_PASSWORD=Your_Password
POSTGRES_USER=bookwyrmuser
POSTGRES_DB=bookwyrm
POSTGRES_HOST=localhost

REDIS_ACTIVITY_HOST=localhost
REDIS_ACTIVITY_PORT=6379
REDIS_ACTIVITY_PASSWORD=Your_Redis_Password
REDIS_ACTIVITY_DB_INDEX=0

REDIS_BROKER_HOST=localhost
REDIS_BROKER_PORT=6379
REDIS_BROKER_PASSWORD=Your_Redis_Password
REDIS_BROKER_DB_INDEX=1

FLOWER_USER=username
FLOWER_PASSWORD=flowerpassword

EMAIl_HOST=
EMAIL_PORT=587
EMAIL_HOST_USER=AmazonSESUSER
EMAIL_HOST_PASSWORD=AmazonSESPASSWORD
EMAIL_USE_TLS=true
EMAIL_USE_SSL=false
EMAIL_SENDER_NAME=HowtoForge
EMAIL_SENDER_DOMAIN=example.com

## only enable it if you have a fairly powered server with a minimum of 2 CPU Cores and 2GB of RAM
ENABLE_PREVIEW_IMAGES=true 	

让我们逐一了解环境文件中的所有变量。

  • SECRET_KEY - 你在上一步生成的密钥
  • DOMAIN - 你的 BookWyrm 实例的完全限定域名(FQDN)。在本教程中,它将是 bookwyrm.example.com。
  • POSTGRES_PASSWORD - 在第 2 步中配置的 PostgreSQL 密码。
  • POSTGRES_HOST - 若 PostgreSQL 与 BookWyrm 部署在同一台机器上,则设为 localhost。
  • POSTGRES_USER - 设为你在第 2 步中选择的 bookwyrmuser。
  • POSTGRES_DB - 设为你在第 2 步中选择的 bookwyrm。
  • REDIS_ACTIVITY_HOST 与 REDIS_BROKER_HOST - 若 Redis 服务器与 BookWyrm 部署在同一台机器上,则设为 localhost。
  • REDIS_ACTIVITY_PORT 与 REDIS_BROKER_PORT - 设为 Redis 默认端口 6379。
  • REDIS_ACTIVITY_DB 与 REDIS_BROKER_DB - 分别设为 0 和 1。两者将使用不同的数据库。
  • REDIS_ACTIVITY_PASSWORD 与 REDIS_BROKER_PASSWORD - 设为你在第 3 步中设置的 Redis 密码。
  • FLOWER_USER - 为 BookWyrm 所需的 Flower 服务选择一个用户名。
  • FLOWER_PASSWORD - 为 Flower 服务设置一个密码。
  • EMAIL_HOST - 设为你所使用的邮件服务的 SMTP 主机。
  • EMAIL_PORT - 设为你所使用的邮件服务的 SMTP 端口。
  • EMAIL_HOST_USER - 设为 SMTP 用户名。
  • EMAIL_HOST_PASSWORD - 设为 SMTP 密码。
  • EMAIL_USE_TLS - 如果你的邮件服务使用 TLS,则设为 true。
  • EMAIL_USE_SSL - 如果你的邮件服务使用 SSL,则设为 true。
  • EMAIL_SENDER_NAME - 为你的实例所发送邮件的发件人设置一个名称。
  • EMAIL_SENDER_DOMAIN - 设为邮件服务所使用的域名。
  • ENABLE_PREVIEW_IMAGES - 如果你希望实例自动生成预览图片,则设为 true。不过,由于这是一个资源密集型过程,请确保你的服务器具备充足的 CPU 和内存。

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

第 8 步 - 配置 Nginx

将文件 /opt/bookwyrm/nginx/server_config 复制到 Nginx 配置目录。

$ sudo cp /opt/bookwyrm/nginx/server_config /etc/nginx/conf.d/server_config

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

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

在其中粘贴以下代码。

include /etc/nginx/conf.d/server_config;

upstream web {
    server localhost:8000;
}

server {
    listen [::]:80;
    listen 80;

    server_name bookwyrm.example.com;

    # redirect http to https
    return 301 https://bookwyrm.example.com$request_uri;
}

server {
    access_log /var/log/nginx/bookwyrm.access.log cache_log;
    error_log  /var/log/nginx/bookwyrm.error.log;

    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name bookwyrm.example.com;

    client_max_body_size 3M;

    if ($host != "bookwyrm.example.com") {
        return 301 $scheme://bookwyrm.example.com$request_uri;
    }

    # SSL code
    ssl_certificate /etc/letsencrypt/live/bookwyrm.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bookwyrm.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/bookwyrm.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;

    ssl_protocols TLSv1.2 TLSv1.3;
    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;

    tcp_nopush on;
    types_hash_max_size 2048;

    gzip on;

    proxy_read_timeout 1800s;

    # store responses to anonymous users for up to 1 minute
    proxy_cache bookwyrm_cache;
    proxy_cache_valid any 1m;
    add_header X-Cache-Status $upstream_cache_status;

    # ignore the set cookie header when deciding to
    # store a response in the cache
    proxy_ignore_headers Cache-Control Set-Cookie Expires;

    # PUT requests always bypass the cache
    # logged in sessions also do not populate the cache
    # to avoid serving personal data to anonymous users
    proxy_cache_methods GET HEAD;
    proxy_no_cache      $cookie_sessionid;
    proxy_cache_bypass  $cookie_sessionid;

    # tell the web container the address of the outside client
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;

    location ~ ^/(login[^-/]|password-reset|resend-link|2fa-check) {
        limit_req zone=loginlimit;
        proxy_pass http://web;
    }

    # do not log periodic polling requests from logged in users
    location /api/updates/ {
        access_log off;
        proxy_pass http://web;
    }

    location / {
        proxy_pass http://web;
    }

    # directly serve images and static files from the
    # bookwyrm filesystem using sendfile.
    # make the logs quieter by not reporting these requests
    location ~ ^/(images|static)/ {
        root /opt/bookwyrm;
        try_files $uri =404;
        add_header X-Cache-Status STATIC;
        access_log off;
    }

    # monitor the celery queues with flower, no caching enabled
    location /flower/ {
       proxy_pass http://localhost:8888;
       proxy_cache_bypass 1;
    }
}

完成后,按 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 步 - 安装 BookWyrm

在安装 BookWyrm 之前,我们需要安装一些 Python 软件包。

$ sudo apt install python3-venv python3-pip python3-dev libpq-dev

切换到 BookWyrm 目录。

$ cd /opt/bookwyrm

将文件夹的所有权更改为当前登录用户。

$ sudo chown -R $USER:$USER .

创建 Python 虚拟环境(venv)目录。

$ python3 -m venv ./venv

使用 pip 包管理器安装 BookWyrm 的 Python 依赖。

$ ./venv/bin/pip3 install -r requirements.txt

执行数据库结构迁移。

$ venv/bin/python3 manage.py migrate

初始化数据库。

$ venv/bin/python3 manage.py initdb

编译主题。

$ venv/bin/python3 manage.py compile_themes

生成静态文件。

$ venv/bin/python3 manage.py collectstatic --no-input

创建并配置 BookWyrm 系统用户。

$ sudo useradd bookwyrm -r

将安装目录的所有者更改为 BookWyrm 用户。

$ sudo chown -R bookwyrm:bookwyrm /opt/bookwyrm

此后,若要运行任何 BookWyrm 相关命令,请以 BookWyrm 用户身份运行。

$ sudo -u bookwyrm echo I am the ${whoami} user
I am the bookwyrm user

创建 BookWyrm 服务单元文件

BookWyrm 自带 service、worker 和 scheduler 的服务单元文件。将它们复制到 /etc/systemd/system 目录。

$ sudo cp /opt/bookwyrm/contrib/systemd/*.service /etc/systemd/system/

使用以下命令启用并启动这些服务。

$ sudo systemctl enable bookwyrm bookwyrm-worker bookwyrm-scheduler --now

检查 BookWyrm 服务的状态。

$ sudo systemctl status bookwyrm
? bookwyrm.service - BookWyrm
     Loaded: loaded (/etc/systemd/system/bookwyrm.service; enabled; preset: enabled)
     Active: active (running) since Mon 2023-09-11 00:05:54 UTC; 7s ago
   Main PID: 28583 (gunicorn)
      Tasks: 2 (limit: 1107)
     Memory: 99.2M
        CPU: 1.254s
     CGroup: /system.slice/bookwyrm.service
             ??28583 /opt/bookwyrm/venv/bin/python3 /opt/bookwyrm/venv/bin/gunicorn bookwyrm.wsgi:application --bind 0.0.0.0:8000
             ??28603 /opt/bookwyrm/venv/bin/python3 /opt/bookwyrm/venv/bin/gunicorn bookwyrm.wsgi:application --bind 0.0.0.0:8000

类似地,你可以检查其余两个服务的状态。

安装过程的最后一步是生成管理员代码,用于创建管理员账户。

$ sudo -u bookwyrm /opt/bookwyrm/venv/bin/python3 /opt/bookwyrm/manage.py admin_code

你可以随时通过重新运行相同的命令来获取该代码。

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

*******************************************
Use this code to create your admin account:
299f3181-e57e-4f16-94c9-51cfc427b8df
*******************************************

下一步是访问 BookWyrm 并完成你的实例设置。

第 10 步 - 访问 BookWyrm

在浏览器中打开 URL https://bookwyrm.example.com,你将看到如下页面。

在 Debian 12 服务器上安装 BookWyrm 联邦书评社交平台

如果一切正常,点击 Continue 按钮进入下一页。

在 Debian 12 服务器上安装 BookWyrm 联邦书评社交平台

填写上一步获得的管理员密钥以及管理员账户的登录凭据。完成后点击 Sign up 按钮进入下一页。

在 Debian 12 服务器上安装 BookWyrm 联邦书评社交平台

在此,你需要配置你的站点,并添加相关信息与站点政策。

接下来,点击左侧边栏的 System >> Email Configuration 检查你的邮件设置。确认页面上列出的邮件设置,然后点击 Send test email 按钮给自己发送一封测试邮件。

在 Debian 12 服务器上安装 BookWyrm 联邦书评社交平台

如果邮件发送成功,你应该会收到如下邮件。

在 Debian 12 服务器上安装 BookWyrm 联邦书评社交平台

你也可以从左侧边栏进入并配置其余设置。完成所有设置后,你的 BookWyrm 实例即可投入使用。

第 11 步 - 备份 BookWyrm

BookWyrm 自带一个备份工具,但它针对 Docker 安装方式进行了定制。同时它还自带一个自动备份清理工具,可自动清理备份文件夹。我们将修改备份工具以适配本教程的安装方式,并配合使用其提供的备份清理工具。

创建 ~/bookwyrm-backup.sh 文件并打开进行编辑。

$ nano ~/bookwyrm-backup.sh

在其中粘贴以下代码。

#!/bin/bash
POSTGRES_DB=bookwyrm
POSTGRES_USER=bookwyrmuser

if [ -z "$POSTGRES_DB" ]; then
    echo "Database not specified, defaulting to bookwyrm"
fi
if [ -z "$POSTGRES_USER" ]; then
    echo "Database user not specified, defaulting to bookwyrm"
fi

BACKUP_DB=${POSTGRES_DB:-bookwyrm}
BACKUP_USER=${POSTGRES_USER:-bookwyrm}
filename=backup_${BACKUP_DB}_$(date +%F)_$(date +%T)
PGPASSWORD="Your_Password" pg_dump -h localhost -U $BACKUP_USER $BACKUP_DB > ~/backups/$filename.sql

按 Ctrl + X 并在提示时输入 Y 保存文件。请根据你在第 2 步中配置的值,修改 POSTGRES_DB、POSTGRES_USER 和 PGPASSWORD 变量的值。

将该文件复制到 /usr/local/bin 目录。

$ sudo cp ~/bookwyrm-backup.sh /usr/local/bin/bookwyrm-backup.sh

使备份文件可执行。

$ sudo chmod +x /usr/local/bin/bookwyrm-backup.sh

创建备份目录。

$ mkdir ~/backups

将文件 /opt/bookwyrm/postgres-docker/weed.sh 复制到 /usr/local/bin 目录。

$ sudo cp /opt/bookwyrm/postgres-docker/weed.sh /usr/local/bin/bookwyrm-weed.sh

创建并打开 cron 文件进行编辑。

$ nano cronfile

在其中粘贴以下代码。

0 0 * * * /usr/local/bin/bookwyrm-backup.sh
# This script will weed the backups directory. It will keep the 14
# most-recent backups, then one backup/week for the next four backups, then one
# backup/month after that.
0 5 * * * /usr/local/bin/bookwyrm-weed.sh -d 14 -w 4 -m -1 ~/backups

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

将 cron 文件复制到 /etc/cron.d 目录。

$ sudo cp ~/cronfile /etc/cron.d/cronfile

为 cron 文件设置正确的权限。

$ sudo chmod 0644 /etc/cron.d/cronfile

将该文件提交到 crontab。

$ sudo crontab /etc/cron.d/cronfile

创建 cron.log 文件。

$ sudo touch /var/log/cron.log

测试备份创建。

$ bookwyrm-backup.sh

检查 backups 目录。

$ ls ~/backups -al
total 764
drwxr-xr-x 2 navjot navjot   4096 Sep 11 01:31 .
drwx------ 7 navjot navjot   4096 Sep 11 01:31 ..
-rw-r--r-- 1 navjot navjot 257577 Sep 11 01:21 backup_bookwyrm_2023-09-11.sql
-rw-r--r-- 1 navjot navjot 257577 Sep 11 01:27 backup_bookwyrm_2023-09-11_01:27:35.sql
-rw-r--r-- 1 navjot navjot 257577 Sep 11 01:31 backup_bookwyrm_2023-09-11_01:31:45.sql

第 12 步 - 更新 BookWyrm

更新你的 BookWyrm 实例涉及多个步骤。首先,从 BookWyrm 的 GitHub 仓库拉取最新更改。

$ cd /opt/bookwyrm
$ sudo -u bookwyrm git pull

安装新的 Python 依赖。

$ sudo -u bookwyrm venv/bin/pip install -r requirements.txt

编译主题。

$ sudo -u bookwyrm venv/bin/python3 manage.py compile_themes

收集所有静态文件。

$ sudo -u bookwyrm venv/bin/python3 manage.py collectstatic --no-input

执行数据库迁移。请先使用上一步的方法创建备份。

$ sudo -u bookwyrm venv/bin/python3 manage.py migrate

重启 BookWyrm 服务。

$ sudo systemctl restart bookwyrm bookwyrm-worker bookwyrm-scheduler

结语

至此,关于在 Debian 12 服务器上安装 BookWyrm 社交网络的教程就结束了。如果你有任何问题,请在下方评论区留言。