# 本地部署 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 系统了。

上次更新: 2025/9/22 下午12:10:11