会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 centos 启动uwsgi!
当前位置:首页 > 综合 > centos 启动uwsgi 正文

centos 启动uwsgi

时间:2026-10-17 05:15:53 来源:烟消火灭网 作者:热点 阅读:730次

CentOS 上跑 uwsgi,启动最容易翻车的启动地方不是 uwsgi 本身,而是启动 systemd 和权限。我见过太多人用命令行 `uwsgi --ini xxx.ini` 跑得好好的启动,一写成 systemd service 就起不来,启动日志里全是启动 permission denied 或者 address already in use。根本原因就一个:命令行跑的启动时候用的是你的登录用户和环境变量,systemd 跑的启动时候用的是它自己那套。

先说安装。启动CentOS 7 和 8 的启动源里都有 uwsgi,直接 yum install uwsgi uwsgi-plugin-python3 就行。启动但如果你用的启动是 Python 虚拟环境,比如 venv 或者 conda,启动系统包管理器装的启动 uwsgi 是链接到系统 Python 的,加载不了你 venv 里的启动模块。这时候得用 pip 装:pip install uwsgi。装完用 which uwsgi 确认路径,通常在 /usr/local/bin/uwsgi 或者 venv 的 bin 目录下。这个路径后面写 service 文件的时候要用绝对路径,别偷懒写相对路径。

配置文件我习惯放 /etc/uwsgi.d/ 下面,叫 myapp.ini。内容大概长这样:

[uwsgi] socket = 127.0.0.1:3031 chdir = /var/www/myapp wsgi-file = myapp/wsgi.py module = myapp.wsgi:application master = true processes = 4 threads = 2 vacuum = true pidfile = /run/uwsgi/myapp.pid daemonize = /var/log/uwsgi/myapp.log 

注意 socket 和 http 的区别。用 nginx 反代就写 socket,直接暴露给浏览器就写 http。生产环境没人直接暴露 uwsgi,所以 socket 是标配。还有 chdir 一定要写,不然 uwsgi 找不到你的项目路径,import 模块直接报错。

然后是 systemd。在 /etc/systemd/system/ 下建一个 uwsgi-myapp.service:

[Unit] Description=uWSGI instance for myapp After=network.target [Service] User=nginx Group=nginx WorkingDirectory=/var/www/myapp ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi.d/myapp.ini Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all [Install] WantedBy=multi-user.target 

这里有几个坑。第一,User 和 Group 要跟你的项目目录权限匹配。如果你用 nginx 反代,通常让 uwsgi 以 nginx 用户跑,省得 socket 文件权限打架。第二,Type=notify 需要 uwsgi 编译时带了 systemd 支持,不确定的话就改成 Type=simple,虽然不够优雅但能跑。第三,pidfile 和 daemonize 在 systemd 模式下其实可以去掉,systemd 自己管进程和日志,写 daemonize 反而会让 systemd 以为进程退出了。

启动之前先 systemctl daemon-reload,然后 systemctl start uwsgi-myapp。如果起不来,journalctl -u uwsgi-myapp -f 看日志。最常见的报错是 bind(): Permission denied,那是 socket 端口小于 1024 或者目录权限不对。还有 unable to load app,八成是 chdir 或者 Python 路径没配对。

我自己的习惯是先在命令行用 uwsgi --ini /etc/uwsgi.d/myapp.ini 跑一遍,确认配置本身没问题,再去折腾 systemd。这样能把问题范围缩小——到底是 uwsgi 配置错了,还是 systemd 环境跟命令行不一样。省得两头猜。

最后提一嘴 nginx 那边的配置。uwsgi_pass 指向 127.0.0.1:3031 就行,记得加 include uwsgi_params;。如果 uwsgi 用的是 unix socket,比如 /run/uwsgi/myapp.sock,那 nginx 的 user 要有权限读写这个 sock 文件,不然就是 502。

(责任编辑:百科)

相关内容
  • 宝塔查看账号密码命令
  • 火绒应用商店
  • 苍穹DDOS压力测试页端源码
  • 该网站可能包含违法或违规内容根据相关
  • 静态网页有哪些
  • 防御软件
  • 武汉网站域名购买
  • 常用框架
推荐内容
  • 网站弱口令
  • 奥尔滨批号怎么看
  • 数据挖掘与数据分析
  • 渗透高度比试验原始记录表带数据
  • php防sql注入代码
  • 俄罗斯电影渗透在线看