一、介绍

  最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。

二、条件

1)         环境要求

  • Server OS:最小化安装 Centos 6.8
  • Nginx :反向代理
  • Python2.6~2.7:开发语言
  • Flask/uWSGI:框架
  • Pip:python包管理工具
  • iptables&selinux:开放用到的端口,关闭selinux。

2)         安装必备的开发工具以及环境

更新系统:

[root@hcloud ~]# yum update -y
[root@hcloud ~]# yum groupinstall "Development tools" -y

更新完成后,记得重启系统,然后安装工具:

[root@hcloud ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y

[root@hcloud ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libxml2  libxml2-devel  python-setuptools  zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake
-y

3)         安装python 包管理工具-pip

[root@hcloud ~]# wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py

或者参考此网站

4)         安装uWSGI与Flask

下载软件

[root@hcloud ~]# mkdir soft
[root@hcloud ~]# cd soft
[root@hcloud soft]# wget https://pypi.python.org/packages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz
[root@hcloud soft]# wget https://pypi.python.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz

如果下载该软件比较慢,可以在/etc/reslov.conf dns中添加一个8.8.8.8 ,很快的哦。

安装软件(开发要求固定版本,如果不介意版本的话,可以直接使用pip install packge 即可安装,相当于linux中的yum)

[root@hcloud soft]# tar -xf Flask-0.10..tar.gz
[root@hcloud ~]# cd Flask-0.10.
[root@hcloud Flask-0.10.]# python setup.py install [root@hcloud soft]# tar -xf uwsgi-2.0..tar.gz
[root@hcloud soft]# cd uwsgi-2.0.
[root@hcloud uwsgi-2.0.]# python setup.py install

5)         创建一个测试应用

创建一个Web应用程序存放的文件夹

[root@hcloud ~]# mkdir -pv /usr/local/webtest
[root@hcloud ~]# cd /usr/local/webtest

创建一个python 脚本,内容如下:

[root@hcloud webtest]# cat myproject.py
from flask import Flask
application = Flask(__name__) @application.route("/")
def hello():
return "<h1 style='color:blue'>Hello Flask!</h1>" if __name__ == "__main__":
application.run(host='0.0.0.0')

创建WSGI入口点文件,名字为:wsgi.py,内容如下

[root@hcloud webtest]# cat wsgi.py
from myproject import application if __name__ == "__main__":
application.run()

6)         配置uWSGI服务器网关服务运行方式,运行端口等。

上述两个python脚本文件创建完成后,uwsgi命令启动,运行在8000端口上,指定协议http,运行时会出现一些警告,暂时可以忽略,是因为当前是root账户运行的uwsgi,后面从配置文件启动时会配置普通用户nginx即可。

[root@hcloud webtest]# uwsgi --socket 0.0.0.0: --protocol=http -w wsgi
验证下,看下监听端口
[root@hcloud webtest]# netstat -aultnp | grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN /uwsgi
tcp 192.168.30.58: 192.168.30.65: TIME_WAIT -

可以打开浏览器访问测试一下:http://192.168.30.58:8000

7)         创建uWSGI配置文件

以.ini格式为uwsgi启动配置文件(还有xml,json,等多种格式),这样就不用在命令行输入一大堆命令了,用uwsgi命令启动,后面可以创建uwsgi启动脚本,加入到系统服务

在项目的目录中,创建uwsgi.ini:

[root@hcloud webtest]# cat uwsgi.ini
[uwsgi]
uid = nginx
gid = nginx
socket = 127.0.0.1:
master = true
vhost = true
workers =
reload-mercy =
vacuum = true
max-requests =
limit-as =
buffer-sizi =
pidfile = /var/run/uwsgi.pid
daemonize = /var/log/uwsgi/uwsgi.log
chdir = /usr/local/webtest
module = wsgi
chmod-socket =
enable-threads = true

保存并退出。配置文件参考:http://heipark.iteye.com/blog/1847421

大致的解释下:

uid 、gid :以哪个用户、组启动服务

socket:监听的ip及端口

master: 启动主进程

workes:服务器启动的进程数

reload-mercy:平滑的重启

pidfile :启动时的pid 文件。

daemonize :启动日志

module :web应用的入口模块名称

enable-threads : 启用线程模式

8)         创建开机系统启动脚本文件,名字为uwsgid。

#! /bin/sh
# chkconfig:
# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi' ### BEGIN INIT INFO
# Provides: uwsgid
# Required-Start: $all
# Required-Stop: $all
# Default-Start:
# Default-Stop:
# Short-Description: starts the uwsgi web server
# Description: starts uwsgi using start-stop-daemon
### END INIT INFO # Author: licess
# website: http://lnmp.org PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="uwsgi daemon"
NAME=uwsgi
DAEMON=/usr/bin/uwsgi
CONFIGFILE=/usr/local/webtest/$NAME.ini
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/uwsgid set -e
[ -x "$DAEMON" ] || exit do_start() {
$DAEMON $CONFIGFILE || echo -n "uwsgi already running"
} do_stop() {
$DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
rm -f $PIDFILE
echo "$DAEMON STOPED."
} do_reload() {
$DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
} do_status() {
ps aux|grep $DAEMON | grep -v grep
} case "$1" in
status)
echo -en "Status $NAME: \n"
do_status
;;
start)
echo -en "Starting $NAME: \n"
do_start
;;
stop)
echo -en "Stopping $NAME: \n"
do_stop
;;
reload|graceful)
echo -en "Reloading $NAME: \n"
do_reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload}" >&
exit
;;
esac exit

uwsgid

创建完成后,赋予执行权限,加入开机启动

[root@hcloud ~]# chmod +x /etc/init.d/uwsgid
[root@hcloud ~]# chkconfig --add uwsgid
[root@hcloud ~]# chkconfig --level 2345 uwsgid on

检查下

[root@hcloud ~]# chkconfig --list uwsgid
uwsgid :off :off :on :on :on :on :off

启动uwsgid

[root@hcloud ~]# service uwsgid start
Starting uwsgi:
[uWSGI] getting INI configuration from /usr/local/webtest/uwsgi.ini

验证下监听端口(注:这里我们使用127.0.0.1 作监听,是为了后期在使用时,对外只有nginx可以访问web应用):

[root@hcloud ~]# netstat -aultnp | grep :
tcp 127.0.0.1: 0.0.0.0:* LISTEN /uwsgi

9)         安装Nginx配置代理

先下载安装6.6的epel源

[root@hcloud ~]# wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@hcloud ~]# rpm -ivh epel-release--.noarch.rpm

安装nginx

[root@hcloud ~]# yum install nginx -y

安装完成后,修改nginx默认配置文件default.conf,修改之前可以先备份下源文件噢。完整内容如下:

[root@hcloud ~]# cat /etc/nginx/conf.d/default.conf
server {
listen ;
server_name 192.168.30.58; location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
uwsgi_param UWSGI_SCRIPT wsgi;
uwsgi_param UWSGI_CHDIR /usr/local/webtest;
index index.html index.htm;
client_max_body_size 35m;
}
}

以上内容代理了uwsgi的端口,客户端通过访问nginx的80端口,然后nginx在将请求转发到后台flask应用的8000端口上。

启动nginx

[root@hcloud ~]# service nginx start
Starting nginx: [ OK ]

在浏览器内测试访问一下nginx:http://192.168.30.58

Linux 上利用Nginx代理uWSGI处理Flask web应用的更多相关文章

  1. linux上使用nginx、uwsgi部署django项目

    参考:CentOS7下部署Django项目详细操作步骤 注意事项: 在虚拟环境中操作,虚拟环境中安装nginx.uwsgi,虚拟环境外需安装uwsgi -- 临时关闭防火墙:systemctl sto ...

  2. Linux+.Net Core+Nginx(在Linux上使用Nginx反向代理.Net Core 项目)

    Linux+.Net Core+Nginx 之前的文章中有提到关于使用Nginx在linux来实现反向代理,今天我们继续加点料.在Centos7中部署.NetCore,然后使用Nginx进行反向代理! ...

  3. 使用Nginx和uwsgi部署Flask项目

    前言   之前用Flask框架开发了一个Python的Web项目,使用Nginx和uWSGI部署起来感觉挺麻烦,过程中还因为对Flask框架的不熟悉,花了好长时间才把应用完全部署起来.下面分享部署成功 ...

  4. 在Linux上使用Nginx为Solr集群做负载均衡

    在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...

  5. 01 linux上安装 nginx

    一:linux上安装 nginx 下载nginx:wget http://nginx.org/download/nginx-1.6.2.tar.gz 解压:tar zxvf nginx-1.6.2.t ...

  6. Linux下利用nginx实现负载均衡

    linux下利用nginx实现负载均衡 前提条件: 1,安装好jdk 2,安装好tomcat和nginx(可以参考我前两篇文章) 满足前提条件后,要用nginx实现负载均衡,主要是靠配置nginx的配 ...

  7. [运维] 如何在 Linux 上安装 Nginx 服务器(一)

    原因 因为小程序对素材的大小是由要求的, 所以为了简化小程序上的内存要求, 在Linux上安装nginx来作为静态资源服务器, 这篇为第一篇, 主要介绍怎么在Linux上安装nginx, 下一篇将会介 ...

  8. Nginx+Python+uwsgi+Django的web开发环境安装及配置

    Nginx+Python+uwsgi+Django的web开发环境安装及配置 nginx安装 nginx的安装这里就略过了... python安装 通常系统已经自带了,这里也略过 uwsgi安装 官网 ...

  9. CentOS 下用 Nginx 和 uwsgi 部署 flask 项目

    前几天利用flask 写了几个调用salt-api 的接口,需要上线到正式环境,搜了一下 都是 用 nginx + uwsgi 来部署,这里记录下关键的配置项. 1.首先将代码上传到服务器上目录为: ...

随机推荐

  1. 说一说本人对linux系统学习的方法和经验

    摘要: 相信大伙都听说过linux系统,然而对于这个系统,总使让新手感觉茫然,诺达的系统.下面是一段百度中的介绍: 相信大伙都听说过linux系统,然而对于这个系统,总使让新手感觉茫然,诺达的系统.下 ...

  2. 微服务-注册与发现-zookeeper bydasn

    目录 一.微服务注册的概述 二.zookeeper2.1 zookeeper安装启动2.2 zookeeper集群搭建2.3 zkcli操作 一.微服务注册概述 在微服务中,有这么一个东西叫服务注册表 ...

  3. Hibernate----面试题

    什么是Hibernate? hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率. 什么是ORM? orm不过是一种思想,对象关系映射.是对象关系模型,如h ...

  4. Linux下如何查看tomcat是否安装、启动、文件路径、进程ID

    Linux下如何查看tomcat是否安装.启动.文件路径.进程ID 在Linux系统下,Tomcat使用命令的操作! 检测是否有安装了Tomcat: rpm -qa|grep tomcat 查看Tom ...

  5. LeetCode 60 第K个排列

    题目: 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "13 ...

  6. 编译darknet出现libpng16.so.16:对‘inflateValidate@ZLIB_1.2.9’未定义的引用

    cd /usr/lib/x86_64-linux-gnu sudo ln -s ~/anaconda/lib/libpng16.so.16 libpng16.so.16 sudo ldconfig## ...

  7. Spring Boot的事务管理注解@EnableTransactionManagement的使用

    @EnableTransactionManagement:负责开启springboot 的事物支持,等同于xml配置文件中的 <tx:annotation-driven /> 然后在访问数 ...

  8. SpringBoot的学习【3.HelloWorld配置细节】

    /** * @SpringBootApplication用来标注主程序类. */ @SpringBootApplication public class First { public static v ...

  9. spring-task解决定时问题

    *  spring3以上版本,spring-content自带 spring-task ,来解决工程中的定时问题  基于注解配置spring定时任务 spring配置文件如下: <?xml ve ...

  10. Arcmap查找孤路

    本文将介绍如何查出孤路——如下图红色框中的路: 方法一:使用拓扑检查 1. 使用merge,将所有道路合并到一个图层.注意,不能先分图层进行拓扑检查,因为本不是孤路的数据可能会被挑出来. 2. 对合并 ...