系统技术问题答疑

本文档整理了SECSNOW平台部署和使用过程中常见的技术问题及解决方案。

重要提示

修改 .env 配置后必须重新创建容器

#停止服务默认性能
docker compose --profile default down
#停止服务高性能
docker compose --profile high-performance down

#启动默认性能
docker compose --profile default up -d
#启动高性能
docker compose --profile high-performance up -d 

一、CSRF问题

问题描述

访问平台时出现 403 ForbiddenCSRF 安全验证失败 错误。

解决方案

  1. 编辑 .env 文件

在安装目录的 .env 文件中配置:

SNOW_CSRF_TRUSTED_ORIGINS=http://your-domain.com,https://your-domain.com,http://your-ip:port

配置示例

  • 通过IP访问:
SNOW_CSRF_TRUSTED_ORIGINS=http://192.168.1.100:80
  • 通过域名访问:
SNOW_CSRF_TRUSTED_ORIGINS=http://www.example.com,https://www.example.com
  1. 重启Web服务

修改配置后需要重新创建容器使配置生效


二、端口改变问题

问题描述

需要修改HTTP或HTTPS的默认端口(80/443)。

解决方案

  1. 编辑 .env 文件
# 自定义HTTP端口(例如:8080)
CUSTOM_HTTP_PORT=8080

# 自定义HTTPS端口(例如:8443)
CUSTOM_HTTPS_PORT=8443
  1. 更新CSRF信任来源

端口改变后,同步更新CSRF配置:

SNOW_CSRF_TRUSTED_ORIGINS=http://your-domain.com:8080,https://your-domain.com:8443
  1. 重启服务(重新创建容器)

端口修改后必须完全停止并重新创建容器才能生效。


三、如何禁用用户注册

解决方案

  1. 登录后台管理界面
  2. 找到"网站配置"模块,并创建网站配置(如果还没有)
  3. 取消勾选"允许用户注册"选项
  4. 点击保存

image.png

四、如何前端页面展示的功能模块

解决方案

  1. 登录后台管理界面
  2. 找到"系统授权"模块中的"授权模块",并选择需要禁用的功能模块
  3. 找到对外展示并取消勾选
  4. 点击保存

image.png

五、为什么部分容器没有被清理

解决方案

  1. 登录后台管理界面
  2. 找到"周期任务"模块中的"定时任务",并配置一个定时时清理用户创建过期的任务
  3. 根据情况设置任务执行频率
  4. 点击保存

image.png

六、服务重启操作

标准模式(默认模式)

cd /opt/secsnow-install

# 重启所有服务(完全停止后重新启动)
docker compose --profile default down

docker compose --profile default up -d

高性能模式

适用场景:大规模比赛,高并发,用户数>200

cd /opt/secsnow-install

# 重启所有服务(完全停止后重新启动)
#这里停止掉原来的默认性能模式 然后切换成高性能模式
docker compose --profile default down
docker compose --profile high-performance up -d

性能模式切换

两种模式互斥,切换前必须先停止服务:

从标准模式切换到高性能模式

cd /opt/secsnow-install
docker compose --profile default down 
docker compose --profile high-performance up -d

从高性能模式切换到标准模式

cd /opt/secsnow-install
docker compose --profile high-performance down
docker compose --profile default up -d

八、性能模式选择指南

以下为env配置文件详情,性能可动态调整,调整完重启服务即可

# ================================================
# Celery 配置
# ================================================
# 默认模式 Worker 并发数(单Worker处理所有任务)
CELERY_WORKER_CONCURRENCY=50

# 高性能模式 Worker 并发数
CELERY_CONTAINER_WORKER_CONCURRENCY=150
CELERY_GENERAL_WORKER_CONCURRENCY=4


# ================================================
# Gunicorn 配置(根据性能模式自动调整)
# ================================================
# 公式: workers = 2 × CPU核数 + 1
#
# 默认模式(2-4核服务器):
#   - Workers: 4(适合 2核服务器: 2×2-1=3,取整为4)
#   - Connections: 300(每个 worker 处理 75 个连接)
#
# 高性能模式(4核+服务器):
#   - Workers: 9(适合 4核服务器: 2×4+1=9)
#   - Connections: 500(每个 worker 处理 55 个连接)
#
GUNICORN_WORKERS=6
GUNICORN_WORKER_CONNECTIONS=400
# Gunicorn 超时时间(秒)
GUNICORN_TIMEOUT=300

模式对比

对比项目 标准模式 高性能模式
Celery Worker 1个通用Worker 2个专用Worker
容器任务并发 50(混合处理) 150(专用Worker)
通用任务并发 50(混合处理) 6(专用Worker)
Gunicorn Worker 4个进程,250连接 8个进程,400连接
适用CPU 2-4核 4核+
适用内存 4-8G 8G+
适用场景 小规模练习平台 大规模比赛平台
推荐用户数 <100 >100

如何判断当前模式

方法一:查看Worker容器数量

docker ps --filter "name=celery" --format "{{.Names}}"

标准模式输出

secsnow-celery-worker

高性能模式输出

secsnow-celery-worker-container
secsnow-celery-worker-general

方法二:查看安装记录

cat /opt/secsnow-install/.installed | grep "性能模式"

何时需要切换模式

建议切换到高性能模式的情况

  • 用户数超过200人
  • 大规模比赛或CTF活动
  • 容器创建频繁(每秒多个请求)
  • 系统资源充足(4核+CPU,8G+内存)

建议切换回标准模式的情况

  • 日常练习场景,用户并发低
  • 服务器资源有限(2-4核,4-8G内存)
  • 降低资源消耗

九、常见启动问题排查

问题1:启动后没有Celery Worker运行

现象:执行 docker ps | grep celery 没有任何输出

原因:启动时未指定 --profile 参数

错误命令示例

# 错误:没有指定profile,Worker不会启动
docker compose up -d  

解决方案

cd /opt/secsnow-install
docker compose down

# 根据需要选择一种模式启动
docker compose --profile default up -d              
# 或
docker compose --profile high-performance up -d  

问题2:同时出现3个Celery Worker

现象:执行 docker ps | grep celery 看到3个容器同时运行

原因:可能是从旧版本升级后,没有正确停止服务

解决方案

cd /opt/secsnow-install

# 完全停止所有容器
docker compose down

# 手动清理残留容器(如果有)
docker stop $(docker ps -aq --filter "name=secsnow-celery")
docker rm $(docker ps -aq --filter "name=secsnow-celery")

# 重新启动(选择一种模式)
docker compose --profile default up -d

问题3:服务无响应或性能差

排查步骤

  1. 检查Worker是否正常运行
docker ps | grep celery
  1. 查看Worker日志
# 标准模式
docker logs secsnow-celery-worker

# 高性能模式
docker logs secsnow-celery-worker-container
docker logs secsnow-celery-worker-general
  1. 检查CPU和内存使用率
docker stats --no-stream
  1. 考虑切换性能模式

  2. 如果CPU使用率持续>80%,且资源充足,考虑切换到高性能模式

  3. 如果内存不足,考虑切换到标准模式