如果你已经把项目部署到云服务器,但不知道在浏览器里输入什么地址才能打开 Web 管理界面,这篇教程就是为你准备的。
其实就两步:让服务监听外网,再在浏览器里输入地址。
用编辑器打开 .env(在项目根目录,即包含 main.py 的目录),找到这一行:
WEBUI_HOST=127.0.0.1把 127.0.0.1 改成 0.0.0.0:
WEBUI_HOST=0.0.0.0
127.0.0.1表示只有本机能访问,0.0.0.0表示允许任何来源访问。云服务器必须改成0.0.0.0才能从外网打开界面。
注意:
.env里的WEBUI_HOST优先级高于命令行参数。所以即使你在命令里加了--host 0.0.0.0,如果.env里还是127.0.0.1,外网照样访问不了。请务必先改.env。
在项目根目录执行:
# 只启动 Web 界面(不自动执行分析)
python main.py --webui-only
# 或者:启动 Web 界面(启动时执行一次分析;需每日定时分析请加 --schedule 或设 SCHEDULE_ENABLED=true)
python main.py --webui启动成功后,终端会输出类似:
FastAPI 服务已启动: http://0.0.0.0:8000
如果你想让服务在退出终端后继续运行,可以用 nohup:
nohup python main.py --webui-only > /dev/null 2>&1 &日志文件会由程序自动写入
logs/目录,用tail -f logs/stock_analysis_*.log查看。
默认端口是 8000。如果想改用其他端口,在 .env 里设置:
WEBUI_PORT=8888然后重启服务。
项目的 docker/docker-compose.yml 在容器内部已经自动设置了 WEBUI_HOST=0.0.0.0,你不需要在 .env 里再改监听地址,Docker 会自动处理。
在项目根目录执行:
# 同时启动定时分析 + Web 界面(推荐)
docker-compose -f ./docker/docker-compose.yml up -d
# 或者只启动 Web 界面服务
docker-compose -f ./docker/docker-compose.yml up -d server启动后查看状态:
docker-compose -f ./docker/docker-compose.yml ps看到 server 服务状态为 running 就说明 Web 界面已经在运行了。
默认端口是 8000。如果想改用其他端口,在 .env 里设置:
API_PORT=8888然后重新启动容器:
docker-compose -f ./docker/docker-compose.yml down
docker-compose -f ./docker/docker-compose.yml up -d服务启动后,在浏览器地址栏输入:
http://你的服务器公网IP:8000
例如,如果你的服务器 IP 是 1.2.3.4,就输入:
http://1.2.3.4:8000
如果你的域名已经解析到这台服务器,也可以直接用域名访问:
http://your-domain.com:8000
在哪里查公网 IP? 登录你的云服务器控制台(阿里云/腾讯云/AWS 等),在实例列表里可以看到「公网 IP」或「弹性 IP」。
这是最常见的原因。云服务器默认只开放 22(SSH)端口,需要手动放行 8000(或你改的端口)。
操作方法(以阿里云为例):
- 登录阿里云控制台 → 云服务器 ECS → 找到你的实例
- 点击「安全组」→「配置规则」→「添加安全组规则」
- 方向选「入方向」,端口范围填
8000/8000,授权对象填0.0.0.0/0,点击「确定」
腾讯云、AWS 等云厂商操作类似,找到「安全组」或「防火墙规则」,新增一条允许 TCP 8000 端口的入站规则即可。
如果你的系统开启了 ufw 或 firewalld,也需要放行端口:
# Ubuntu / Debian(ufw)
sudo ufw allow 8000
# CentOS / RHEL(firewalld)
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload这是第二常见原因。.env 里默认是 WEBUI_HOST=127.0.0.1,这样服务只监听本机,外网根本连不上。
改法:打开 .env,把 WEBUI_HOST=127.0.0.1 改成 WEBUI_HOST=0.0.0.0,然后重启服务。
Docker 方式不需要改这个,可以跳过。
检查访问地址里的端口是否和 .env / 启动命令里设置的端口一致。
- 直接部署:默认 8000,可通过
WEBUI_PORT=xxxx修改 - Docker:默认 8000,可通过
API_PORT=xxxx修改
如果你有域名,或者不想在地址里带 :8000,可以用 Nginx 做反向代理,把 80/443 端口流量转发给后端服务。
# Ubuntu / Debian
sudo apt update && sudo apt install -y nginx
# CentOS
sudo yum install -y nginx新建文件 /etc/nginx/conf.d/stock-analyzer.conf,内容如下(把 your-domain.com 改成你的域名或 IP):
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 支持 WebSocket(Agent 对话页面需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}sudo nginx -t # 检查配置有没有语法错误
sudo systemctl reload nginx配置成功后,直接用 http://your-domain.com 访问即可,不需要带端口号。
使用 Nginx 后的注意事项:
- 如果你开启了 Web 登录认证(
ADMIN_AUTH_ENABLED=true),建议在.env中把TRUST_X_FORWARDED_FOR=true一并打开,否则系统可能无法正确识别真实 IP。- 如需 HTTPS,可以用 Certbot 自动申请免费的 Let's Encrypt 证书。
把 Web 界面暴露到公网之前,强烈建议开启登录密码保护:
在 .env 中设置:
ADMIN_AUTH_ENABLED=true重启服务后,第一次访问网页时会要求设置初始密码。设置完成后,每次打开设置页面都需要输入密码,可以防止 API Key 等敏感配置被他人看到。
如果忘了密码,可以在服务器上执行:
python -m src.auth reset_password
遇到其他问题?欢迎 提交 Issue。