systemd启动Django服务显示运行但8000端口连接被拒绝问题求助
排查方向与解决方案
- 先验证端口是否正常监听
执行以下命令查看8000端口的绑定状态:
ss -tulnp | grep :8000
如果没有返回对应python进程的监听记录,说明Django服务实际没有成功绑定端口,需要进一步排查启动报错。
2. 手动执行启动命令验证
直接在终端运行服务启动命令,查看实时输出是否有报错:
cd /mnt/services/backendapi sudo /usr/bin/python3 manage.py runserver 0.0.0.0:8000
启动后再开一个终端执行curl测试,如果手动运行可以正常访问,说明问题出在systemd服务配置上;如果手动运行也无法访问,就是Django项目本身的问题。
3. 开启完整日志排查错误
把systemd服务配置里的日志输出注释打开,修改为以下配置:
[Unit] Description=API service [Service] User=root WorkingDirectory=/mnt/services/backendapi ExecStart=/usr/bin/python3 /mnt/services/backendapi/manage.py runserver 0.0.0.0:8000 Restart=always StandardOutput=append:/var/log/api.log StandardError=append:/var/log/api.log [Install] WantedBy=multi-user.target
修改后执行sudo systemctl daemon-reload && sudo systemctl restart api,之后查看/var/log/api.log里的具体报错,大概率能看到端口绑定失败、依赖缺失、Django配置错误之类的关键信息。
4. 常见错误检查
- 检查Django的
settings.py里ALLOWED_HOSTS配置,确保添加了127.0.0.1、localhost和实例的内网IP - 测试时可以替换localhost为127.0.0.1访问,避免本地解析异常:
curl http://127.0.0.1:8000/apis/v1/account_1/insights - 确认系统Python3环境已经安装了项目依赖的所有包,包括Django:如果你的项目用了虚拟环境,需要把ExecStart的Python路径替换为虚拟环境下的Python路径,不能直接用系统的/usr/bin/python3
- 检查系统防火墙/SELinux规则,确认没有拦截8000端口的本地访问
注意:Django自带的runserver是开发用服务器,性能和安全性都不满足生产要求,生产环境建议替换为Gunicorn/uWSGI + Nginx的部署方案。
内容的提问来源于stack exchange,提问作者harshit
相关产品推荐
相关产品推荐

