阿里云目前可以申请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),非常好的一篇配置文章,把我想做的全做好了,为什么这会才看到……= =#
The post 在阿里云ECS上部署Nginx + uWSGI + Flask生产环境 appeared first on Tony's blog.
离开之后,我想你不要忘记一件事:不要忘记想念我。