文档章节

nginx+uwsgi+flask配置记录

Risol
 Risol
发布于 2012/08/03 14:11
字数 552
阅读 2586
收藏 15

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

nginx部分:

nginx使用nginx官方yum源 详情:http://nginx.org/en/download.html

nginx的配置文件:

server {
    listen       80;
    server_name  www.iday.me;

 
   access_log  /var/log/nginx/iday.me.access.log  main;
    error_log  /var/log/nginx/iday.me.error.log ;
    location / {
	   include uwsgi_params;
           uwsgi_pass  unix:/dev/shm/iday.me;
    }

	location =/favicon.ico {
      alias /www/iday.me/static/img/favicon.ico;
       }
     location /static {
                alias /www/iday.me/static ;
        }

   
   
}

uwsgi部分:

uwsgi通过pypi来来装:

pip install uwsgi

配置uwsgi有些麻烦,把uwsgi源码里的用于cenots的init.d script文件提取出来,稍作修改:

#!/bin/bash

# uwsgi - Use uwsgi to run python and wsgi web apps.
#
# chkconfig: - 85 15
# description: Use uwsgi to run python and wsgi web apps.
# processname: uwsgi

# author: Roman Vasilyev

# Source function library.
. /etc/rc.d/init.d/functions

PATH=/opt/uwsgi:/sbin:/bin:/usr/sbin:/usr/bin
prog=/usr/local/bin/uwsgi

OWNER=nginx

NAME=uwsgi
DESC=uwsgi

DAEMON_OPTS="--emperor '/etc/uwsgi/*.ini'  --listen 1024  -d /var/log/uwsgi/$NAME.log --uid $OWNER -M --pidfile /var/run/$NAME.pid"

[ -f /etc/sysconfig/uwsgi ] && . /etc/sysconfig/uwsgi

lockfile=/var/lock/subsys/uwsgi

start () {
  echo -n "Starting $DESC: "
  daemon $prog $DAEMON_OPTS
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
  return $retval
}

stop () {
  echo -n "Stopping $DESC: "
  killproc $prog
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
  return $retval
}

reload () {
  echo "Reloading $NAME" 
  killproc $prog -HUP
  RETVAL=$?
  echo
}

force-reload () {
  echo "Reloading $NAME" 
  killproc $prog -TERM
  RETVAL=$?
  echo
}

restart () {
    stop
    start
}

rh_status () {
  status $prog
}

rh_status_q() {
  rh_status >/dev/null 2>&1
}

case "$1" in
  start)
    rh_status_q && exit 0
    $1
    ;;
  stop)
    rh_status_q || exit 0
    $1
    ;;
  restart|force-reload)
    $1
    ;;
  reload)
    rh_status_q || exit 7
    $1
    ;;
  status)
    rh_status
    ;;
  *)  
    echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2
    exit 2
    ;;
  esac
  exit 0

然后用chkconfig 把uwsgi加入服务。这里我使用--emperor '/etc/uwsgi/*.ini' 参数即用 emperor模式来运行虚拟主机

配置uwsgi最麻烦的是虚拟主机的配置,uwsgi有virtualHosting模式,但是该模式只适合你有少量网站,而且它以一种相当复杂的方式运行,并且很不安全。uwsgi建议使用emperor模式替代virtualhosting模式。

接下来只要把虚拟主机的配置文件放入/etc/uwsgi/目录下就可以了,附上一个配置文件:iday.me.ini

[uwsgi]
master
max-requests =10000
processes = 2 
pythonpath =/www/%n
module =main
callable=app
enable-threads
socket = /dev/shm/%n
uid = nginx
post-buffering=4096
logto=/var/log/uwsgi/%n.log
pidfile=/var/run/uwsgi/%n.pid
disable-logging
listen=10240
ignore-sigpipe

 module=main 说的是flask项目的入口文件,main.py文件:

# -*- coding: utf-8 -*-

import sys
from models import *
from views import *
from app import app
reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=81)

最后讲下面的uwsgi文件放入logrotate.d以便处理打包uwsgi产生的日志:

"/var/log/uwsgi/*.log" {
  copytruncate
  daily
  rotate 5
  compress
  delaycompress
  missingok
  notifempty
}

© 著作权归作者所有

Risol
粉丝 21
博文 8
码字总数 2522
作品 0
杭州
私信 提问
加载中

评论(4)

greatghoul
greatghoul

引用来自“jimmyone”的评论

引用来自“sol”的评论

引用来自“jimmyone”的评论

为什么flask还要加一个uwsgi呢?flask本身不是有werkzeug 这个WSGI的server吗?

为了部署啊,生产环境这样部署优点很多

我也听说werkzeug在production性能不行。如果性能不好,那还要它做WSGI server做什么?对python framework理解不深,请多指教。

本地方便。
j
jimmyone

引用来自“sol”的评论

引用来自“jimmyone”的评论

为什么flask还要加一个uwsgi呢?flask本身不是有werkzeug 这个WSGI的server吗?

为了部署啊,生产环境这样部署优点很多

我也听说werkzeug在production性能不行。如果性能不好,那还要它做WSGI server做什么?对python framework理解不深,请多指教。
Risol
Risol 博主

引用来自“jimmyone”的评论

为什么flask还要加一个uwsgi呢?flask本身不是有werkzeug 这个WSGI的server吗?

为了部署啊,生产环境这样部署优点很多
j
jimmyone
为什么flask还要加一个uwsgi呢?flask本身不是有werkzeug 这个WSGI的server吗?
nginx+uwsgi+flask环境搭建

想自己搭建一个Blog,功能不是很复杂,所以选用了python的flask框架,在参照网上的资料搭出Hello World之后将知识汇总一下,以便以后查看。 系统:Ubuntu 14.04 首先安装flask,nginx,pip(方...

L很失败L
2015/08/08
1K
2
Linux搭建Python web环境(nginx + flask + uwsgi)

去年的时候,就曾使用Nginx+Flask+uwsgi搭建过python的web环境。但在最近搭建的时候,又去网上找了一遍教程,所以打算写一篇笔记做下记录。 在搭建之前,有必要了解下发送一个请求的整个流程...

liuchungui
2018/05/14
0
0
FLASK上传时有中文文件名的解决方案

场景是在nginx+uwsgi+flask时上传文件名为中文时nginx报502错,设置各各地方为utf8后无果,最后妥协了.解决方案一:拼接+安全检查 解决方案2:转成拼音pip install pypinyin...

雨花
2016/05/18
507
0
RocketMQ多线程场景生产和消费TPS测试

一 机器部署 1、机器组成 7台机器,均为16G内存 每台服务器均有4个CPU,2核 2、运行环境配置 3、刷盘方式 每台机器master机器均采用异步刷盘方式 二 性能评测 1、评测目的 多线程环境下,测试...

tantexian
2016/06/30
1K
2
vue-router 权限管理 部分页面的登录检测

路由元信息 定义路由的时候可以配置 字段: 首先,我们称呼 配置中的每个路由对象为 路由记录。路由记录可以是嵌套的,因此,当一个路由匹配成功后,他可能匹配多个路由记录 例如,根据上面的...

阿豪boy
2018/04/17
102
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql免安装

参考:http://blog.csdn.net/qq_28569585/article/details/79072805 [mysqld]#设置mysql密码为空#skip-grant-tables#设置3306端口 port = 3306# 设置mysql的安装目录 basedir=E...

秋默
6分钟前
1
0
立足于SpringCloud.H + Netflix-Ribbon + Hystrix断路器(9)

《SpringCloud.H心法总纲》 继续上一篇,接下来Springcloud配置Netflix-Ribbon集成Hystrix断路器的功能。 1、添加依赖 <!--使用hystrix,测试断路器--><dependency> <groupId>org.spr......

木九天
7分钟前
1
0
Dropbox怎么共享文件?Dropbox共享文件操作

Dropbox网盘是国外的一项云存储服务,这意味着即使您使用的是其他设备,您也可以将文件复制到云中并在以后访问它们,目前支持PC、Android和MAC三大平台,为用户带来最精准的资源传输工作。就...

坚果云
9分钟前
4
0
Vant Weapp 1.0 正式版发布

1.0 来了 2018 年 8 月 11 日,我们发布了 Vant Weapp 的首个版本。16 个月以来,我们收到了 27 位开发者贡献的 1000 多次提交,也处理了 1200 多个 issue,发布了 50 多个版本。Github 的 ...

有赞coder
11分钟前
2
0
VCF文件格式详解

VCF文件全称为Variant Call Format,表示基因组的变异信息,通常为GATK和Samtools软件处理所得到。 VCF文件大致可以分为两个部分: 1、以##开头的头文件信息 ##fileformat=VCFv4.2##FILTER...

悲催的古灵武士
11分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部