在阿里云ECS上部署Nginx + uWSGI + Flask生产环境

阿里云目前可以申请5天的免费试用,可以利用这段时间先配置好再购买也不迟。

我选择的ECS配置是:CPU 1核,1G内存,无数据盘,1M带宽,操作系统为Ubuntu12.04 64

首先连接上ECS:ssh root@ECS公网IP

我们先安装Nginx,为了降低难度(其实是我不会配置……),我们直接使用LNMP一键安装包,直接搞定Nginx + Mysql + PHPAdmin~ 注意这里给出的命令只适用于Ubuntu,其他CentOS及Debian系统请查询官网文档

wget -c http://soft.vpser.net/lnmp/lnmp1.0-full.tar.gz && tar zxvf lnmp1.0-full.tar.gz && cd lnmp1.0-full && ./ubuntu.sh

安装大概需要半个小时多,耐心等待完成吧。

接下来我们来安装uWSGI:

首先安装编译uWSGI所需的依赖包:aptitude install python-dev

然后下载uWSGI源码,编译安装:

cd /usr/local/srcwget -c http://projects.unbit.it/downloads/uwsgi-1.4.10.tar.gz && tar zxvf uwsgi-1.4.10.tar.gz && cd uwsgi-1.4.10 && makecp uwsgi-1.4.10/uwsgi /usr/sbin     #选择覆盖旧文件

安装setuptools和pip(官方安装文档):

cd /usr/local/srcwget -c https://raw.github.com/pypa/pip/master/contrib/get-pip.pypython get-pip.py

安装virtualenv:

pip install virtualenv

创建并激活虚拟环境:

mkdir /var/www && cd /var/wwwvirtualenv venv. venv/bin/activate

安装Flask

pip install flask

创建一个App:

mkdir /var/www/myapp && cd /var/www/myappvi main.py

在main.py中,输入代码:

from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():    return "Hello World!"

创建Nginx的uWSGI配置文件:vi /usr/local/nginx/conf/flask_uwsgi.conf

在flask_uwsgi.conf文件中填入如下配置:

# Flask projectserver {  listen  80;  server_name 11.22.33.44; #我们的服务器外网ip,如果你设置了域名,就填写域名  location / {    include      uwsgi_params;    uwsgi_pass   127.0.0.1:9090;    uwsgi_param UWSGI_PYHOME /var/www/venv;    uwsgi_param UWSGI_CHDIR  /var/www/myapp;    uwsgi_param UWSGI_SCRIPT main:app;  }}

将配置文件导入Nginx主配置文件中:vi /usr/local/nginx/conf/nginx.conf

#在文件末尾加入include语句:http {    …    include flask_uwsgi.conf;    #新增语句}

为了方便以后使用,制作一个uWSGI的控制脚本:vi /usr/local/bin/uwsgiserver

#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH# Check if user is rootif [ $(id -u) != "0" ]; then    printf "Error: You must be root to run this script!\n"    exit 1fiif [ "$1" = "start" ]; then  psid=`ps aux|grep "uwsgi"|grep -v "grep"|wc -l`  if [ $psid -gt 2 ];then    echo "uwsgi is running!"    exit 0  else    /usr/sbin/uwsgi -s 127.0.0.1:9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d /var/log/uwsgi.log    /usr/local/nginx/sbin/nginx -s reload  fi  echo "Start uwsgi service [OK]"elif [ "$1" = "stop" ];then  killall -9 uwsgi  echo "Stop uwsgi service [OK]"elif [ "$1" = "restart" ];then  killall -9 uwsgi  /usr/sbin/uwsgi -s 127.0.0.1:9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d /var/log/uwsgi.log  /usr/local/nginx/sbin/nginx -s reload  echo "Restart uwsgi service [OK]"else  echo "Usages: uwsgiserver [start|stop|restart]"fi

Ok,基本所有步骤完成了,我们来启动它们吧~

启动uWSGI:uwsgiserver start

启动Nginx:service nginx start

重新加载Nginx的配置文件:service nginx reload

在浏览器直接输入服务器外网IP,应该就能看到Hello World了~

一些想法

关于Nginx的一键安装包,LNMP是不带WEB控制面板的,带面板的有AMH可以考虑。但我个人认为如果没有很多站点需要管理的话,其实LNMP是足够用的,由于实现(较AMH)简单,因此我认为它的内存占用会更少,更稳定。

uWSGI的最大优点是效率高(C实现),它的另一个替代品是gunicorn,这个是Python实现的,部署比uWSGI简单,回头试试~

写完了瞬间有一种(伪)全栈工程师的感觉啊 哇哈哈~

TODO

待完善的一些细节配置,将来加上:

使用supervisor监控/管理uWSGI和Nginx。uWSGI应使用配置文件进行管理。目录权限未设置相关资料

uWSGI的配置选项说明:Configuration Options

VPS环境搭建详解 (Virtualenv+Gunicorn+Supervisor+Nginx),非常好的一篇配置文章,把我想做的全做好了,为什么这会才看到……= =#

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0转载请注明:转载自Tony's blog,原文网址:http://itony.me/559.html

The post 在阿里云ECS上部署Nginx + uWSGI + Flask生产环境 appeared first on Tony's blog.

离开之后,我想你不要忘记一件事:不要忘记想念我。

在阿里云ECS上部署Nginx + uWSGI + Flask生产环境

相关文章:

你感兴趣的文章:

标签云: