树莓派上部署 Python 服务并配置 systemd 开机自启最近把一个采集脚本从笔记本迁到了树莓派顺手把部署流程整理了一遍。树莓派常年开机、功耗低用来跑轻量服务确实很合适。本文记录一个最常用的落地方案在树莓派上部署 Python 服务并通过 systemd 配置开机自启。## 1. 环境准备建议先把系统更新到最新避免后续因为依赖版本导致问题bashsudo apt update sudo apt upgrade -ysudo apt install -y python3 python3-venv python3-pip如果你的服务需要访问 GPIO、串口或者摄像头也可以提前把对应权限和驱动准备好。## 2. 创建项目目录我习惯把自己的服务统一放到/opt下面便于后续维护bashsudo mkdir -p /opt/pi-services/sample-appsudo chown -R $USER:$USER /opt/pi-services/sample-appcd /opt/pi-services/sample-app接着创建虚拟环境并安装依赖bashpython3 -m venv .venvsource .venv/bin/activatepip install --upgrade pippip install flask这里用 Flask 起一个最小可运行示例实际项目替换成你自己的依赖即可。## 3. 编写一个最小服务创建app.pypythonfrom flask import Flaskapp Flask(__name__)app.route(/)def index(): return {status: ok, message: raspberry pi service is running}if __name__ __main__: app.run(host0.0.0.0, port5000)本地直接启动测试bashsource .venv/bin/activatepython app.py浏览器访问http://树莓派IP:5000/能看到返回结果就说明基础环境没问题。## 4. 用 systemd 配置开机自启新建服务文件bashsudo nano /etc/systemd/system/sample-app.service写入以下内容ini[Unit]DescriptionSample Python App on Raspberry PiAfternetwork.target[Service]TypesimpleUserpiWorkingDirectory/opt/pi-services/sample-appExecStart/opt/pi-services/sample-app/.venv/bin/python /opt/pi-services/sample-app/app.pyRestartalwaysRestartSec5[Install]WantedBymulti-user.target这里有两个细节值得注意-WorkingDirectory要指向项目根目录-ExecStart最好写虚拟环境里的 Python 绝对路径避免环境变量不一致保存后执行bashsudo systemctl daemon-reloadsudo systemctl enable sample-app.servicesudo systemctl start sample-app.service查看运行状态bashsudo systemctl status sample-app.servicejournalctl -u sample-app.service -f如果配置正确重启树莓派之后服务也会自动拉起。## 5. 实际使用中的几个建议### 日志不要只看标准输出开发阶段直接print没问题但长期运行建议至少接入文件日志或者让 journald 配合日志轮转不然排查问题会比较痛苦。### 服务依赖外设时启动顺序要额外注意如果程序依赖 USB 设备、挂载盘或者摄像头单纯Afternetwork.target可能还不够需要根据实际依赖增加等待条件。### 建议固定 IP 或做局域网域名映射树莓派一旦承担家庭网关、小服务节点、下载器或者监控任务固定地址会省掉很多排障时间。## 6. 小结树莓派跑轻量 Python 服务非常顺手关键是把部署方式标准化。用虚拟环境隔离依赖用 systemd 托管进程后续无论是更新脚本、迁移设备还是排查故障都会轻松很多。如果你后面还要继续挂 Nginx、做反向代理、接入 HTTPS或者把多个服务统一托管我觉得也很值得单独整理一套模板。