flask自带的开环境为单线程,虽然可以开启多线程,但没有对读取目录做权限限制。所以用gunicorn起个应用服务器,再用nginx反向代理配合,搭建网站的前后端多个应用。
说下环境先: 1.ubuntu 17.04
以下步骤windows也是一样的,只是命令行和安装方式会有差异。
第一步 安装pip 先要安装pip,安装方法多样,我这直接apt-get了。
1 sudo apt-get install python-pip
第二步 安装虚拟环境 复杂的Python程序最好隔离在一个虚拟环境中,因为我是在多个平台多个环境作业的,隔离出来也保险些,环境问题往往是最浪费时间的。 方法1: 1 2 $ pip install virtualenv
方法2: 1 sudo apt-get install python-virtualenv
第三步 创建虚拟环境 切换到你的项目文件夹,创建虚拟环境 运行virtualenv命令。这个命令接受一个参数,作为虚拟环境的名字(同样也是它的位置)。
进入虚拟环境:
1 2 source venv/bin/activatepython --version
运行deactivate命令,你就能离开你的virtual environment,现在先别敲退出,我们要在虚拟环境下安装模块,所有的安装模块会在venv中,知道就好。
第四步 安装各种Python库: 1 2 pip install gunicorn pip install flask
检查gunicorn是否能起得来(关于后面的参数不多说了,是flask的对象)。
1 gunicron -w4 -b0.0.0.0:8000 run:app
值得一提的是,安装MysqlDB会有些不一样,当然也可以用其它好安装的mysql管理模块,我个人喜欢用这个而已。 pymysql真香
第五步 安装Nginx: 1 2 sudo apt-get install nginx sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak
修改defult文件,设置反向代理:
1 nano -W /etc/nginx/sites-available/default
文件底部添加如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 upstream my_server { server 127.0.0.1:2170; keepalive 2000; } server { listen 80; server_name 127.0.0.1; client_max_body_size 1024M; location /my/ { proxy_pass http://my_server/; proxy_set_header Host $host :$server_port ; } }
修改nginx配置文件:
1 nano -W /etc/nginx/nginx.conf
底部添加:
第六步 安装 supervisor 这个可以页面管理服务器的平台,看个人爱好了,不装也行,可以直接看下一步。
1 2 3 pip install supervisor echo_supervisord_conf > supervisor.conf vim supervisor.conf
supervisor的基本使用命令
1 2 3 4 5 supervisord -c supervisor.conf 通过配置文件启动supervisor supervisorctl -c supervisor.conf status 察看supervisor的状态 supervisorctl -c supervisor.conf reload 重新载入 配置文件 supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor管理的程序进程 supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程
supervisor.conf配置文件底部添加如下,这个是我的配置,路径地址需酌情更改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [program:run] command =/home/chenjian/worksapce/manager-server/venv/bin/gunicorn -w4 -b0.0.0.0:2170 run:appdirectory=/home/chenjian/worksapce/manager-server/ ; 项目的文件夹路径 startsecs=0 ; 启动时间 stopwaitsecs=0 ; 终止等待时间 autostart=false ; 是否自动启动 autorestart=false ; 是否自动重启 [program:nginx] command =/usr/sbin/nginxstartsecs=0 ; 启动时间 stopwaitsecs=0 ; 终止等待时间 autostart=false ; 是否自动启动 autorestart=false ; 是否自动重启 stopsignal=KILL ; 用来杀死进程的信号 [inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server)) [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket username=user ; should be same as http_username if set password=123 ; should be same as http_password if set ;prompt=mysupervisor ; cmd line prompt (default "supervisor" ) ;history_file=~/.sc_history ; use readline history if available
浏览器打开http://127.0.0.1:9001 就能管理自己的服务了,如果没有安装也可以通过命令行管理。
1 2 supervisord -c supervisor.conf sudo service nginx start