前面我们已安装好了python服务器运行所需要的相关软件,而最重要最繁琐的就是参数配置,写这篇就踩了好多坑,花了好多时间,遇到了各种各样的问题。好了费话少说,直接进入本篇话题。
PS:本人不是专业的运维,很多linux服务器的问题都是一知半解,只能根据自己的研究弄弄单机版的python web服务器,而对于多服务器自动化同步的部署、服务器的监控、Linux服务器的安全、服务器的调优(很多服务安装不是重点,能将各种参数运用配置到洽到好处才是难点),大家最好找专业的运维工程师小戴同学问问,问我的话我也不一定能回答的出来。再一次感谢小戴同学的用心指导,让我学会了很多服务器运维方面的知识,才有这篇文章。(想学python与自动化运维的可以上他的博客http://www.linuxyw.com/)
目录:
一、让你的python代码跑起来
二、使用supervisord来管理python进程
三、将nginx与supervisord关联起来(使用代理方式,非uwsgi)
四、使用nginx+supervisord+uwsgi来管理python web服务
五、使用svn来管理python的自动化发布
六、postgresql配置
七、pgbouncer配置
八、Redis配置
九、设置各服务开机启动功能
一、让你的python代码跑起来
既然我们要配置的是python服务器,那首先我们要做的第一步是,放上我们的python代码,看看能否运行并访问
先上代码,将下面代码粘贴到记事本上并存储为main.py(这个文名可以随便起,我存储的格式为ANSI格式,即记事本默认的格式)
#!/usr/bin/evn python
# coding=utf-8
from bottle import default_app, get, run
from beaker.middleware import SessionMiddleware
@get('/index/')
def callback():
return 'Hello World!'
if __name__ == '__main__':
app_argv = SessionMiddleware(default_app())
run(app=app_argv, host='0.0.0.0', port=8088, debug=True, reloader=True)
else:
application = SessionMiddleware(default_app())
我们为了方便以后对服务器的管理,需要创建一个指定的文件夹(如果有挂载新硬盘的,可以将这个文件夹绑定到该目录),将日志、数据库、web站、后台服务、svn等内容统一放到指定文件夹下面
首先在根目录下创建一个data文件夹(后面的各种日志、web站点等全都放在这里统一管理,以后我们要查找时就很方便了)
输入命令:mkdir /data
创建python web存储目录:mkdir /data/www
创建测试目录:mkdir /data/www/test
然后使用SSH的上传工具,上传刚刚创建好的main.py文件到www目录下的test文件夹
后面的上传自书用这个上传工具处理(也可以直接使用vi进行编辑)不再截图
然后我们运行:python /data/www/test/main.py (或进入test目录运行:python main.py)
运行后会显示ImportError: No module named bottle错误,这是因为我们的程序调用了bottle包,而我们未安装这个依赖包,需要安装后程序才能正常运行,以后在使用python中碰到这种情况,直接输入pip install xxx即可
安装bottle包:pip install bottle
安装beaker包:pip install beaker
然后再次输入:python main.py
就会发现python web服务运行起来了
然后关闭防火墙:systemctl stop firewalld (如果浏览器访问不了,可以运行这个命令来关闭防火墙)
打开浏览器输入:http://192.168.0.128:8088/index/ 就可以看到Hello World!了
为了方便后面的测试,我们按Ctrl+C,关闭刚才python启动的main.py服务
二、使用supervisord来管理python进程
supervisord默认配置文件存放路径是/etc/目录下面,安装完成后配置文件是不存在的,需要使用命令生成或我们自己放一个进去,我们先配置一个简单的不使用uwsgi的配置文件
文件名称:supervisord.conf (我存储的格式为ANSI格式,即记事本默认的格式)
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/data/logs/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=10MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=2 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[program:test]
command=python /data/www/test/main.py ; supervisord将要执行的运行python服务的命令
directory=/data/www/test
stdout_logfile=/data/logs/super