1、准备环境

安装相关依赖

sudo apt update
sudo apt install -y git curl wget nginx postgresql postgresql-contrib php-fpm php-cli php-pgsql php-curl php-gd php-intl php-json php-mbstring php-xml php-zip

2、配置数据库

使用postgresql作为后端数据库

连接数据库

sudo -u postgres psql

创建freshrss数据库,并设置相关权限

示例数据库名:freshrss,数据库用户名:backward

此处容易踩坑,权限不够会导致freshrss初始化时,postgresql中建表失败

CREATE DATABASE freshrss;
CREATE USER backward WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE freshrss TO backward;
GRANT USAGE ON SCHEMA public TO backward;
GRANT CREATE ON SCHEMA public TO backward;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO backward;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO backward;
\q

3、下载并安装FreshRSS

下载FreshRSS

cd /var/www/
sudo git clone https://github.com/FreshRSS/FreshRSS.git

配置FreshRSS

cd FreshRSS
sudo cp config.default.php data/config.php

编辑配置文件

sudo vi data/config.php

修改一下内容

此处新增设定default_user为seventh,这个步骤不配置default_user会导致在网页上初始化时在最后一步失败。

'default_user' => 'seventh',
'db' => [
'type' => 'pgsql',
'host' => 'localhost',
'user' => 'backward',
'password' => 'your_password',
'base' => 'freshrss',
]

设置权限

创建新用户组freshrss

sudo groupadd freshrss

添加新用户到新用户组

ubuntu下www-data用户无法执行crontab,将ubuntu用户添加到freshrss用户组以获得权限

sudo usermod -aG freshrss ubuntu

设置FreshRSS目录权限

sudo chown -R www-data:freshrss /var/www/FreshRSS/
sudo chmod -R 755 /var/www/FreshRSS/
sudo chmod -R 775 /var/www/FreshRSS/data/

4、配置Nginx反向代理

创建nginx配置文件

sudo vi /etc/nginx/conf.d/freshrss.conf
server {
    listen 80;
    listen [::]:80;
    server_name rss.example.com;

    return 301 https://$host$request_uri;
}


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

	server_name rss.example.com;

	ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES256:EECDH+AES128:!aNULL:!SHA1:!MD5:!EXPORT:!DES";
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
	
	ssl_certificate /etc/ssl/example.com/fullchain.crt;
	ssl_certificate_key /etc/ssl/example.com/private.key;

	root /var/www/FreshRSS/p/;

	index index.php index.html index.htm;

	access_log /var/log/nginx/rss.access.log;
	error_log /var/log/nginx/rss.error.log;

	location ~ ^.+?\.php(/.*)?$ {
		fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
		fastcgi_split_path_info ^(.+\.php)(/.*)$;
        set $path_info $fastcgi_path_info;
		fastcgi_param PATH_INFO $path_info;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
	}

	location / {
		try_files $uri $uri/ index.php;
	}

    location ~ /\.ht {
        deny all;
    }
}

需要注意,nginx配置文件中php-fpm的版本,要与系统中安装的版本一致,否则会导致nginx服务运行失败,本配置中为php8.3-fpm。

查看php-fpm版本

php-fpm -v

5、配置域名证书

下载安装acme.sh

git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m youremail@mail.com

配置 DNS API 凭证(以 Cloudflare 为例)

export CF_Token="你的Cloudflare_API_Token"
export CF_Account_ID="你的Cloudflare_账户ID"

申请证书

~/.acme.sh/acme.sh --issue --dns dns_cf -d "*.example.com"

安装证书到nginx证书目录(请将example.com改成你自己的域名)

创建证书目录

sudo mkdir -p /etc/ssl/example.com/

安装证书

acme.sh --install-cert -d *.example.com \
--key-file       /etc/ssl/example.com/private.key  \
--fullchain-file /etc/ssl/example.com/fullchain.crt \
--reloadcmd     "service nginx reload"

启动配置

sudo nginx -t
sudo nginx -s reload
sudo systemctl restart php8.3-fpm

6、完成初始化

访问网页

https://rss.example.com

安装提示,完成初始化,默认用户为前面设置的default_user:seventh,其他的数据库相关设置与前面设置的也保持一致,即可完成初始化。

7、附加设置

设置定时任务来更新订阅,使用当前系统的登录用户而非root用户或www-data用户,如ubuntu。

编辑crontab:

crontab -e

添加以下内容(每20分钟更新一次)

freshrss官方文档中www-data用户无法执行crontab任务,此处选择把ubuntu用户添加到步骤3中创建的freshrss用户组来执行,经测试可以成功。

*/20 * * * * /usr/bin/php /var/www/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1

性能优化

包括选择合适的php-fpm运行模式,配置合适的进程数,修改www.conf 文件

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500

pm = static 静态模式,始终保持一个固定数量的子进程;

pm = dynamic 动态模式,启动时,会产生固定数量的子进程pm.start_servers,最大进程由pm.max_children控制;

pm = ondemand 按需模式,进程在有需求时才产生,持续闲置了pm.process_idle_timeout秒后就会被杀掉;

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐