Step1 安装系统环境
Ubuntu服务器选择是阿里云的ECS服务,ECS提供单独的内存\CPU\带宽\存储规格可以选择,并且提供合适的镜像可以安装。安装镜像后通过ssh进行远程管理,配置。配置的自由程度非常高,也适合进行远程的编程和调试,作为编程调试的服务器和测试服务器非常棒。
服务器的环境:
* 确认系统版本
Flask应用的部署是通过uWSGI发布Nginx上运行的。这个结构简单来说Nginx是一个类似apache的提供静态网页的服务器,并不能直接运行和部署python的应用(Flask应用),因此需要uWSGI对Flask应用进行解析和运行,Nginx与uWSGI进行通信并提供Web服务。
创建应用目录在部署之前先在/work下面创建应用目录,并将代码从服务器上同步下来。
mkdir /work/demoapp/ cd /work/demoapp/ git clone git://**** 配置uWSGI在应用目录中创建一个uWSGI的配置文件/work/demoapp/uwsgi_configuration.ini,配置内容如下:
[uwsgi] # 应用目录 base = /work/demoapp/ # 应用名称 app = demoapp # 获取app的python模块名称 module = icetea_server # 在模块中的app名称 callable = app # 如果是使用venv的,使用这个python环境 # home = %(base)/venv pythonpath = %(base) # 用于和nginx通讯的socket文件路径 socket = /var/www/demoapp/icetea_uwsgi.sock # socket文件的权限 chmod-socket = 664 # log文件的路径 logto = /var/log/uwsgi/icetea_uwsgi.log创建上述中涉及到的两个目录,/var/www/demoapp/目录用于存放应用修改的文件,例如此时的socket文件以及其他的临时文件,/var/log/uwsgi存放应用的log文件,这两个目录chown到当前用户,然后在当前用户下,可以通过uWSGI使用此配置文件运行。
sudo mkdir /var/www/demoapp/ sudo chown demo:demo /var/www/demoapp/ sudo mkdir /var/log/uwsgi/ sudo chown demo:demo /var/www/uwsgi uwsgi --ini /var/www/demoapp/demoapp_uwsgi.ini多数情况下,uWSGI应该以系统服务运行。并且uWSGI提供了emperor模式管理多个uWSGI的应用。先切换到root模式创建一个服务配置文件sudo touch /etc/init.d/uwsgi.conf,使用emperor模式管理/etc/uwsgi/vassals 下面的uwsgi的app配置文件。
description "uWSGI" start on runlevel [2345] stop on runlevel [06] respawn env UWSGI=/var/www/demoapp/venv/bin/uwsgi env LOGTO=/var/log/uwsgi/emperor.log exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO同样在root模式下,创建/etc/uwsgi/vassals目录。并将之前demoapp的uwsgi配置文件链接到此文件目录下。
sudo mkdir /etc/uwsgi && sudo mkdir /etc/uwsgi/vassals sudo ln -s /var/www/demoapp/demoapp_uwsgi.ini /etc/uwsgi/vassals然后可以启动uWSGI服务sudo service uwsgi start,由于此时uwsgi服务的运行用户是www-data,因此将之前创建的存放socket的文件目录以及存放log的文件目录的用户更改为www-data。
sudo chown -R www-data:www-data /var/www/demoapp/ sudo chown -R www-data:www-data /var/log/uwsgi/ 配置Nginx配置好的并已经成功启动的uwsgi服务,可以解析和运行flask应用,现在需要配置nginx和uwsgi服务通信将Flask应用部署为web服务。首先删除nginx的默认网站。
sudo rm /etc/nginx/sites-enabled/default如果安装之前版本的nginx,默认网站可能存在于/etc/nginx/conf.d文件夹中
在应用目录中为应用创建nginx的配置文件。
server { listen 80; server_name localhost; charset utf-8; client_max_body_size 75M; location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock; } }连接到/etc/nginx/conf.d/文件夹中,并重启nginx服务。
sudo ln -s /var/www/demoapp/demoapp_nginx.conf /etc/nginx/conf.d/ sudo /etc/init.d/nginx restartOK, 配置成功。
更多参考
Nginx+uWSGI+Supervisor在Ubuntu上部署Flask应用
Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境
Nginx+uWSGI+Django+Python 应用架构部署
Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django