系统技术问题答疑
本文档整理了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 Forbidden 或 CSRF 安全验证失败 错误。
解决方案
- 编辑
.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
- 重启Web服务
修改配置后需要重新创建容器使配置生效
二、端口改变问题
问题描述
需要修改HTTP或HTTPS的默认端口(80/443)。
解决方案
- 编辑
.env文件
# 自定义HTTP端口(例如:8080)
CUSTOM_HTTP_PORT=8080
# 自定义HTTPS端口(例如:8443)
CUSTOM_HTTPS_PORT=8443
- 更新CSRF信任来源
端口改变后,同步更新CSRF配置:
SNOW_CSRF_TRUSTED_ORIGINS=http://your-domain.com:8080,https://your-domain.com:8443
- 重启服务(重新创建容器)
端口修改后必须完全停止并重新创建容器才能生效。
三、如何禁用用户注册
解决方案
- 登录后台管理界面
- 找到"网站配置"模块,并创建网站配置(如果还没有)
- 取消勾选"允许用户注册"选项
- 点击保存
四、如何前端页面展示的功能模块
解决方案
- 登录后台管理界面
- 找到"系统授权"模块中的"授权模块",并选择需要禁用的功能模块
- 找到对外展示并取消勾选
- 点击保存
五、为什么部分容器没有被清理
由于时区问题,新配置定时任务可能8小时以后才能生效。
解决方案
- 登录后台管理界面
- 找到"周期任务"模块中的"定时任务",并配置一个定时时清理用户创建过期的任务
- 根据情况设置任务执行频率
- 点击保存
六、服务重启操作
标准模式(默认模式)
适用场景:中小规模平台,用户数<200,服务器内存小于等于4G,
cd /opt/secsnow-install
# 重启所有服务(完全停止后重新启动)
docker compose --profile default down
docker compose --profile default up -d
高性能模式
适用场景:大规模比赛,高并发,用户数>200
适用场景:大规模比赛,高并发,用户数>200,服务器内存大于8G适用
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
八、性能模式选择指南
以下的Worker均可以通过.env配置文件修改其数值,如果不想使用默认的可根据服务器配置动态调整。
以下为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:服务无响应或性能差
排查步骤:
- 检查Worker是否正常运行
docker ps | grep celery
- 查看Worker日志
# 标准模式
docker logs secsnow-celery-worker
# 高性能模式
docker logs secsnow-celery-worker-container
docker logs secsnow-celery-worker-general
- 检查CPU和内存使用率
docker stats --no-stream
-
考虑切换性能模式
-
如果CPU使用率持续>80%,且资源充足,考虑切换到高性能模式
- 如果内存不足,考虑切换到标准模式


