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服务器上的配置的更多相关文章

  1. 基于Centos7+Flask+Nginx+uWSGI+Python3的服务器网页搭建教程

    之前完成了贴吧签到系统的搭建,笔者想将这个功能分享给更多人使用,所以尝试搭建了一个网页,一路遇到了很多问题,最终解决了,记录下过程分享给大家 首先安装 uWSGI ,和 Nginx 配套使用,具体用途 ...

  2. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  3. Nginx+uwsgi+supervisor+Ubuntu+flask

    Nginx+uwsgi+supervisor+Ubuntu+flask Nginx+uwsgi+supervisor在Ubuntu上部署flask应用 网上找了许多讲关于Flask应用部署的文章几乎都 ...

  4. 在ubuntu服务器上安装tomcat 9

    前提条件: 确保ubuntu服务器上 已经安装 java 8 或更高版本,安装java8可以参考我的另一篇博文 通过 ppa 在ubuntu server 上安装java 8 java -versio ...

  5. 如何将web项目部署到Ubuntu服务器上

    情景回顾: 前几天在下本着人道主义原则帮我老师的一个朋友做了个小网页,(啥人道不人道的,主要是给钱了),做完之后本来是想偷懒直接把网页扔给他自己部署去吧,结果让我帮忙部署一下,得,偷懒也偷不成了,搞吧 ...

  6. Ubuntu服务器上相关软件或应用时常打不开的问题

    于接触linux系统时间不就,所以在操作上难免会出现失误,以下两个问题就是近期经常出现的问题,具体如下: 1.ubuntu服务器上的浏览器时常打不开. 2.安装的pycharm和系统自带的pychar ...

  7. 在阿里云的ubuntu服务器上安装xampp时出现unable to realloc unable to realloc 8380000 bytes错误

    在阿里云的ubuntu服务器上安装xampp时出现unable to realloc unable to realloc 8380000 bytes错误 解决:增加Swap空间(阿里云缺省没有分配任何 ...

  8. ubuntu服务器上配置tomcat

    前言 嗯,最近想在自己的腾讯云服务器上跑个项目玩玩,由于服务器是重装的系统,所以,只能自己手动装tomcat. 不过,tomcat是基于java的,必须又java环境tomcat才能够使用,因此首先要 ...

  9. ubuntu服务器上用Nginx和Uwsgi部署django项目

    开发环境:ubuntu系统,python3环境 django项目目录: fast_foot 为项目根目录,app为项目应用 现在,我们登陆远程服务器 安装Nginx 安装好了,我们看一下nginx的配 ...

随机推荐

  1. 移动端自动化环境搭建-stuptools和pip的安装

    安装stuptools和pip A.安装依赖 setuptools 和 pip 并非必须安装的两个包,但安装之后,后续再安装 Python 的库将变得非常简单. B.安装过程

  2. WIn7系统下 打开.exe程序出现已停止工作关闭程序之解决办法

    新装WIN7系统出现  .NET组建没有安装  可到官网下载安装 NETFx4.0 运行MVB 上位机SIM.EXE出现应用程序已停止工作问题 解决办法: 需关闭WIN7 DEP  如下 开始-运行( ...

  3. 两个shell脚本

    脚本1停止lampp #!/bin/bash #set -xv 开启调试模式? count=`ps -ef|grep lampp|grep -v "grep"|wc -l`  # ...

  4. flume log4j配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.依赖jar包导入,通过maven管理,pom文件增加如下配置: <!-- log4j输出日志到flume的appender依赖包 --& ...

  5. oracle 客户端单独配置

    本文目的是在CentOS 5.3上安装Oracle 11.2 instant client来访问远端的Oracle 10.2数据库,笔者测试通过,应该也适用于Redhat Linux 5.x     ...

  6. 珍惜每一滴水(kbmmw 中的内存调试)

    作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...

  7. BeanUtils.populate的作用

    它是在org.apache.commons.beanutils.BeanUtils包中的一个方法. 方法的作用:将一些 key-value 的值(例如 hashmap)映射到 bean 中的属性.   ...

  8. jQuery MiniUI Demo

    http://www.miniui.com/demo/#src=datagrid/datagrid.html

  9. c# 实现 java 的 System.currentTimeMillis() 值

    本文地址:http://www.cnblogs.com/jying/p/3875331.html 以下一句即可实现 java 中的 System.currentTimeMillis() 值 , , , ...

  10. Office 365 系列五 -------- Imap邮箱迁移步骤

    当客户购买了我们的Office 365之后,第一个功能必然是会用我们的企业邮箱,如果企业之前是用 263.腾讯.网易等的邮件厂商的话,必然会涉及到邮件的迁移, 其实说到邮箱迁移,我们办法很多,如果人数 ...