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 "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 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://root@VPS的IP或域名:VPS的SSH端口号//home/git/flask_project.git
**方法2: ** 在Win10保存SSH秘钥对的目录下创建配置文件 C:\Users\你的Win10用户名\.ssh\config
host VPS的IP或域名
port VPS的SSH端口
然后执行克隆命令:
$ git clone root@VPS的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 **
CentOS7部署Flask+Gunicorn+Nginx+Supervisor的更多相关文章
- 用docker部署flask+gunicorn+nginx
说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...
- Centeos7部署Flask+Gunicorn+nginx
一.环境安装 pip3 install flask pip3 install gunicorn pip3 install nginx 二.模块介绍 1.Flask是一个使用 Python 编写的轻量级 ...
- 基于docker部署flask+gunicorn+nginx
nginx安装在/etc/下,项目映射在docker中的/var/www/下 1.创建docker容器将端口映射出来,将docker外的项目映射到docker中 #docker run -it -p ...
- Centos7 部署.Net Core+Nginx+Supervisor
1.安装.Net Core SDK 1.1. 在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项.这只需要每台机器完成一次. sudo rpm -Uvh https ...
- 基于flask+gunicorn+nginx来部署web App
基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...
- 初次部署django+gunicorn+nginx
初次部署django+gunicorn+nginx 博客详细地址 https://www.cnblogs.com/nanrou/p/7026802.html 写在前面,这只是我所遇到的情况,如果有 ...
- 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署
本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...
- 阿里云部署 Flask + WSGI + Nginx 详解
抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...
- Web项目部署(Flask Angular2 Nginx)
独立弄了一个项目,也是锻炼自己的工程能力,使用了比较常用的框架,后端Flask,前端Angular2,采用前后端完全分离的方式,通过接口传输json,但是在具体部署过程中,查找资料较为零散,故整理如下 ...
随机推荐
- WCF基础二
1:地址 . WCf 的每一个服务都有一个唯一地址,地址包括传输协议和服务位置. HTTP:采用http\https协议进行传输,默认端口为80. TCP:采用ne.tcp协议进行传输,默认端口为80 ...
- linux关机(重启)命令
Linux系统关机命令: #关机命令 1.halt 2.poweroff 3.shutdown -h now 立即关机(具有root权限用户使用)#重启命令 1.reboot 2.shutdown - ...
- (Review cs231n) CNN in Practice
Make the most of your data Data augmentation 加载图像后,对图像做一些变化,这些变换不改变图像的标签. 通过各种变换人为的增大数据集,可以避免过拟合提高模型 ...
- SynchronousQueue------TransferQueue源码分析
不像ArrayBlockingQueue.LinkedBlockingDeque之类的阻塞队列依赖AQS实现并发操作,SynchronousQueue直接使用CAS实现线程的安全访问.由于源码中充斥着 ...
- go语言入门教程:基本语法之数据类型
出处:千锋教育go语言教研部 作者:茹姐 一.基本数据类型 以下是go中可用的基本数据类型 1.1 布尔型bool 布尔型的值只可以是常量 true 或者 false.一个简单的例子:var b bo ...
- 关于BDD100k数据输入处理mask变为56*56
Mask_rcnn数据训练 Mask rcnn往里面送的是数据原图,可能没有把mask送里面,而且mask的数据 56*56,仿照coco——inspect_data重点考虑 Bounding box ...
- 利用python抓取页面数据
1.首先是安装python(注意python3.X和python2.X是不兼容的,我们最好用python3.X) 安装方法:安装python 2.安装成功后,再进行我们需要的插件安装.(这里我们需要用 ...
- Pdf Convert Image 的解决方案
brew uninstall ghostscript brew install ghostscript gs -dNOPAUSE -sDEVICE=jpeg -r150 -sOutputFile=./ ...
- Openssl 升级操作
转自:http://www.cnblogs.com/lzcys8868/p/9235538.html 首先我觉得没事就用绿盟扫漏洞的公司,就是闲的蛋疼,傻逼!不少服务器使用nginx,如果openss ...
- 14: linux实用命令
1.1 基本实用命令整理 1.查找大文件文件 du -sh ./*|grep G # 查看当前目录下个文件大于1G的文件夹 2.查找日志文件中 5xx数量,并进行排序 ...