记录一次 ttrss 的迁移过程,包括 postgres 数据库备份与恢复,nginx 配置 https 站点等,参考了网上的另一篇迁移文章。其实当时在做的时候是完全按照这篇文章来的,但由于文章的时效性等等方面的问题导致实践中遇到了一些坑,于是对原文中的流程进行了一定更改,记录了咱自己的迁移过程。

备份

先保证原机器上的 postgres 容器正在运行中,然后使用 pg_dump 工具来备份数据库:

1
docker exec postgres pg_dump -c -U postgres -Fc ttrss > export.dmp

此处建议使用 -Fc 参数导出数据库备份文件,而不是默认的导出 SQL 文件,SQL 文件可能在导入的时候遇到外键问题无法正常插入数据。

安装 ttrss

安装 Docker

1
2
# 下载并运行自动安装脚本
sudo curl https://get.docker.com/ | sh

这个自动安装脚本虽然方便,但也有一个缺点就是 Docker 是以 root 权限运行的,如果对于 Docker 的运行权限有特殊的需求的话,建议参照官方文档的方式安装。

下载 docker-compose,其中 1.29.2 是 GitHub release 的版本号,1.29.2 为最新的 docker-compose 1 版本

1
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

设置运行权限

1
sudo chmod +x /usr/local/bin/docker-compose

安装 ttrss

可以直接下载 https://github.com/HenryQW/Awesome-TTRSS/raw/main/docker-compose.yml 的配置文件进行修改,也可以直接从原机器上迁移配置文件过来。

docker-compose.yml 的位置运行 docker-compose up -d,便会自动开始下载镜像并部署运行。

迁移数据库

将上面导出的 export.dmp 文件传输到新机器上,然后执行下面的命令将文件导入到 postgres 镜像中的 /tmp 目录:

1
docker cp export.dmp postgres:/tmp/.

然后使用 pg_restore 工具从备份中恢复数据库。

1
docker exec postgres pg_restore -cC -U postgres -d ttrss /tmp/export.dmp

配置 nginx

安装/更新

先运行 cat /etc/os-release 查看当前系统的 CODENAME。

然后打开 /etc/apt/sources.list 文件,添加 nginx 官方源:

1
2
deb http://nginx.org/packages/debian/ <CODENAME> nginx
deb-src http://nginx.org/packages/debian/ <CODENAME>e nginx

注意把 <CODENAME> 替换成自己系统的 CODENAME 喔。

然后还需要添加 nginx 的 key,并更新源仓库信息:

1
2
3
wget https://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key
apt-key add /tmp/nginx_signing.key
apt-get update

然后就可以通过 apt 安装/更新 nginx 啦:

1
2
3
apt install nginx
# or
apt upgrade nginx

修改配置文件

在 nginx 配置文件中添加监听 80 端口,并跳转到 HTTPS。

1
2
3
4
5
server {
listen 80;
server_name your.domain.com;
return 301 https://$server_name$request_uri;
}

配置 443 端口,并反向代理到本地 181 端口(就是 ttrss 运行的端口,ttrss 的暴露端口在 docker-compose.yml 中的 serivce.rss 中的 PORTS 中更改,容器中的端口为 80,例如默认暴露 181 则配置为 181:80。)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
server_name your.domain.com;
listen 443 ssl;

location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:181;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;

client_max_body_size 100m;
client_body_buffer_size 128k;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

配置 certbot

安装 certbot,这是一个自动证明咱们对站点拥有权,并且全自动申请/续签 ssl 证书的一个 bot,灰常好用~

1
2
apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
apt install certbot python3-certbot-nginx

运行 certbot,然后跟着引导同意一大堆协议就好辣(不同意也没法用啊),之后还会要求输入邮箱,虽然好像不要求验证邮箱的所有权,不过最好还是填自己的吧,似乎会发一些提醒邮件之类的东西(?)。

1
sudo certbot --nginx

最后会让你选择要申请的站点域名,如果没有看到你想申请的站点,注意 nginx 配置中有没有好好写 server_name

如果申请失败的话,注意看自己防火墙的 80 和 443 端口是否开启了。

收尾

重启 nginx:systemctl restart nginx

然后更改 docker-compose.yml

1
SELF_URL_PATH=https://your.domain.com/

并重启 ttrss 服务:docker-compose down %% docker-compose up -d。(ps. 似乎直接使用 restart 命令不会重新读取配置文件哦。)

enjoy your ttrss!

参考

  1. Awesome-TTRSS(Tiny Tiny RSS) 迁移(复制)到另一个服务器(VPS)步骤 - Largesse’s Blog
  2. PostgreSQL: Documentation: 15: pg_dump
  3. PostgreSQL: Documentation: 15: pg_restore