非root用户下安装supervisor并使用supervisor和gunicorn部署项目

非root用户下安装supervisor并使用supervisor和gunicorn部署项目


背景:

使用实验室的服务器部署Flask项目的时候,打算使用supervisor+gunicorn来部署,之前按照网上部署Flask项目的教程,其中gunicorn可以使用pip命令

pip install gunicorn

supervisor的安装,直接使用sudo apt-get就完事

sudo apt-get -y install supervisor

然而非root模式下就不行了,sudo是不可能的,这辈子都不可能的,而且默认安装supervisor的文件夹位置普通用户没有写权限,所以也安装不了

非root用户安装supervisor:

第一步:首先使用pip命令安装

注意:一定要看好自己用的哪个python环境,是原环境还是某个虚拟环境
这里我以anaconda的base环境为例安装

pip install supervisor

这个时候supervisor会安装到anaconda所在文件夹下的bin目录下,下图是我服务器的路径
在这里插入图片描述右下角红框框出的三个文件就是我们以后要用到的

当然了如果你pip安装的时候使用的是其他python虚拟环境,你需要到相应的python虚拟环境下的bin目录下面寻找

第二步:生成默认配置文件

执行下面命令

echo_supervisord_conf > 自己指定的绝对路径下/supervisord.conf

例如,我把它生成在我的用户文件夹下的supervisor文件夹(自己建了个supervisor文件夹)下

echo_supervisord_conf > /home/guyu.gy/supervisor/supervisord.conf
第三步:修改supervisord.conf配置文件

你可能会看到配置文件里面很多以分号开头的语句,;代表注释,也就是没有用
在这里插入图片描述下面对这个文件修改以下几个地方
1.
找到[unix_http_server]开头的部分,修改file后面的路径为

file=自己指定的绝对路径下/supervisor.sock

比如我的服务器下指定的就是下图这个样子
在这里插入图片描述2.
找到[supervisord]开头的部分,修改logfile和pidfile后面的路径

logfile=自己指定的绝对路径下/supervisord.log
pidfile=自己指定的绝对路径下/supervisord.pid

比如我的服务器下指定的路径就是下图的样子
在这里插入图片描述
3.
找到[supervisorctl]开头的部分,修改serverurl路径为

serverurl=unix://自己指定的绝对路径下/supervisor.sock

比我指定的绝对路径是

/home/guyu.gy/supervisor/supervisor.sock

那么最终就是下图的样子
在这里插入图片描述

最后,在整个文件的最后添加这么两句
在这里插入图片描述
并在supervisor.conf这个配置文件所在的文件夹下创建一个conf.d文件夹


ok,supervisor算是弄完了,怎么用呢,下面我看如何使用gunicorn部署项目并使用supervisor进行监控

部署项目

接着上面,进入conf.d文件夹
创建配置文件

vim project_name.conf

(这个project_name写你项目的名字)

配置文件内容如下:

[program:project_name]
command=gunicorn启动项目的命令
directory=项目的根目录
user=你linux服务器的用户名
autostart=true
autorestart=true
killasgroup=true
stderr_logfile=自己指定error.log文件存放的绝对地址
stdout_logfile=自己指定out.log文件存放的绝对地址

;如果你的项目需要用显卡,需要指定用哪个显卡加上下面的命令
environment=CUDA_VISIBLE_DEVICES=显卡号

gunicorn命令常用的参数如下

gunicorn -b 监听地址 -w work数量即监听进程数 启动文件:app变量 -t 最大超时时间

下面举个例子:

[program:myproject]
command=/home/guyu.gy/anaconda3/bin/gunicorn -b 127.0.0.1:8080 -w 4 app:app -t 100
directory=/home/guyu.gy/myproject
user=guyu.gy
autostart=true
autorestart=true
killasgroup=true
stderr_logfile=/home/guyu.gy/logs/myproject/error.log
stdout_logfile=/home/guyu.gy/logs/myproject/out.log
environment=CUDA_VISIBLE_DEVICES=1

注意我上面的gunicorn用到了gunicorn所在的绝对地址,它也在你pip安装的相应的python环境的bin目录下,我这样写是以防万一出错,当然你也可以试试直接只写gunicorn


使用supervisor启动项目

现在supervisor安好了,项目的配置文件也写好了,可以开始启动了

进入supervisor所在的文件夹,即python环境的bin目录下,我的是~/anaconda3/bin

1.执行下面命令,打开supervisor
./supervisord -c supervisord.conf文件所在的绝对路径

比如我的是

./supervisord -c /home/guyu.gy/supervisor/supervisord.conf
2.启动项目
./supervisorctl -c supervisord.conf文件所在的绝对路径 reload

比如我的是

./supervisorctl -c /home/guyu.gy/supervisor/supervisord.conf reload

如果配置文件发生了改变也是使用上面的reload命令

如果项目代码发生了改变使用restart命令

./supervisorctl -c supervisord.conf文件所在的绝对路径 retart project_name

注意project_name要和你相应的配置文件名一样

当然还可以使用start project_name, stop project_name, start all, stop all(前面还是一样用supervisorctl命令)

如果你觉着输入这些路径麻烦可以给命令加个别名

<think>嗯,用户现在问的是关于如何安装使用Gunicorn作为WSGI服务器的具体步骤。之前他们刚刚了解了WSGI的基本概念,现在可能想实际应用一下,特别是在部署他们的Python Web应用的时候。首先,我需要确保回答覆盖安装、基本使用、配置选项以及生产环境的最佳实践。 用户可能是刚开始接触部署,可能对命令行不太熟悉,所以步骤要详细。例如,安装部分可能需要说明使用pip安装确保虚拟环境的设置,因为这是Python项目的常见做法。另外,用户可能不知道如何在不同的框架(比如Flask或Django)中使用Gunicorn,需要分别举例说明。 基本使用部分,需要解释命令的各个参数,比如-w指定worker数量,app:app的含义。用户可能对绑定端口监听地址有疑问,所以这部分也要提到。此外,可能还需要介绍如何停止服务,虽然这可能属于进阶内容,但基础用户可能会需要。 配置部分,用户可能需要知道如何通过配置文件来管理选项,而不是每次都输入命令行参数。这里需要给出一个示例配置文件,说明如何使用-c参数来指定。同时,日志管理也很重要,特别是生产环境中,用户可能需要将日志输出到文件而不是控制台。 生产环境部署方面,用户可能不知道反向代理的作用,需要简单解释Nginx的作用,以及如何与Gunicorn配合。还要提到后台运行进程管理工具,比如systemd或Supervisor,但可能需要进一步的学习,所以这里给出基本建议即可。 可能还需要提醒用户,开发服务器(如Flask自带的)不适合生产环境,必须使用Gunicorn或其他WSGI服务器。此外,常见问题如端口冲突、权限问题可能需要提及,但用户如果没有遇到可能暂时不需要深入。 另外,用户可能使用的是不同的操作系统,比如Linux或macOS,而Windows可能不太常见,但Gunicorn官方不支持Windows,这一点需要说明,避免用户走弯路。 最后,确保语言简洁,步骤清晰,示例具体,让用户能够一步步跟着操作。同时,鼓励用户在遇到问题时查阅文档或寻求进一步帮助,以增强他们的信心。</think>好的!以下是 **Gunicorn** 作为 WSGI 服务器的安装使用步骤,从基础到实践逐步说明: --- ### 1. 安装 Gunicorn #### 通过 pip 安装(推荐使用虚拟环境): ```bash # 创建激活虚拟环境(可选) python -m venv myenv source myenv/bin/activate # Linux/macOS myenv\Scripts\activate # Windows # 安装 Gunicorn pip install gunicorn ``` --- ### 2. 基本使用(以 Flask 应用为例) #### 示例项目结构: ```text myapp/ ├── app.py # Flask 应用代码 └── requirements.txt ``` #### 步骤: 1. **编写 Flask 应用**(`app.py`): ```python from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello Gunicorn!" ``` 2. **启动 Gunicorn**: ```bash # 基础命令(默认绑定到 localhost:8000) gunicorn -w 4 app:app # 参数说明: # - `-w 4`:启动 4 个 worker 进程(建议数量为 CPU 核心数*2 +1) # - `app:app`:第一个 `app` 是模块名(app.py),第二个 `app` 是 Flask 实例名 ``` 3. **访问应用**: 打开浏览器访问 `http://localhost:8000`,即可看到响应结果。 --- ### 3. 常用配置选项 #### 命令行参数示例: ```bash # 绑定到指定 IP 端口 gunicorn -b 0.0.0.0:8080 app:app # 设置超时时间(默认 30 秒,适合长任务调整) gunicorn --timeout 120 app:app # 使用异步 worker(需安装额外库,如 gevent) pip install gevent gunicorn -k gevent app:app # 后台运行记录日志(输出到文件) gunicorn -w 4 --daemon --access-logfile access.log --error-logfile error.log app:app ``` #### 配置文件(推荐生产环境使用): 1. **创建配置文件 `gunicorn_config.py`**: ```python # 绑定地址端口 bind = "0.0.0.0:8000" # 工作进程数 workers = 4 # 超时时间 timeout = 30 # 日志配置 accesslog = "access.log" errorlog = "error.log" ``` 2. **通过配置文件启动**: ```bash gunicorn -c gunicorn_config.py app:app ``` --- ### 4. 结合 Django 使用 1. **确保 Django 项目已配置**(如 `myproject/settings.py` 正确)。 2. **启动 Gunicorn**: ```bash # 进入 Django 项目根目录(含 manage.py) gunicorn -w 4 myproject.wsgi:application # `myproject.wsgi` 是 Django 自动生成的 WSGI 模块 ``` --- ### 5. 生产环境部署建议 1. **使用反向代理(如 Nginx)**: - Nginx 处理静态文件、SSL 负载均衡。 - 配置 Nginx 将动态请求转发到 Gunicorn: ```nginx location / { proxy_pass http://localhost:8000; # Gunicorn 监听的地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` 2. **后台运行与进程管理**: - 使用 `systemd` 或 `Supervisor` 管理 Gunicorn 进程,确保崩溃后自动重启。 - 示例 Supervisor 配置: ```ini [program:myapp] command=/path/to/gunicorn -c /path/to/gunicorn_config.py app:app directory=/path/to/project user=your_username autostart=true autorestart=true ``` 3. **安全优化**: - 避免使用 `root` 用户运行 Gunicorn。 - 通过防火墙限制外部访问端口。 --- ### 常见问题 1. **端口冲突**: 若端口被占用,修改 `-b` 参数或终止占用端口的进程。 2. **Windows 兼容性**: Gunicorn 官方不支持 Windows,建议在 Linux/macOS 或 WSL 下使用。 3. **静态文件无法加载**: Gunicorn 不处理静态文件,需通过 Nginx/Apache 或框架的静态文件配置。 --- ### 总结 - **安装**:`pip install gunicorn` + 虚拟环境隔离。 - **启动**:`gunicorn -w N -b IP:PORT 模块名:应用实例`。 - **生产部署**:结合 Nginx + Supervisor,配置日志后台运行。 如果有具体框架(如 FastAPI、Bottle)或部署场景的问题,可以进一步补充说明!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值