CentOS7部署Flask+Gunicorn+Nginx+Supervisor

1. Git客户端

Win10安装git for windows

1.1 设置Git全局参数

打开Git Bash

$ git config --global user.name "Alice-HomePC"
$ git config --global user.email "[email protected]"

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 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当客户端每次提交代码后,自动同步仓库中的代码到应用部署的位置 Simple automated GIT Deployment using GIT Hooks

1. 创建代码部署目录
# mkdir -pv /home/www/flask_project

2. 创建hooks
# vi /home/git/flask_project.git/hooks/post-receive

内容如下:
#!/bin/bash
TRAGET="/home/www/flask_project"
GIT_DIR="/home/git/flask_project.git"
BRANCH="master"

while read oldrev newrev ref
do
    # only checking out the master (or whatever branch you would like to deploy)
    if [[ $ref = refs/heads/$BRANCH ]];
    then
        echo "Ref $ref received. Deploying ${BRANCH} branch to production…"
        git --work-tree=$TRAGET --git-dir=$GIT_DIR checkout -f
    else
        echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
    fi
done

3. 赋权
# chmod +x /home/git/flask_project.git/hooks/post-receive

6. 上传代码

打开Git Bash,准备把服务器上的flask_project.git仓库(目前为空)克隆下来。Git默认使用SSH协议且端口22,由于我们刚修改了服务器的SSH端口,所以克隆时要指定修改后的端口号

6.1 克隆远程仓库

方法1:

$ git clone ssh://[email protected]的IP或域名:VPS的SSH端口号//home/git/flask_project.git

方法2: 在Win10保存SSH秘钥对的目录下创建配置文件 C:\Users\你的Win10用户名\.ssh\config

host VPS的IP或域名
port VPS的SSH端口

然后执行克隆命令:

$ git clone [email protected]的IP或域名:/home/git/flask_project.git

6.2 提交代码

克隆后会在当前目录下生成 flask_project 目录,把开发好的flask代码拷贝到这里面,并指定哪些文件不提交到git仓库,在git bash中运行:

$ cd flask_project
$ vi .gitignore
比如我的规则:
.idea/
__pycache__/
uploads/
venv3/

提交代码:

$ git add .
$ git commit -m "initial"
$ git push

你会发现/home/www/flask_project目录下会自动拷贝git仓库中master分支的最新代码过来。

7. 调试程序

7.1 准备virtualenv环境

# pip3 install virtualenv
# ln -s /usr/local/python-3.6/bin/virtualenv /usr/bin/virtualenv
# cd /home/www/flask_project
# virtualenv --no-site-packages --python=/usr/bin/python3 venv3

7.2 安装相关python包

# source venv3/bin/active
(venv3)# pip install flask
依次安装完所有的依赖包后,
(venv3)# pip freeze > requirements.txt

7.3 测试用Flask自带的服务器能否运行

(venv3)# python manage.py runserver -h 0.0.0.0 -p 80

如果你能通过VPS的IP正常访问Flask应用,那么就可以进行下一步,使用Gunicorn替代Flask自带的开发服务器

8. Gunicorn

8.1 安装

(venv3)# pip install gunicorn

8.2 创建包含应用入口app的模块文件

一般我们开发时,都是使用manage.py,里面有flask-script方便调试,生产环境要再创建一个模块,比如:

# vi wsgi.py

内容如下:
import os

from app import create_app

###
# 调用工厂函数,初始化Flask程序实例,默认使用生产环境配置
###
app = create_app(os.getenv(‘FLASK_CONFIG‘) or ‘production‘)

if __name__ == "__main__":
    app.run(host=‘0.0.0.0‘)

那么使用gunicorn命令行来启动Flask非常简单:

(venv3)# gunicorn -w 3 wsgi:app -b 0.0.0.0:80
说明:
-w 3 是启用3个进程,建议是CPU核数*2 + 1
wsgi:app 其中wsgi代表当前目录下的wsgi.py模块,后面的app代表wsgi.py模块里面的Flask应用app

如果你能通过VPS的IP正常访问Flask应用,那么通过指定gunicorn配置文件来启动Flask,比如:

# mkdir deploy
# vi deploy/gunicorn.conf.py

内容如下:
import multiprocessing

# bind = ‘127.0.0.1:8001‘
bind = ‘unix:/run/gunicorn.sock‘
workers = multiprocessing.cpu_count() * 2 + 1
# daemon = True
pidfile = ‘/run/gunicorn.pid‘
loglevel = ‘info‘
errorlog = ‘/tmp/gunicorn-error.log‘
accesslog = ‘/tmp/gunicorn-access.log‘
access_log_format = ‘%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"‘

更详细的配置可以参考Gunicorn官方示例

那么,此时启动Flask变成:

(venv3)# gunicorn wsgi:app -c deploy/gunicorn.conf.py

想查看完整的内容,请访问我的个人博客: http://www.madmalls.com/blog/post/deploy-flask-gunicorn-nginx-supervisor-on-centos7/?q=gunicorn

原文地址:http://blog.51cto.com/wangy8961/2117429

时间: 2024-08-24 20:48:01

CentOS7部署Flask+Gunicorn+Nginx+Supervisor的相关文章

Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署

老毛病了,在用某个新框架或新架构之前,总得花时间谷歌和自己折腾一番,才能知道这个框架和架构的优缺点,才会发现自己最喜欢.用的最顺手的的一种.近期在学习python,这里记录一下自己用的一套python web开发的部署环境. 简介 之所以选择Flask,而没选择用的最多的django,是因为现在这个小项目是一个简单的web工具,提供上传文件.数据处理.并下载的功能.简单小巧,没必要折腾Django.而Flask正好是一个Python实现的Web开发微框架,它基于Werkzeug 和 Jinja2

CentOS-7 部署Django----安装Nginx

CentOS-7 部署Django----安装Nginx 在CentOS-7上部署Nginx步骤: 截至此时,Nginx的稳定版本为1.14,已下安装版本为1.14 1.yum的存储库中不存在nginx信息,所以需要预添加: 官方的源:# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 国内的源:# yum install epel-releas

CentOS7中配置基于Nginx+Supervisor+Gunicorn的Flask项目

配置Nginx 1.安装nginx yum install nginx 2.安装好后在/etc/nginx/default.d中添加location的配置,并指向8001端口,以后Gunicorn会监听8001端口 location / { proxy_pass http://127.0.0.1:8001 } 3.配置好后重新载入nginx配置 systemctl reload nginx.service 安装Python CentOS自带Python2.7,如果使用Python3,需要单独安装

Flask + Gunicorn + Nginx 部署

最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + nginx 的 Flask 部署方法,说实在的 uwsgi 是个大坑可能用在 Django 上还好吧,不过用在 Flask 上未必就如此.至少 , uwsgi 是个极为折腾人的东西.总之,我是一直认为复杂的东西未必不好,但一定是不好用的. 我自己也经过多番的纠结与尝试,也终于找到了一个 Flask 上靠谱的

阿里云部署 Flask + WSGI + Nginx 转载详解

我采用的部署方案是: Web 服务器采用 uwsgi host Flask 用 Supervisor 引用 uwsgi 作常规启动服务 基于 Nginx 作反向代理 首先, 阿里云服务器可以通过 SSH 指令在本机的终端进行远程连接 ssh [email protected]云服务器地址 输入密码进入后所有的操作与本地终端完全一至. 安装 Python 环境 接下来是python , Ubuntu 的默认环境已经预装 python 2.7 所以只需要安装 python 的 pip 安装工具即可.

树莓派部署Flask+uWSGI+Nginx过程

转载来自http://blackgu.blogbus.com/logs/171363164.html略作修改 1)安装Flask,uwsgi,nginx Flask:sudo apt-get install python-flask uwsgi:sudo apt-get install uwsgi uwsgi-plugin-python nginx:sudo apt-get install nginx 2)创建Flask工程 这里就用最简单的HelloWorld,创建一个工程目录:myapp,里

python部署-Flask+uwsgi+Nginx

一.Flask部分(app.py) flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力. from app import create_app from singtec_Config import * app = create_app(DEV_MODEL) @app.route('/') def hello_world(): return 'Hello World!!!' if __name__ == '__main__': app.run(ho

Centos7部署Flask

一.安装Apache # yum install -y httpd httpd-devel # systemctl start httpd.service # 启动 # systemctl stop httpd.service # 关闭 # systemctl restart httpd.service # 重启 # systemctl enable httpd.service # 开机自启 防火墙开放80端口 # firewall-cmd --zone=public --add-port=80

如何使用Nginx和uWSGI或Gunicorn在Ubuntu上部署Flask Web应用

我在很多的博客中都看过有关Flask应用的部署,也有很多博主在开博后都记录了部署的教程,因为其中的坑可以说不少.一开始我在网上看到相比较与Ubuntu,CentOS因为更新少作为服务器的操作系统会更加稳定.所以在第一次购买云服务器时,我选择了CentOS,后来由于CentOS不同发行版的Nginx缘故,我又换成了Ubuntu的镜像 首先呢,我们先来了解下关于Web服务器与Web应用还有WSGI之间的联系 一.介绍 WSGI(Web Server Gateway Interface),翻译为Pyt