阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

147次阅读
没有评论

共计 3407 个字符,预计需要花费 9 分钟才能阅读完成。

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, 配置成功。

更多参考

Nginx+uWSGI+Supervisor 在 Ubuntu 上部署 Flask 应用  http://www.linuxidc.com/Linux/2016-07/133064.htm

Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Nginx+uWSGI+Django+Python 应用架构部署  http://www.linuxidc.com/Linux/2015-10/124183.htm

Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django  http://www.linuxidc.com/Linux/2015-04/116397.htm

Flask+uWSGI+Nginx+Ubuntu 部署教程 http://www.linuxidc.com/Linux/2016-06/132690.htm

Ubuntu 16.04 下安装部署 Nginx+uWSGI+Django1.9.7  http://www.linuxidc.com/Linux/2016-07/133484.htm

Nginx+uWSGI+Django 在 Ubuntu 下的部署  http://www.linuxidc.com/Linux/2016-07/133490.htm

Linux 上利用 Nginx 代理 uWSGI 处理 Flask Web 应用  http://www.linuxidc.com/Linux/2016-08/134164.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135364.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3407字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中