本页内容
- 准备工作
- 第 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,你将看到如下页面。

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

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

在此,你需要配置你的站点,并添加相关信息与站点政策。
接下来,点击左侧边栏的 System >> Email Configuration 检查你的邮件设置。确认页面上列出的邮件设置,然后点击 Send test email 按钮给自己发送一封测试邮件。

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

你也可以从左侧边栏进入并配置其余设置。完成所有设置后,你的 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 社交网络的教程就结束了。如果你有任何问题,请在下方评论区留言。