具体步骤
1. 链接服务器
你需要拥有一个服务器,我是通过Xshell6 连接上阿里云服务器(CentOS7系统)的。
Xshell6 + Xftp6
阿里云操作系统CentOS7Server
2. 服务器CentOS7 上的准备
假定你是在腾迅云或者阿里云购买了VPS,那么直接执行以下指令吧,其它的不多解释了,无非就是准备一下 python 环境。
# sudo yum -y update # sudo yum -y install python-dev python-pip python-virtualenv
如果需要python3环境请按下面操作步骤:
3. 安装python3.6
服务器上是默认有python2.7 ,但是没有python3.6和pip所以我们需要安装python3.6和pip。
(1) 安装依赖环境
# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
(2)下载Python3
https://www.python.org/downloads/
# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
(3)安装python3
我个人习惯安装在/usr/local/python3(具体安装位置看个人喜好)
创建目录:
# mkdir -p /usr/local/python3
解压下载好的Python-3.x.x.tgz包(具体包名因你下载的Python具体版本不不同⽽而不不同,如:我下载的是Python3.6.1.那我这里就是Python-3.6.1.tgz)
# tar -zxvf Python-3.6.1.tgz
(4)进入解压后的目录,编译安装。
# cd Python-3.6.1
# ./configure --prefix=/usr/local/python3
make
# make
make install
# make install 或者 # make && make install
(5)建立python3的软链
# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
如果遇到下面的bug
ln: failed to create symbolic link '/usr/bin/python3': File exists
说明已经有链接链到 /usr/bin/python3上了,删除即可,使用命令
# rm -rf /usr/bin/python3
注意python后面不能加斜杠,安装完毕 ,输入python3验证
ctrl+d都可以退出。
(6)/。
# vim ~/.bash_profile
编辑bash_profile
# Get the aliases and functions
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
按ESC,输入:q回车退出。
修改完记得执行行下面的命令,让上一步的修改生效:
# source ~/.bash_profile
检查Python3及pip3是否正常可用:
# python3 -V
Python 3.6.1
# pip3 -V
pip 9.0.1 from /usr/local/python3/lib/python3.6/site-packages (python 3.6)
(7)不行的话在创建一下pip3的软链接(我也不清楚这一步有什么用)
# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
4.安装pip以及setuptools
毕竟丰富的第三方库是python的优势所在,为了更加方便的安装第三方库,使用pip命令,我们需要进行相应的安装。
(1)安装pip前需要前置安装setuptools
命令如下:
# wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
# tar -zxvf setuptools-19.6.tar.gz
# cd setuptools-19.6
# python3 setup.py build
# python3 setup.py build
如果前面没布置好环境的话,就要苦逼一下了:
报错: RuntimeError: Compression requires the (missing) zlib module
我们需要在linux中安装zlib-devel包,进行支持。
# yum install zlib-devel
需要对python3.5进行重新编译安装。
# cd python3.6.1
# make && make install
又是漫长的编译安装过程。
重新安装setuptools
# python3 setup.py build
# python3 setup.py install
(2)安装pip
命令如下:
# wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
# tar -zxvf pip-8.0.2.tar.gz
# cd pip-8.0.2
# python3 setup.py build
# python3 setup.py install
如果没有意外的话,pip安装完成。
如果没有搞好环境的话,会碰见亲切的报错:
pip3 install paramiko
报这个错
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
然后开始进行如下操作
# yum install openssl
# yum install openssl-devel
# cd python3.6.1
# make && make install
5.安装virtualenv
# pip3 install virtualenv
6.构建项目独立环境
这个步骤理解为将这个项目所需的一切(python)相关基础内容,都放到一个单独的容器中去,这样改变这个容器中的python相关配置,不会影响到服务器。
(1)Nginx安装
将项目传入服务器:
假设目录结构如下
# sudo yum -y install nginx
在 /var/www 目录下建立一个 myflask 的文件夹(你的项目目录),然后用 chmod 改一下权限
# sudo mkdir /var/www/myflask # sudo chmod 777 /var/www/myflask
注:当然你可以使用 nginx 的默认网站目录 /usr/share/nginx/html
然后用 scp 指令直接将本机上的 flask 项目传到服务器:
# scp -r myflask root@www.mydomain.com:/var/www/myflask
域名就改成地址或者你的服务器正在使用的域名,我这里是用 root 用户进入的,你得按你的服务器的用户来修改。两大云的默认根用户是:
- 腾迅 :ubuntu
- 阿里 :root
(2)Gunicorn安装
Gunicorn 绿色独角兽 是一个Python WSGI UNIX的HTTP服务器。这是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。
我曾经Google 过 Gunicorn 与 uwsgi ,都说uwsgi 的性能要比 gunicorn 高,所以最终结果就杯具了。不过,现在回过头来看这只 “独角兽”还为时不晚吧。
安装Gunicorn
Gunicorn 应该装在你的 virtualenv 环境下,关于 virtualenv 就不多说了,如果没用过那就赶快脑补吧。安装前记得激活 venv
(venv) # pip install gunicorn
运行 Gunicorn
(venv) # gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application
That's all! 它的安装就这么简单。不过这里得作一个解释。就是最后的那个参数 wsgi:application 这个是程序入口,我得写个小小的范例来说明一下:
新建一个 wsgi.py 的文件, 注意,这里和 Flask 项目中常用的 manage.py 引导脚本是没有半点毛关系的。(这是我笨,以前一直没分清被uwsgi搞糊涂了)
好了,这个 wsgi:application 参数就很好理解了, 分两部:wsgi 就是引导用的 python 文件名称(不包括后缀/模块名)application 就是 Flask 实例的名称。这样 gunicorn 就会找到具体要 host 哪一个 flask 实例了。
从这里开始就可以体现 gunicorn 的好了,我们根本不用配什么配置文件的,一个指令就可以将它起动。
(3)Nginx 的配置
关于 Nginx 我也就不详细讲了,我们就直奔主题,杀入 Nginx 的默认配置文件
# sudo nano /etc/nginx/site-avalidable/default
暴力修改成为以下的内容:
建议先备份一下 default 文件
# sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak
记得完成 nginx 需要重新起动 nginx 服务喔!
# sudo service nginx restart
(4)将 Gunicorn 作为服务运行
这就是最后一步了,我们在此将采用 UpStart 配置Flask程序作为服务程序在Linux起动时运行。首先建立起动配置文件:
# sudo nano /etc/init/myflask.conf
然后加入如下配置
OK 大功告成,启动 myflask 服务
# sudo service myflask start
这里有一点必须补充的,请留意在 myflask.conf 中的
env PATH= /var/www/myflask/venv/bin chdir /var/www/myflask/
这里所指向的地址就是你的项目路径和 virtualenv 的路径
小结
这个部署过程感觉比我之前所介绍的 uwsgi 那种简单很多吧。这里给一点小 Tips 如果你用 Fabric 来完成这个部署过程的话那么就是纯自动化部署了喔,值得尝试的。