# chongming.service — systemd 管理打包后的 chongming 应用(Nuitka 单二进制 + 模块库) # # 安装步骤(以 /opt/chongming 为例,目录名可改,需同步修改下方 WorkingDirectory/ExecStart): # sudo mkdir -p /opt/chongming # sudo cp -r build/. /opt/chongming/ # 打包产物:chongming 二进制 + config.toml + config/ + resources/ + static.svfs # sudo useradd --system --home /opt/chongming --shell /usr/sbin/nologin chongming # sudo chown -R chongming:chongming /opt/chongming # sudo cp deploy/chongming.service /etc/systemd/system/ # sudo systemctl daemon-reload # sudo systemctl enable --now chongming # # 常用操作: # systemctl status chongming # 状态 # journalctl -u chongming -f # 实时日志(应用自身日志另见 /opt/chongming/logs/) # systemctl restart chongming # 重启(SIGTERM 优雅排空,最长等待 30s) # # 可选:/etc/chongming.env 中写 APP_WORKERS= 覆盖 worker 数(默认取 # config.toml [production.server].workers,打包版通常为 4)。 # 可选:APP_SERVER=granian|uvicorn|gunicorn 切换 HTTP 服务器(默认 Linux 下 # gunicorn,Windows 下 uvicorn);三者的启动参数同取自 [production.server]。 # 可选:CHONGMING_RPC_LOCAL=0 关闭 inline 插件的进程内直调快路径(默认开启; # 仅影响本进程托管的 inline 副本,external 插件始终走 Zenoh)。 [Unit] Description=Chongming Zenoh Gateway (FastAPI + Zenoh + MQTT) Wants=network-online.target After=network-online.target # 60s 内失败 5 次则放弃(避免配置错误导致崩溃循环) StartLimitIntervalSec=60 StartLimitBurst=5 [Service] Type=simple # 打包应用入口:Nuitka 编译产物,前台运行所选服务器 master(默认 Linux 分支为 # gunicorn,可用 APP_SERVER 切到 granian/uvicorn) ExecStart=/data/chongming/chongming # 所有相对路径(config.toml / config/ / resources/*.mbank / static.svfs / # data/ / logs/ / uploads/)均相对工作目录解析,必须指向安装目录 WorkingDirectory=/data/chongming # 非特权用户运行(HTTP 8000 / MQTT 1883 / Zenoh 7447 等端口均无需 root) User=linaro Group=linaro UMask=0027 # 每机可选覆盖(如 APP_WORKERS),文件不存在时忽略(- 前缀) EnvironmentFile=-/etc/chongming.env Environment=PYTHONUNBUFFERED=1 # ffmpeg 位于非标准路径(AI Box 的 sophon-ffmpeg):覆盖默认 PATH 才能被 # shutil.which / create_subprocess_exec 找到(RTSP 拉流依赖);若 ffmpeg 还依赖 # 私有动态库,再补一条 Environment=LD_LIBRARY_PATH=/opt/sophon/sophon-ffmpeg-latest/lib Environment=PATH=/opt/sophon/sophon-ffmpeg-latest/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 优雅停机:SIGTERM 由服务器 master 排空 worker,等在途请求/告警上传完成 KillSignal=SIGTERM KillMode=control-group TimeoutStopSec=30 # 异常退出自动拉起 Restart=on-failure RestartSec=3 # Zenoh / MQTT / 并发连接放开文件描述符上限 LimitNOFILE=65535 LimitNPROC=65535 # 轻量加固(应用无 setuid/特权端口需求,不影响运行) PrivateTmp=true NoNewPrivileges=true [Install] WantedBy=multi-user.target