# 本地部署 SSRAG
本文我们将以 CentOS 为主示范如何在 Linux 操作系统中部署并安装 SSRAG 系统,其他 Linux 版本系统安装步骤基本一致。
# 前提条件
安装 SSRAG 之前, 请确保你的机器已满足最低安装要求:
- CPU >= 2 Core
- 内存 >= 4 GiB
# 1、安装运行环境
# 安装 Python 及 uv 运行环境
打开终端并运行以下命令:
sudo yum install python3 python3-pip -y
# 验证 Python 是否安装成功
python3 --version
uv 是一个用 Rust 编写的极速 Python 包安装器和解析器,旨在替代 pip 和 pip-tools 等传统工具,打开终端并运行以下命令:
# 使用官方安装脚本
curl -LsSf https://astral.sh/uv/install.sh | sh
# 验证 uv 安装
uv --version
# 安装 .NET Core 运行时
安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
.NET Core 运行时允许运行使用不随附运行时的 .NET Core 所开发的应用。 以下命令安装 ASP.NET Core 运行时,这是与 .NET Core 最兼容的运行时。 在终端中,运行以下命令。
sudo yum install aspnetcore-runtime-8.0
# 验证dotnet core runtime是否安装成功
dotnet --info
# 网络受限环境的安装方法
若服务器无法直接访问外网,可尝试以下方法:
在能联网的机器下载 uv 安装脚本:
curl -LsSf https://astral.sh/uv/install.sh -o uv-installer.sh
将下载的 uv-installer.sh 脚本上传到 CentOS 服务器,在服务器上为脚本添加执行权限并运行:
chmod +x uv-installer.sh
./uv-installer.sh
# 验证 uv 安装
uv --version
# 2、下载并解压 SSRAG 安装包
创建并进入 SSRAG 系统运行的文件夹,例如我们打算在 /var/ssrag 中运行 SSRAG:
创建并进入文件夹:
mkdir -m 666 /var/ssrag/
cd /var/ssrag
下载 SSRAG 安装包,最新的产品下载地址请进入产品官网获取:
# 下载 ssrag-core
wget https://dl.ssrag.com/ssrag/0.9.22/ssrag-core-0.9.22.tar.gz
# 下载 ssrag-ai
wget https://dl.ssrag.com/ssrag/0.9.22/ssrag-ai-0.9.22.tar.gz
解压安装包至 /var/ssrag 文件夹中并删除安装包:
# 解压 ssrag-core
tar -xzf ssrag-core-0.9.22.tar.gz -C ./core
rm ssrag-core-0.9.22.tar.gz -f
# 解压 ssrag-ai
tar -xzf ssrag-ai-0.9.22.tar.gz -C ./ai
rm ssrag-ai-0.9.22.tar.gz -f
# 3、安装 Nginx
备注
如果需要可选 Nginx 模块,则可能需要从源代码生成 Nginx。
# 安装nginx
sudo yum install nginx
# 启动nginx(需要先确保80端口未被其他程序占用)
systemctl start nginx
# 设为开机启动
systemctl enable nginx
# 4、将 Nginx 设置为 SSRAG 反向代理
安装完毕 Nginx 后,请修改 /etc/nginx/nginx.conf 配置文件,在文本编辑器中打开它,并将 server 内容替换为以下内容:
# SSRAG Nginx Config ...
server {
listen 80;
server_name _;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
location /api/ai {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
使用上述配置文件,Nginx 接受端口 80 上的流量并将根目录请求转接到 http://localhost:5000 中的 SSRAG CORE,将/api/ai 请求转接到 http://localhost:8000 中的 SSRAG AI。
如果希望指定域名,可以将 server_name _; 替换为 server_name example.com;,Nginx 将只匹配 example.com 上的流量并转接到 SSRAG。
注意
未能指定正确的 server_name 指令 (opens new window)会公开应用的安全漏洞。 如果可控制整个父域(区别于易受攻击的 *.com),则子域通配符绑定(例如,*.example.com)不具有此安全风险。 有关详细信息,请参阅 rfc7230 第 5.4 条 (opens new window)。
除此之外,由于 Nginx 默认允许上传文件的大小是 1M,通常还需要设置 Nginx 允许上传文件的大小:
client_max_body_size 500m;
500m 表示最大上传 500M,可以根据实际需要进行设置。
以下是完整的 Nginx 配置文件示例,具体配置可以根据实际情况更改:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
client_max_body_size 500m;
# SSRAG Nginx Config ...
server {
listen 80;
server_name _;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
location /api/ai {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
}
完成配置 Nginx 后,运行 sudo nginx -t 来验证配置文件的语法。
sudo nginx -t
如果配置文件测试成功,可以通过运行 sudo nginx -s reload 强制 Nginx 重新载入。
sudo nginx -s reload
# 测试 Nginx 反向代理
导航到 SSRAG CORE 根目录,通过命令行运行 SSRAG CORE 系统:
cd /var/ssrag/core
dotnet SSRAG.Web.dll
导航到 SSRAG AI 根目录,通过命令行运行 SSRAG AI 系统:
cd /var/ssrag/ai
source .venv/bin/activate
uvicorn main:app
Nginx 将对 http://<IP地址或域名> 发起的请求转接到在 http://127.0.0.1:5000 中的 SSRAG CORE 系统,对 http://<IP地址或域名>/api/ai 发起的请求转接到在 http://127.0.0.1:8000 中的 SSRAG AI 系统。
测试 Nginx 反向代理完成后,请在命令提示符处按 Ctrl+C 关闭 SSRAG。
# 5、将 SSRAG 设置为自动启动
SSRAG 系统包括以下三部分:
- Core 服务:SSRAG 后台系统
- AI API 服务:为 AI 功能提供 API 请求服务
- AI Worker 服务:为 AI 的数据集处理、工作区、清理等异步任务提供服务
接下来,我们需要分别配置并将以上服务设置为自动启动。
# SSRAG CORE
创建服务定义文件 ssrag-core.service:
sudo touch /etc/systemd/system/ssrag-core.service
将以下内容保存至 /etc/systemd/system/ssrag-core.service:
[Unit]
Description=SSRAG CORE
[Service]
WorkingDirectory=/var/ssrag/core
ExecStart=/usr/bin/dotnet /var/ssrag/core/SSRAG.Web.dll
Restart=always
# Restart service after 10 seconds if the ssrag service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=ssrag
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
保存文件并启用服务。
sudo systemctl enable ssrag-core.service
运行服务,并确认它正在运行。
sudo systemctl start ssrag-core.service
## 查看服务运行状态(可选)
sudo systemctl status ssrag-core.service
# SSRAG AI API
创建服务定义文件 ssrag-ai-api.service:
sudo touch /etc/systemd/system/ssrag-ai-api.service
将以下内容保存至 /etc/systemd/system/ssrag-ai-api.service:
[Unit]
Description=SSRAG AI API
[Service]
WorkingDirectory=/var/ssrag/ai
ExecStart=source .venv/bin/activate && uvicorn main:app
Restart=always
# Restart service after 10 seconds if the ssrag service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=ssrag
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
保存文件并启用服务。
sudo systemctl enable ssrag-ai-api.service
运行服务,并确认它正在运行。
sudo systemctl start ssrag-ai-api.service
## 查看服务运行状态(可选)
sudo systemctl status ssrag-ai-api.service
# SSRAG AI WORKER
创建服务定义文件 ssrag-ai-worker.service:
sudo touch /etc/systemd/system/ssrag-ai-worker.service
将以下内容保存至 /etc/systemd/system/ssrag-ai-worker.service:
[Unit]
Description=SSRAG AI WORKER
[Service]
WorkingDirectory=/var/ssrag/ai
ExecStart=source .venv/bin/activate && celery -A celery_app worker --loglevel=info --pool=solo
Restart=always
# Restart service after 10 seconds if the ssrag service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=ssrag
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
保存文件并启用服务。
sudo systemctl enable ssrag-ai-worker.service
运行服务,并确认它正在运行。
sudo systemctl start ssrag-ai-worker.service
## 查看服务运行状态(可选)
sudo systemctl status ssrag-ai-worker.service
# 6、访问 SSRAG
在配置了反向代理并通过 systemd 管理 SSRAG 后,Web 应用现已完全配置,并能通过浏览器从地址 http://<IP地址或域名> 进行访问了。
如果 SSRAG 在服务器上运行,但无法通过 http://<IP地址或域名> 地址访问,请检查服务器的防火墙,并确认端口 80 已打开。
至此,SSRAG 系统已经在服务器中部署完毕,我们可以开始正式运行 SSRAG 系统了。