记录一次 ttrss 的迁移过程,包括 postgres 数据库备份与恢复,nginx 配置 https 站点等,参考了网上的另一篇迁移文章。其实当时在做的时候是完全按照这篇文章来的,但由于文章的时效性等等方面的问题导致实践中遇到了一些坑,于是对原文中的流程进行了一定更改,记录了咱自己的迁移过程。
备份
先保证原机器上的 postgres 容器正在运行中,然后使用 pg_dump
工具来备份数据库:
1
| docker exec postgres pg_dump -c -U postgres -Fc ttrss > export.dmp
|
此处建议使用 -Fc
参数导出数据库备份文件,而不是默认的导出 SQL 文件,SQL 文件可能在导入的时候遇到外键问题无法正常插入数据。
安装 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
|
可以直接下载 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,然后跟着引导同意一大堆协议就好辣(不同意也没法用啊),之后还会要求输入邮箱,虽然好像不要求验证邮箱的所有权,不过最好还是填自己的吧,似乎会发一些提醒邮件之类的东西(?)。
最后会让你选择要申请的站点域名,如果没有看到你想申请的站点,注意 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!
参考
- Awesome-TTRSS(Tiny Tiny RSS) 迁移(复制)到另一个服务器(VPS)步骤 - Largesse’s Blog
- PostgreSQL: Documentation: 15: pg_dump
- PostgreSQL: Documentation: 15: pg_restore