CentOS7部署Flask/Gunicorn/Nginx/Supervisor

  • 原创
  • Madman
  • /
  • /
  • 0
  • 3036 次阅读

Flask应用部署架构图.jpg

Synopsis: 当你用Flask框架在本地完全开发好一个应用程序后,想部署到服务器上,让互联网用户可以访问它,这与搭建本地开发环境还是有一些不一样的地方。首先,我们假设在服务器上安装了CentOS-7系统,使用git来上传和后续更新程序源代码,由于Flask自带的开发Web服务器性能不足以应对生产环境的并发访问,所以我们使用Gunicorn来替代它,同时,整个Web应用有许多静态资源,而Nginx非常善于处理这类请求,所以在Gunicorn前面再部署Nginx来提供静态资源服务,将其它请求反向代理给后面的Flask应用服务器Gunicorn。最后,为保证我们的Web应用持续提供服务,使用Supervisor来监控MongoDB/Gunicorn/Nginx的服务状态,当某一服务意外停止后,它会自动重启它。另外,我们也可以用Fabric实现这整个生产环境的部署过程自动化

1. Git客户端

Win10安装git for windows

1.1 设置Git全局参数

打开Git Bash

$ git config --global user.name "Alice-HomePC"
$ git config --global user.email "alice@gmail.com"

1.2 生成SSH Key

打开Git Bash,可使用-C选项指定公钥的说明信息

$ ssh-keygen -t rsa -C "Alice-HomePC"

一直回车确认即可,秘钥对默认保存在C:\Users\你的Win10用户名\.ssh目录下,其中id_rsa是私钥(Private Key),要小心保管;id_rsa.pub是公钥(Public Key),待会要上传到VPS上,实现基于SSH无密码登录VPS。同理,如果你在Github或Coding上有代码仓库,也是先要将公钥上传过去,才能无密码使用Git命令操作远程仓库。

2. 配置VPS

2.1 修改主机名

# hostnamectl set-hostname CentOS
或者:
# vi /etc/hostname
# hostnamectl

重新登录.

2.2 修改SSH端口

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# vi /etc/ssh/sshd_config
将默认22端口改为你指定的, 例如
Port 12345

# systemctl restart sshd

2.3 禁用SSH密码认证,改为秘钥认证

首先需要将步骤1中生成的公钥上传到服务器,可以使用xmanager套件中的xftp上传,假设上传到/root目录

1. 添加公钥
# cd /root
# mkdir ~/.ssh && chmod 700 ~/.ssh
# touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
# cat id_rsa.pub >> ~/.ssh/authorized_keys

2. 修改SSH配置文件
# vi /etc/ssh/sshd_config

修改几处地方,最终内容如下:
# 禁用root登录
PermitRootLogin no
# 启用密钥验证
RSAAuthentication yes
PubkeyAuthentication yes
# 指定公钥数据库文件
AuthorizedKeysFile .ssh/authorized_keys
# 禁用密码验证
PasswordAuthentication no

3. SSH重新加载配置文件
# systemctl reload sshd

此时,Win10可以通过xshell,无密码登录VPS了,且只能使用私钥认证通过。

3. 安装Python3

CentOS-7.3默认安装的是Python-2.7, 我的Flask程序是基于Python3写的,所以要再安装Python3

1. 准备编译环境
# yum -y install gcc make readline-devel sqlite-devel openssl openssl-devel libffi-devel zlib*

2. 编译安装
# wget -P /root http://python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
# tar xf Python-3.6.4.tar.xz
# cd Python-3.6.4/
# ./configure --prefix=/usr/local/python-3.6
# make && make install
# ln -s /usr/local/python-3.6/bin/python3.6 /usr/bin/python3
# ln -s /usr/local/python-3.6/bin/pip3.6 /usr/bin/pip3

更改pip安装源为国内的源,比如aliyun

# mkdir ~/.pip
# vi ~/.pip/pip.conf

添加内容如下:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

(可选)安装IPython

1. pip方式安装(推荐), 该方式会有语法高亮等特性
# pip3 --version
# pip3 install --upgrade pip
# pip3 install ipython
# ln -s /usr/local/python-3.6/bin/ipython3 /usr/bin/ipython3

2. 编译安装
# tar xf ipython-0.13.1.tar.gz
# cd ipython-0.13.1/
# python3 setup.py install
# ln -s /usr/local/python-3.6/bin/ipython3 /usr/bin/ipython3

4. 安装MongoDB

官方文档

1. 配置repo源
# vi /etc/yum.repos.d/mongodb-org-3.6.repo

内容如下:
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

2. 安装并启动服务
# yum install -y mongodb-org
# systemctl start mongod.service
# systemctl enable mongod.service

5. Git服务端

1. 安装
# yum install -y git

2. 创建裸仓库
# mkdir /home/git && cd /home/git
# git init --bare flask_project.git

我在Win10上已经开发好了Flask程序,待会上传到此git仓库中,应用程序代码准备部署到/home/www/flask_project,并通过git的hooks当客户端每次提交代码后,自动同步仓库中的代码到应用部署的位置

  • dorayo
  • 拜年挂大风
  • joykechen
  • ppiero
  • dudulangaaa
  • xiaobing
  • captainliuy
  • James
  • bugbycode
  • 深拥梦i22522
  • unmaster
  • impress
未经允许不得转载: LIFE & SHARE - 王颜公子 » CentOS7部署Flask/Gunicorn/Nginx/Supervisor

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.

专题系列

热门文章