[Unit] Description=麦动KTV 自建歌曲源服务器(服务端口 + 管理端口) Documentation=file:/opt/ktv-source/README.md After=network-online.target Wants=network-online.target [Service] Type=simple User=ktv Group=ktv WorkingDirectory=/opt/ktv-source Environment=PYTHONUNBUFFERED=1 Environment=KTV_CONFIG=/etc/ktv-source/server-config.json ExecStart=/usr/bin/python3 /opt/ktv-source/run.py --config /etc/ktv-source/server-config.json # 管理端口与服务端口由同一进程监听;需要彻底隔离时拆成两个单元(用 --no-download 只跑服务) Restart=always RestartSec=3 TimeoutStopSec=20 KillSignal=SIGTERM # ⚠️ 数据目录布局两种(本部署用的是第二种): # A) 数据在 /var/lib/ktv-source → User=ktv + ProtectHome=yes # B) 数据在 /home//… (尤其 FUSE/云盘/网络盘)→ 必须 User=<该目录属主> + ProtectHome=no, # 并把 db_journal_mode 设为 DELETE(WAL 需要 mmap -shm,这类文件系统上会 SIGBUS 打死进程) # 安全加固(Debian 13 / systemd 256+) NoNewPrivileges=true PrivateTmp=true # true 只保护 /usr 与 /boot;full 会把 /etc 变只读,导致管理界面无法保存 server-config.json ProtectSystem=true ProtectHome=true ReadWritePaths=/var/lib/ktv-source /etc/ktv-source LimitNOFILE=65535 [Install] WantedBy=multi-user.target