前言
本文记录我AWS上部署Flask服务器的过程~ 希望能帮到有需要的人, 由于本人水平有限,难免有错误与遗漏的地方~ 还请大家多多指正~ (๑•ᴗ•๑)
框架简介
Gunicorn
这里就要先说到WSGI,它是一个协议,定义与协调Python程序与请求之间的接口,常用的WSGI容器有Gunicorn和uWSGI,Gunicorn更加快捷,所以选择Gunicorn
Flask
Flask是一个基于Python的Web开发微框架,借助Web框架,我们就不用关心请求,响应这些底层的实现,而专注于业务的实现~ 而Flask相比于其他框架更加轻量,自由度更高,所以这里我选择了Flask
Nginx
Nginx 是一个异步框架的Web服务器,我将它部署在Gunicorn前面,通过反向代理连接. 其实不加Nginx也是可以的,但是加上Nginx有更多好处, 例如 静态文件支持,负载均衡等等,以后我会再研究研究,单独写一篇博文的~
架构预览
如图~
部署过程
部署的服务器是 AWS 上的 CentOS 服务器, 使用的是Python3.7.0,而AWS上是默认Python2.7的,所以第一步是 安装Python3 环境
安装Python3环境
下载,解压安装包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
编译,安装Python3
在Linux上我们需要先安装 gcc 编译器
sudo yum -y install gcc gcc-c++
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel
然后cd当解压目录中进行 编译安装
cd Python-3.7.0/
make
make install
修改软链接
#移除原有软链接
rm -f /usr/bin/{python,python3}
#创建新的软连接
ln -s /usr/local/python3.7.0/bin/python3.7 /usr/bin/python
ln -s /usr/local/python3.7.0/bin/python3.7 /usr/bin/python3
修改 yum
将 首行 的配置修改为Python3.7
vim /usr/bin/yum
将 "#!/usr/bin/python" 修改为 "#!/usr/bin/python2.7"
结果
这是我们查看Python版本 就如下~
pip3的安装
使用Python3自然要使用pip3了,下面是pip3的安装方法
安装解压 pip3
$ wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
$ tar -zvxf 9.0.1 -C pip-9.0.1
$ cd pip-9.0.1
# 使用 Python 3 安装
$ python3 setup.py install
创建软连接与更新
sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3
pip install --upgrade pip
此时,可能会报错误 /usr/bin/pip: No such file or directory 此时是因为pip升级后位置更改为**/usr/local/bin/pip**,所以要更新缓存
hash -r
配置虚拟环境
接下来就是要配置Python3的虚拟环境,避免相互影响
pip install --upgrade virtualenv
#在需要的目录下创建
virtualenv -p python3 venv
# 激活
source venv/bin/activate
配置Flask 和 Git
这里就是用pip安装自己需要的Web框架了,这里我就先只安装了一个Flask,然后用Git部署代码,因为现阶段代码比较简单,所以没用fabric,后续有时间我会研究研究~
pip install flask
Nginx配置
Nginx的安装很简单,只需要一条命令~
sudo yum install nginx
然后修改Nginx的配置文件 路径在 /etc/nginx/nginx.conf,主要是修改监听端口和root路径,
我是这样改的~ 监听5000端口, root指向我存放代码的Git仓库
这样基本就可以了,然后是配置Gunicorn
Gunicorn
这里也很简单,名利如下~
# 安装
pip install gunicorn
#启动
gunicorn -w4 -b 0.0.0.0:5000 app:app
若出现无法启动Gunicorn服务的情况,有可能设置的端口已经被占用了~ 比如我 上次连接断开前没中止,就出现了 无法启动的情况~
如果一切正常的,访问ip就能正常展示了~~ 如果不能访问,建议排除是不是网关设置的问题~