DEPLOY.md 6.0 KB

部署到服务器 · 干净安装

这份说明对应「只拷代码,不带 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:

  1. 用 admin / admin123 登录
  2. 会强制要求改密码
  3. 进去后是「还没有数据」的引导页

Ctrl + C 停止。


四、让它常驻后台(systemd)

# 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 反代。

关于 HTTPS

现在是纯 HTTP,密码是明文传输的。如果要走公网,建议:

  • 用 Cloudflare 免费套一层(域名 + 自动证书),源站指向你的服务器 IP
  • 或者用 nginx + Let's Encrypt(certbot --nginx)

真要上公网前告诉我,我帮你配。


六、关于「每天 01:00 自动同步」

⚠️ 服务器上默认是关闭的。

自动同步依赖 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/ 目录整个拷过去覆盖即可,账号、密码、历史数据、原始文件全部都在。


九、常见问题

打不开网页

  1. sudo systemctl status store-ops 看进程在不在
  2. curl http://127.0.0.1:8787 在服务器本地试能不能通
  3. 本地能通、外面不通 → 安全组 / 防火墙没放行
  4. 检查是不是绑了 --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()])"