使用Docker部署FreshRSS

发布于 2020-11-18  2934 次阅读


知名的RSS阅读器Inoreader被墙了,正好趁机自建一个RSS阅读器来用。经过一番对比,在TinyTinyRSS,Fever和FreshRSS之间选择了FreshRSS来使用。

设置数据库

因为之前搭建WordPress时已经设置了MySQL,这次就在原本的MySQL建立新的数据库来供FreshRSS来使用。使用以下命令进入MySQL的容器。

docker exec -it db /bin/bash

然后输入mysql -u root -p并输入管理密码。接下来创建新的用户以便使用:

create user freshrss identified by 'password'

其中password应替换为要使用的密码。

接下来创建新的数据库:

create database freshrss

数据库创建完成后给刚才创建的用户赋予权限:

grant all privileges on freshrss.* to freshrss

其中第一个freshrss是刚创建的数据库名称,第二个freshrss是刚才创建的用户名称。

完成之后输入exit退出mysql,再次输入exit退出容器。

设置FreshRSS容器

在参照了Github上的官方说明后,发现官方使用的Traefik用不上,于是对官方提供的命令做了些修改。首先创建数据卷:

docker volume create freshrss-data
docker volume create freshrss-extensions

然后启动容器:

docker run -d --restart unless-stopped --log-opt max-size=10m \
-v freshrss-data:/var/www/FreshRSS/data \
-v freshrss-extensions:/var/www/FreshRSS/extensions \
-e 'CRON_MIN=4,34' \
-e TZ=Asia/Shanghai \
-p 8080:80 \
--net wordpress_app-network \
--name freshrss freshrss/freshrss

这里为了方便之后Nginx的设置直接把容器的端口暴露在8080,当然,云管理界面的防火墙没打开这个端口仍然无法访问。上面的--net选项是为了连接到WordPress使用的数据库而设置,如果连接到其他数据库或者干脆使用内置的SQLite请酌情修改。

启动之后打开防火墙的8080端口就可以直接访问,但是使用http协议并不安全,所以这里继续使用原有的Nginx和Certbot来进行使用https协议。

设置SSL访问

修改之前WordPress的docker-compose.yml文件,在certbotcommand的最后加入要使用的域名:

-d rss.example.com

然后修改nginx配置文件,在80端口的监听中加入新的域名:

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

        server_name www.example.com rss.example.com;

        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }

        location / {
                rewrite ^ https://$host$request_uri? permanent;
        }
}

接下来在最后加入对新域名到8080端口的转发:

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

	ssl on;
	ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
	
	include /etc/nginx/conf.d/options-ssl-nginx.conf;

	location / {
		proxy_pass http://IP-Address:8080;
		proxy_set_header Host  $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}

其中www.example.com和IP-Address都应替换为相应的域名和地址。之后保存配置文件并重启Web服务器。重启之后重新运行Certbot来为新域名增加SSL证书。运行完成后访问之前设置的域名即可对新安装的FreshRSS进行初始配置。