赵走x博客
网站访问量:151476
首页
书籍
软件
工具
古诗词
搜索
登录
24、nonlocal
23、Python functools.wraps 深入理解
21、Image.rotate旋转90度图片被截取了
20、python的__get__方法看这一篇就足够了
19、结巴分词(自然语言处理之中文分词器)
18、virtualenv
17、Python string 去掉标点符号 最佳实践
16、python 字符串相似度
15、StringIO和BytesIO
14、基于Python __dict__与dir()的区别详解
13、 set()去重的底层原理
12、顺序表的原理与python中的list类型
11、psutil实现系统监控
10、NSQ
9、utf-8的中文是一个汉字占三个字节长度吗?
8、supervisor+gunicorn部署python web项目
7、socket编程
6、async
5、Python的共享经济
4、Python 内存分配时的小秘密
3、Python中的“特权种族”是什么?
2、装饰器
1、序列化与反序列化
8、supervisor+gunicorn部署python web项目
资源编号:76449
Python
Python 查缺补漏
热度:117
来源:https://blog.csdn.net/qq_37049050/article/details/78500906
# 1、最简单的运行python web的方式 最简单的python web运行方式是使用nohup myCmd &命令运行,nohup表示no hang up,关闭远程登录之后程序不挂起继续执行,&表示后台执行。 对于django,使用命令 ``` nohup python manage.py runserver 0.0.0.0:8000 ``` 对于flask,使用命令 ``` nohup python mine.py ``` # 2、使用supervisor supervisor是用Python语言编的进程管理、监控工具,只适用于Linux。 supervisor功能虽然强大,但常用功能也就那么一点点,实在没有必要对它特别了解。 知道常用配置足矣。 安装supervisor可以采用pip install的方式,但是可能出错(supervisor与python版本的问题)。 supervisor不仅是python包,也是一个应用程序,可以通过sudo apt-get install supervisor命令进行安装,这是最佳实践。 如果一个python工具不是编程调用,那就使用apt-get进行安装 这样安装还有一个好处,可以自动把supervisor设置成一个服务,从而可以开机自启动。 下面介绍与supervisor相关的几个概念: * echo_supervisord_conf命令:打印supervisor常用配置,可以重定向命令将配置输出到文本文件echo_supervisord_conf > haha.conf * supervisord:supervisor的后台守护进程,跟mysqld、ftpd等服务一样,它是一个TCP客户端,监听某个固定端口。 * supervisorctl:command tools,是supervisor控制台,这个控制台可以远程控制服务器上的supervisord,它们之间的通信方式为XML-RPC * supervisorctl常用命令:help查看全部命令 当修改supervisord.conf之后,需要在supervisorctl中使用reload命令重新加载配置 ### supervisord命令加载配置的顺序: ``` supervisord -c supervisord.conf ``` * 如果使用-c命令指定配置文件位置,那么就加载那个文件,否则按如下顺序查找配置文件 * $CWD/supervisord.conf * $CWD/etc/supervisord.conf * /etc/supervisord.conf ### 配置文件最佳实践: 将每一个应用创建一个conf文件,放在/etc/supervisor/conf.d目录下,主配置文件/etc/supervisord.conf中默认包含了conf.d目录下的配置文件。 像这种一个主配置文件,允许自定义从配置文件的方式很常见,很多软件都是这样配置的。 /etc/supervisord.conf主配置文件包含了conf.d/*.conf ``` [include] files = /etc/supervisor/conf.d/*.conf ``` 用supervisor管理gunicorn时,需要将gunicorn的deamon参数置为false。 ``` [program:usercenter] directory = /home/leon/projects/usercenter ; 程序的启动目录 command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = leon ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /data/logs/usercenter_stdout.log ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere ``` 更改完supervisor配置之后,使用 ``` sudo service supervisor restart ``` 命令重启supervisor服务。输入sudo service supervisor命令,按几下tab可以看到更多可用命令。 在supervisorctl中可以start、stop、restart+程序名称来控制这个程序。 修改主配置文件supervisord.conf中的inet_http_server部分可以通过网页方式访问supervisor,监控服务器状态 ### 查看日志 在服务器上,查看日志是唯一能够看到程序运行细节的方式。大部分程序的默认日志都放在/var/log/目录下(像Nginx、supervisor等工具的日志都在这里)。如果配置完supervisor之后,发现没有达到想要的效果,有可能是配置不正确,至于哪里不正确,可以去日志里看一下。 更多配置内容请使用echo_supervisord_conf|more命令慢慢查看吧。 # 3、使用gunicorn gunicorn也是只适用于Linux,不适用于windows。 gunicorn也是采用apt-get方式安装,gunicorn当然也是一个应用,不用管它是用python2开发的还是python3开发的,直接sudo apt-get install肯定好使。 最简单的方式启动django应用: cd到myweb/myweb目录下(myweb是django项目名称),直接运行 ``` gunicorn -b 0.0.0.0:8000 wsgi:application ``` 解释: * -b参数用来绑定监听端口,默认是绑定到localhost,改成0.0.0.0就变成了监听全部主机的端口,这样才能够外网访问。 * wsgi为python文件名,application为文件中的一个变量 ### 将gunicorn后台运行有多种方式: * 使用supervisor管理之,这时gunicorn一定不是守护进程 * 使用nohup gunicorn wsgi:application&不挂起地执行 * 使用gunicorn的--deamon参数,使之作为deamon来运行 * 将gunicorn设置成一个服务 一旦使用了supervisor,就再也没有必要添加更多的服务、守护进程了,用supervisor就足够了。 ### 将一个程序设置成服务,需要如下步骤: 编辑 sudo nano /etc/init/gunicorn.conf ``` description "The gunicorn service" start on runlevel [2345] stop on runlevel [!2345] respawn setuid root setgid www-data env PATH= /var/www/venv/bin chdir /var/www/ exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application ``` 如上,设置好用户、当前路径、全局变量、要执行的命令。 ``` sudo service gunicorn start ``` 就可以将gunicorn作为服务运行了