前言
内部需要每天出一版数据,而每天都需要我手动打包压缩,然后上传到公司内部的文件共享服务器上,然后我再把共享文件的地址分发出去,贼TM的烦,而且作为一个IT人员感觉这种做法也贼TM的傻逼,所以就花了几天时间学习了一下flask,并完成了一个非常非常简单的系统,用来分发数据,下面主要写一下flask项目的部署问题。
环境
- 服务器环境:Centos
- Python:2.7
具体安装过程
Flask
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
先安装virtualenv,这个软件可以将Python环境虚拟出来,在多个工程中使用不同的Python环境,可以很好的隔离各种环境问题
pip install virtualenv
安装完成之后,在所需要部署的工程的根目录下(即manage.py所在目录),执行virtualenv venv
,即可在当前目录下发现一个venv/目录
使用source venv/bin/activate
命令来启用虚拟环境,启用后你当前的路径名的前面会有一个(venv)
然后我们就可以在这里安装本项目相关的Python模块了
安装Flaskpip install flask
然后就是pip install -r flaskrelated.txt
,通过这个清单文件来统一安装所需的依赖uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
执行
pip install uwsgi
进行安装
在待部署的工程的根目录下新建一个uwsgi的配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等)
配置文件的内容如下:[uwsgi] # uwsgi 启动时所使用的地址与端口 socket = 127.0.0.1:8001 # 指向网站目录 chdir = /data/python_web_project/sfa_data_distribution/ # python 启动程序文件 wsgi-file = manage.py # python 程序内用以启动的 application 变量名 callable = app # 处理器数 processes = 4 # 线程数 threads = 2 #状态检测地址 stats = 127.0.0.1:9191 # 当目标文件夹中有文件内容发生变动,自动重启uwsgi touch-reload = /data/python_web_project/sfa_data_distribution/app/
chdir是指向你的工程的根目录的,被网上一个教程坑了(也可能是我自己眼瞎,尴尬尴尬),把这里填写成工程文件所在的目录了(即:/data/python_web_project/),然后执行uwsgi的时候一直报”打开manage.py文件失败”的错。最骚的是touch-reload这个配置,配置这个选项后,当这个选项指向的目录文件有变动时,就会自动重启uwsgi以更新你的flask项目,类似热更。
最后执行uwsgi uwsgiconfig.ini
来启动uwsgiNginx
Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
由于我是在centos下部署,所以安装Nginx就直接执行
yum install nginx
就可以了
配置Nginx,在centos下使用yum安装的,直接到/etc/nginx/
目录下,然后有一个 nginx.conf文件,这个就是当前的配 置文件,修改部分如下:server { listen 80 default_server; listen [::]:80 default_server; server_name 192.168.14.62; #此处是你的公网IP,我这里是内部局域网的IP地址 root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8001; #这里要和你的uwsgiconfig.ini配置文件中的socket字段配置一致 uwsgi_param UWSGI_PYHOME /data/python_web_project/sfa_data_distribution/venv; #工程的虚拟环境目录 uwsgi_param UWSGI_CHDIR /data/python_web_project/sfa_data_distribution; #工程的根目录 uwsgi_param UWSGI_SCRIPT manage:app; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
需要我们配置的几个地方,我已经注释出来了,大家可以根据自己的需要,进行修改配置。
最后启动nginx就可以啦:nginx
在浏览器里访问以下远程主机试试: