首页 > 代码库 > Flask+Nginx+uWSGI在Ubuntu服务器上的配置

Flask+Nginx+uWSGI在Ubuntu服务器上的配置

Flask+Nginx+uWSGI在Ubuntu服务器上的配置

Step1 安装系统环境

Ubuntu服务器选择是阿里云的ECS服务,ECS提供单独的内存\CPU\带宽\存储规格可以选择,并且提供合适的镜像可以安装。安装镜像后通过ssh进行远程管理,配置。配置的自由程度非常高,也适合进行远程的编程和调试,作为编程调试的服务器和测试服务器非常棒。
服务器的环境:
* 确认系统版本

cat /proc/version
Linux version 3.13.0-95-generic (buildd@lgw01-58) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #142-Ubuntu SMP Fri Aug 12 17:00:09 UTC 2016
  • 安装必要的软件

    apt-get install python3 python3-dev build-essential mysql nginx
    pip install uwsgi

Step2 部署运行环境

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 restart

OK, 配置成功。

Flask+Nginx+uWSGI在Ubuntu服务器上的配置