使用PM2+nginx部署python项目的方法示例


Posted in Python onNovember 07, 2018

之前面我们使用uwsgi部署项目比较繁琐,本章节介绍使用pm2+nginx一键部署django项目

PM2的主要特性:

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

一、安装PM2

1、安装nodejs

sudo apt-get install -y nodejs

2、安装pm2

sudo npm install pm2 -g

二、使用PM2部署django项目

1、在django的根目录下创建一个start.sh文件

python manage.py runserver 0.0.0.0:9000

2、使用pm2启动本文件

pm2 start start.sh

3、查看服务启动情况pm2 list

(django_env) root@iZ941w016mwZ:/etc/nginx# pm2 list
┌───────┬────┬──────┬────────┬────────┬─────┬────────┬──────────┐
│ Name │ id │ mode │ status │ ↺   │ cpu │ memory │
├───────┼────┼──────┼────────┼────────┼─────┼────────┼──────────┤
│ start │ 0 │ N/A │ fork  │ online │ 690 │ 0%   │ 2.7 MB  │
└───────┴────┴──────┴────────┴────────┴─────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app
(django_env) root@iZ941w016mwZ:/etc/nginx#

4、客户端连接ip地址:端口号(9000)

三、结合nginx设置代理到9000端口

1、先根据之前的方法安装好nginx

2、进入nginx的包文件(/etc/nginx)下修改nginx.conf

...
server {
  listen 80;
  server_name www.yst168.cn yst168.cn http://www.yst168.cn; # 这里是你的域名
  location / {
   proxy_pass http://localhost:9000; # 代理到你的本地项目
  }
}
...

3、重启nginx服务器

sudo service nginx restart

四、关于pm2的基本命令补充

  • pm2 start app.js # 启动app.js应用程序
  • pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例
  • pm2 start app.js --name=“api” # 启动应用程序并命名为 “api”
  • pm2 start app.js --watch # 当文件变化时自动重启应用
  • pm2 start script.sh # 启动 bash 脚本
  • pm2 list # 列表 PM2 启动的所有的应用程序
  • pm2 show [app-name] # 显示应用程序的所有信息
  • pm2 logs # 显示所有应用程序的日志
  • pm2 logs [app-name] # 显示指定应用程序的日志
  • pm2 flush
  • pm2 stop all # 停止所有的应用程序
  • pm2 stop 0 # 停止 id为 0的指定应用程序
  • pm2 restart all # 重启所有应用
  • pm2 reload all # 重启 cluster mode下的所有应用
  • pm2 gracefulReload all # Graceful reload all apps in cluster mode
  • pm2 delete all # 关闭并删除所有应用
  • pm2 delete 0 # 删除指定应用 id 0
  • pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
  • pm2 reset [app-name] # 重置重启数量
  • pm2 startup # 创建开机自启动命令
  • pm2 save # 保存当前应用列表
  • pm2 resurrect # 重新加载保存的应用列表
  • pm2 update # Save processes, kill PM2 and restore processes
  • pm2 generate # Generate a sample json configuration file
  • pm2 start app.js --node-args="?max-old-space-size=1024"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 用户登录验证的小例子
Mar 06 Python
python数据结构之二叉树的统计与转换实例
Apr 29 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
PYTHON基础-时间日期处理小结
May 05 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
Python编程flask使用页面模版的方法
Dec 28 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python项目打包成二进制的方法
Dec 30 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 #Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 #Python
python 返回列表中某个值的索引方法
Nov 07 #Python
pandas 根据列的值选取所有行的示例
Nov 07 #Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 #Python
pandas筛选某列出现编码错误的解决方法
Nov 07 #Python
python绘制中国大陆人口热力图
Nov 07 #Python
You might like
PHP积分兑换接口实例
2015/02/09 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
vue.js中$set与数组更新方法
2018/03/08 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
对Python中range()函数和list的比较
2018/04/19 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
物理系毕业生自荐信
2013/11/01 职场文书
幼儿教师培训感言
2014/03/08 职场文书
导师工作推荐信范文
2014/05/17 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android