我将为您提供一份“使用PM2+nginx部署python项目的方法示例”的完整攻略,其中包含了详细的步骤说明和两个示例。
前置条件
在开始前,请确保您的环境已经安装好了以下软件:
- Node.js
- PM2
- Nginx
同时,您也需要一份 Python 项目代码。
步骤一:安装配置PM2
- 在命令行中执行以下命令安装 PM2:
npm install pm2 -g
-
确认您的 Python 项目代码包含requirements.txt文件,且其中包含所依赖的 Python模块。
-
配置一个 PM2 进程来运行您的项目,在命令行中执行以下命令:
pm2 start path/to/your/python/file.py --name your-app-name --interpreter /path/to/virtualenv/bin/python
其中,path/to/your/python/file.py
表示您 Python 项目的入口文件, your-app-name
是您的应用名称,/path/to/virtualenv/bin/python
是您 Python 环境下的虚拟环境路径。
此时您的 Python 项目已经运行在PM2管理的进程中。您可以使用以下命令查看和启动您的 PM2 进程:
# 查看所有已启动的 PM2 进程
pm2 list
# 启动已经被停止的进程
pm2 start your-app-name
# 关闭进程
pm2 stop your-app-name
步骤二:使用Nginx反向代理
现在您的 Python 项目已经可以通过 PM2 进行管理,但是您还需要一个服务器来将请求转发到这个进程中。这个时候,可以使用 Nginx 来实现反向代理。
- 配置 Nginx,使其监听您的应用:
在 Nginx 配置文件的 http
块中增加以下内容:
# /etc/nginx/nginx.conf
http {
# ...
upstream your-app-name {
server 127.0.0.1:8080; # 这里的端口号要与PM2进程中的端口号一致
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://your-app-name;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
这里的 upstream
是一个 Nginx 模块,用来定义上游服务器列表。location
表示请求匹配到 /
路径时将请求转发给上游服务器。
- 重启 Nginx 使其加载配置文件。
sudo systemctl restart nginx
现在,您可以通过访问 your-domain.com
来访问您的 Python 应用。如果这个应用出现异常或崩溃,PM2 将会自动重启该进程。
示例1:Django应用的部署
以下是在非Docker环境中,使用PM2和Nginx部署Django项目的示例:
- 在项目根目录下创建Python虚拟环境
python3 -m venv env
- 进入虚拟环境
source env/bin/activate
- 安装Django到虚拟环境
pip install Django gunicorn
- 生成静态文件
python manage.py collectstatic
- 安装配置PM2
pm2 start gunicorn mysite.wsgi --name your-app-name --interpreter path/to/virtualenv/bin/python --cwd path/to/mysite
其中,mysite
是项目的根目录,your-app-name
是您的应用名称。
- 使用Nginx反向代理
upstream your-app-name {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://your-app-name;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
gunicorn
会启动一个多进程的 Django 服务, 监听本机的 8000 端口。反向代理的时候我们将流量导向到 8000 端口即可。
- 重启Nginx,使其加载新的配置文件。
sudo systemctl restart nginx
- 现在,您可以通过访问
your-domain.com
来访问您的Django应用了。
示例2:Flask应用的部署
以下是在非Docker环境中,使用PM2和Nginx部署Flask项目的示例:
- 在项目根目录下创建Python虚拟环境
python3 -m venv env
- 进入虚拟环境
source env/bin/activate
- 安装Flask到虚拟环境
pip install Flask gunicorn
- 安装配置PM2
pm2 start gunicorn app:app --name your-app-name --interpreter path/to/virtualenv/bin/python --cwd path/to/project
其中,app
是项目的入口文件,app
是 Flask 应用对象的名称,your-app-name
是您的应用名称。
- 使用Nginx反向代理
upstream your-app-name {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://your-app-name;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
gunicorn
会启动一个多进程的 Flask 服务, 监听本机的 8000 端口。反向代理的时候我们将流量导向到 8000 端口即可。
- 重启Nginx,使其加载新的配置文件。
sudo systemctl restart nginx
- 现在,您可以通过访问
your-domain.com
来访问您的Flask应用了。
到这里,使用PM2+nginx部署python项目的方法示例就完整地讲解完毕。如果您有任何问题,或遇到了无法解决的问题,可以随时在留言区提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用PM2+nginx部署python项目的方法示例 - Python技术站