这份说明对应「只拷代码,不带 data 目录」的方式 —— 服务器上是一个全新的空白系统。
| 项 | 要求 |
|---|---|
| 系统 | Linux(Ubuntu / CentOS / Debian 都行),macOS 也可以 |
| Python | 3.7 或更高,只用标准库,不需要 pip install 任何包 |
| 内存 | 512MB 够用 |
| 磁盘 | 200MB(代码 1.3MB + 后续数据增长) |
检查 Python:
python3 --version
没有的话:
# Ubuntu / Debian
sudo apt update && sudo apt install -y python3
# CentOS / RHEL
sudo yum install -y python3
在本机执行(把 IP 和用户名换成你的):
scp store-ops-server.zip root@你的服务器IP:/opt/
在服务器执行:
cd /opt
unzip store-ops-server.zip
cd store-ops
chmod +x start.sh
解压后的目录结构:
store-ops/
├── backend/ 后端(Python,零依赖)
├── frontend/ 前端(含本地 ECharts)
├── sync/ 生意经同步脚本(服务器上通常用不到,见第六节)
├── tools/ 规则文档导出工具
├── deploy/ systemd 服务模板
├── start.sh 启动脚本
├── DEPLOY.md 本说明
└── README.md 功能说明
cd /opt/store-ops
./start.sh
第一次启动会看到:
[首次启动] 已创建管理员账号 admin / admin123 —— 登录后请立刻修改密码
==============================================================
门店检测工作台已启动
本机访问: http://127.0.0.1:8787
局域网: http://1.2.3.4:8787
...
浏览器打开 http://服务器IP:8787:
Ctrl + C 停止。
# 1. 建一个专用用户(不建议用 root 跑)
sudo useradd -r -s /sbin/nologin storeops
# 2. 改目录归属
sudo chown -R storeops:storeops /opt/store-ops
# 3. 装服务
sudo cp /opt/store-ops/deploy/store-ops.service /etc/systemd/system/
sudo vim /etc/systemd/system/store-ops.service # 确认 WorkingDirectory 路径对不对
# 4. 启动
sudo systemctl daemon-reload
sudo systemctl enable --now store-ops
# 5. 看状态和日志
sudo systemctl status store-ops
sudo journalctl -u store-ops -f
重启服务器后会自动起来。
服务器通常有云厂商的安全组,光开系统防火墙不够。
# 系统防火墙(Ubuntu)
sudo ufw allow 8787/tcp
# CentOS
sudo firewall-cmd --permanent --add-port=8787/tcp && sudo firewall-cmd --reload
然后到云控制台 → 安全组 → 入方向 → 添加 8787 端口。
如果想用 80 端口,把
PORT=80写进 service 文件,或者前面挂一个 nginx 反代。
现在是纯 HTTP,密码是明文传输的。如果要走公网,建议:
certbot --nginx)真要上公网前告诉我,我帮你配。
⚠️ 服务器上默认是关闭的。
自动同步依赖 ego-browser(一个能操作「已登录生意经」的浏览器),
服务器通常没有图形界面,也没有登录态,所以跑不了。
启动时如果你看到:
数据同步: 未启用(这台机器上没有 ego-browser)
请用【导入数据】上传从生意经导出的 Excel
就是这个原因 —— 这是正常的,不是故障。
三种做法,按推荐顺序:
| 做法 | 说明 |
|---|---|
| A. 每天手动导一次(推荐) | 在浏览器登录生意经 → 导出近30天 xlsx → 在工作台【导入数据】上传。全程 2 分钟 |
| B. 本机同步 + 上传 | 在这台 Mac 上保留一份工作台,每天 01:00 自动同步,然后把 data/inbox/ 里的文件传上去 |
| C. 服务器上也装 ego | 需要图形环境(Xvfb 也行)+ 首次扫码登录,维护成本高,不建议 |
如果后面想让服务器也能自动同步,跟我说,我评估一下用无头浏览器 + cookie 导入的方案。
所有数据都在 data/ 一个目录里:
data/app.db 账号 + 门店指标 + 批次记录(最重要)
data/processed/ 每次导入的原始文件
data/inbox/ 待导入的收件箱
data/factory_thresholds.json 出厂阈值快照
备份就一句话:
tar czf ~/backup-$(date +%Y%m%d).tar.gz -C /opt/store-ops data
建议加到 crontab,每天凌晨备份一次:
0 3 * * * tar czf /root/storeops-$(date +\%Y\%m\%d).tar.gz -C /opt/store-ops data
把 data/ 目录整个拷过去覆盖即可,账号、密码、历史数据、原始文件全部都在。
打不开网页
sudo systemctl status store-ops 看进程在不在curl http://127.0.0.1:8787 在服务器本地试能不能通--local(只允许本机)忘了 admin 密码
cd /opt/store-ops
sudo -u storeops python3 - <<'EOF'
import sys; sys.path.insert(0, 'backend')
import db
db.set_password(1, 'newpass123', must_change=1)
print('admin 密码已重置为 newpass123')
EOF
sudo systemctl restart store-ops
端口被占用
sudo lsof -i:8787 # 看谁占着
PORT=9000 ./start.sh # 或者换个端口
想确认数据有没有写进去
cd /opt/store-ops
python3 -c "import sys; sys.path.insert(0,'backend'); import db; print(db.stats()); print([p['period'] for p in db.get_periods()])"