Nginx+Uwsgi+Flask在阿里云服务器上的部署
先说明一下,我用的系统是centos6.8,一开始想用debian的系统,但是奈何国内关于debian中配置nginx和uwsgi的文档太少,本人不才,所以还是选择了centos。。。。。。个人感觉centos的系统配置还是挺简单的。。。不过存在很多防火墙的问题,下边一步步来说。。。。
centos上应该是默认已经安装了Python2.6,不过你要想安装其他的版本就需要自己首先安装一个pyenv的东西。。。。
1、安装pyenv
先说一下pyenv吧,这是一个多版本共存的版本管理器。windows上就不用说了,可以安装多个版本的Python,但是Linux上就会有问题了,所以需要这么一个管理器。
第一步,安装:
# curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
下边是安装过程。。。
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2099 100 2099 0 0 4787 0 --:--:-- --:--:-- --:--:-- 4792 WARNING: seems you still have not added 'pyenv' to the load path. # Load pyenv automatically by adding # the following to ~/.bash_profile: export PATH="/root/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
到了这,你就完成了安装了,接下来就是配置:
# cat>>.bashrc<<EOF
把下边这几句添加进去
### pyenv settings export PYENV_ROOT="\$HOME/.pyenv" export PATH="\$PYENV_ROOT/bin:\$PATH" eval "\$(pyenv init -)" eval "\$(pyenv virtualenv-init -)" EOF
接下来你就可以安装你所需要的Python版本了,首先查看一下有什么版本
# pyenv install --list
我目前做的是一个关于科学计算的项目,所以我安装了一个Anaconda2-4.3.1-Linux-x86_64.sh,各位可以根据自己的需要安装。。。。
顺便说一下,这个版本会从官网下载,文件又特别大,建议大家先获取下载地址,然后自己先下载下来,然后传到Linux上,我使用xshell连接的远程,安装一个rz就可以上传文件啦。。。
apt-get install lrzsz
当然大家可以使用别的方式下载。。。我这就都默认大家已经装好了,,,,然后还有一个很重要的问题,就是需要把你下载的版本移动到~/.pyenv/cache文件夹下,默认好像是没有什么cache文件夹的,自己可以创建一个(mkdir cache)
mv Anaconda2-4.3.1-Linux-x86_64.sh ~/.pyenv/cache
然后就可以安装了,,,
# pyenv install anaconda2-4.3.1 -v
然后需要更新一下数据库
# pyenv rehash
这时候你可以查看一下自己机器上的安装的Python版本(带*号的是系统安装的版本,并不是你自己安装的。。。)
# pyenv versions * system (set by /root/.pyenv/version) anaconda2-4.3.1
下面就到了最重要的一步了,你安装的版本怎么设置成默认的呢?
# pyenv global anaconda2-4.3.1
来让我们看一下是否自己安装的版本变成了默认的呢?
Yeah!!!终于完成了,哈哈哈。。。。
2、安装nginx
首先安装一些依赖包,,,
# sudo yum -y install gcc gcc-c++ make autoconf automake
# sudo yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
接下来就是安装nginx了
# wget http://nginx.org/download/nginx-1.2.7.tar.gz
# tar -zxv -f nginx-1.2.7.tar.gz
# cd nginx-1.2.7
# ./configure
# make
# sudo make install
接下来启动nginx服务器,
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
你可以使用浏览器访问http://127.0.0.1/,如果看到Welcome to nginx!的字样,就表示安装成功了。
3、安装uwsgi
先安装相关依赖python-devel、setuptools,libxml2-devel,直接用yum安装。如果是自行编译安装的python,可以不用安装python-devel。
# yum -y install python-devel python-setuptools libxml2-devel
下边安装uwsgi,,,,
# pip install uwsgi
uwsgi安装完了,然后就是上传自己的项目,记住一定要自己创建一个目录,我是创建了/home/lh,然后把项目传到这个路径的下面了
上传解压的过程我就不说了·····
4、nginx和uwsgi通信
就是在你的项目下边创建一个xml文件,也可以是ini文件,是一样的,,,然后在文件里面写下面的内容
<uwsgi> # 项目的路径 <pythonpath>/home/lh</pythonpath> # 启动文件的文件名(例如:app.py,直接写app) <module>app</module> # 启动文件中的实例(执行文件的实例) <callable>app</callable> # 和nginx通信的IP和端口,必须和nginx配置里的uwsgi_pass一致。 <socket>127.0.0.1:8000</socket> <master/> # 开启几个进程 <processes>4</processes> <memory-report/> </uwsgi>
然后配置nginx,配置nginx.conf,把location中的内容加上下面两行(/usr/local/nginx/conf/nginx.conf)
include uwsgi_params; uwsgi_pass 127.0.0.1:8000;
修改完成后,看一下是否配置的正确
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
现在就配置完成了,重新启动一下nginx,找到nginx的进程号
# ps -ef|grep nginx
然后杀掉进程,注意这里应该是有两个进程,然后重新启动nginx
# kill -9 进程号
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
启动完了nginx,还有最重要的一个要启动uwsgi,可以直接进入到项目中,启动
# uwsgi 你写的xml或ini文件
这时,就完成了啊,使用外网访问一下你的阿里云分配给你的外网地址,能访问说明你配置完成了,哈哈,,,
ps:也是最重要的一点,这一点让我郁闷了好几天。。。一定要开启防火墙,阿里云的服务器默认是不开的,所以自己要打开端口
# vim /etc/sysconfig/iptables
如果没有这个文件,自己也可以自己创建一个,把下面的内容贴到文件里,从这里面你可以开放自己需要的端口
# Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended.*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp –icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited COMMIT
最后重启iptables。。。。。
# service iptables restart
如果再不行,你们就私聊我吧,搞了一周,终于搞完,中间遇到了各种各样的问题,总结一下:
1、外网不能访问:一般是你的端口没开(也不都是这个原因,其他的原因我也不知道,,,)
2、uwsgi和nginx不能交互:(一般是通信的IP和端口不对,当然不排除有二般的原因,,,)
3、uwsgi不能启动:应该是你没有到项目的下面去启动,导致找不到xml或ini文件。。。
4、待续吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
posted on 2017-05-21 18:09 python屌丝的逆袭 阅读(1061) 评论(1) 编辑 收藏 举报