CentOS7部署Flask/Gunicorn/Nginx/Supervisor
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
1.2 生成SSH Key
打开Git Bash
,可使用-C
选项指定公钥的说明信息
一直回车确认即可,秘钥对默认保存在C:\Users\你的Win10用户名\.ssh
目录下,其中id_rsa
是私钥(Private Key),要小心保管;id_rsa.pub
是公钥(Public Key),待会要上传到VPS上,实现基于SSH无密码登录VPS。同理,如果你在Github或Coding上有代码仓库,也是先要将公钥上传过去,才能无密码使用Git命令操作远程仓库。
2. 配置VPS
2.1 修改主机名
重新登录.
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 https://www.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 = https://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
当客户端每次提交代码后,自动同步仓库中的代码到应用部署的位置
0 条评论
评论者的用户名
评论时间暂时还没有评论.