Flask 基于 Ubuntu+Gunicorn+Supervisor+Nginx 部署

踩了一天半的坑,终于爬出坑了!
不得不说现在博客真是天下一大抄,翻遍了 Google, 不是翻译的国外博文,就是抄国内原创博文, 连项目名,代码都不改.
废话不多说, 上文章!
有任何问题可直接评论,看到后会回复.

首先声明配置信息:
服务器依旧为 Ubuntu 17.10 (网上其他部署博文使用的大部分为14.04, 或者16.04.
此篇文章选择因为17.10版本以下的 Ubuntu Python3的版本通过 apt-get update 更新的版本号是3.4.3
而 17.10 直接更新为 Python3.6.3)

云提供商为 Google Cloud (各大提供商没有什么区别,随意选)

步骤

  • 1.链接服务器
  • 2.更新系统,为了安全
  • 3.安装 pip3
  • 4.安装 virtualenv
  • 5.激活虚拟环境
  • 6.创建 flask 项目, 配置项目, 安装所需库
  • 7.安装并配置 gunicorn
  • 8.安装并配置 Supervisor
  • 9.安装并配置 Nginx
  • 10.大功告成!

开始动手

一、链接服务器

链接服务器一般选用 ssh, 如果是 Windows 可以考虑 xshell
MacOS 强烈推荐 iTerm2, 配合 oh-my-zsh 爽翻天

二、更新系统,为了安全
#使用以下命令更新补丁,还有好多的 lib
sudo apt-get update
sudo apt-get dist-upgrade
三、安装 pip3
#如果你选择用 python2 就把下面命令的3去掉就可以了
sudo apt-get install python3-pip

四、安装 virtualenv

#安装虚拟环境, 在这个环境里并不会影响真实系统的环境
sudo pip3 install virtualenv

五、激活虚拟环境

#前进到 你的工程文件目录, 我的工程目录为/home/yaotiancheng/mysite
cd /home/yaotiancheng/mysite

#创建虚拟环境
virtualenv ENV

#进入虚拟环境
source ENV/bin/activate

#退出虚拟环境(只是让你记住啊..先别执行此句, 会告诉你合适退出虚拟环境)
deactivate

六、创建 flask 项目, 配置项目, 安装所需库

从最简单的项目上手

vi app.py

# 将以下代码放到 app.py 里,如果你有更完整的 flask 项目, 那就使用你自己的

# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)

接下来安装所需 lib

# 这里执行的所有操作都在虚拟环境中,并没有退出
# 如果你有 flask 项目 直接从 requirment.txt 安装即可,然后可以略过该步骤里的所有东西
pip install -r requirment.txt

# 如果你是一个新手, 跟着我接下来走
pip install flask
pip freeze > requirment.txt

#执行到这里,基本的库文件已经装好了, 而且该目录内会生成一个 requirement.txt 记录着你项目安装的库文件以及版本
cat requirment.txt

#这是可以测试项目是否可以运行
python app.py

#如果不出意外(PS :这个地方一般也没啥意外) ,打开你的 ip:8000就可以看到你的网页或者一个简单的 Hello World

# 退出此次进程运行
Ctrl + C 

七、安装并配置 gunicorn

#安装 gunicorn (还是在虚拟环境中,并没有退出)
pip install gunicorn

接下来提供另外一个文件 wsgi.py, 放置位置为工作目录的根目录 也就是我的 /home/yaotiancheng/mysite

# -*- coding: utf-8 -*-

import sys
from os.path import abspath, dirname

sys.path.insert(0, abspath(dirname(__file__)))

# 这个 app 就是上面的 app.py
import app

# 必须有一个叫 application 的变量
# gunicorn 就要这个变量
# 没有为什么,必须要这个文件..
# app.app 就是 app.py 里的 flask 的实例对象
application = app.app
# 用 gunicorn 运行 flask
gunicorn wsgi --bind 0.0.0.0:2000
# 不出意外, 应该和单独运行 `python app.py` 一样, 也可以看到网站跑起来了,接下来配置自动运行

八、安装并配置 Supervisor

在这里可以退出虚拟环境!!!!不退出也没什么关系!!!!!

sudo apt-get install surpervisor

# 开始编辑项目的配置文件 xxx 随意定
vi /etc/supervisor/conf.d/xxx.conf

# 以下为该配置文件的内容


# 进程名
[program:mysite] 
# 需要执行的命令 (一定要指定虚拟环境的 gunicorn 来执行) pid 那个就是套路,就是要写,没为什么.
command=/home/yaotiancheng/mysite/ENV/bin/gunicorn wsgi --bind 0.0.0.0:2000 --pid /tmp/mysite.pid
# 工作目录路径
directory=/home/yaotiancheng/mysite
# 自动运行 肯定是 true 啦
autostart=true

接下来启动该进程(命令中的 status 只是为了让你看到 supervisor 的状态变化,因为现在执行 restart并不会提示你 suepervisor 的状态变更信息, 用 status 来确认自己每一步都有效果

# 查看一下 supervisor 的状态
service supervisor status

# 关闭 supervisor
service supervisor stop

# 再查看一下 supervisor 的状态
service supervisor status

# 启动 supervisor
service supervisor  start

# 再查看一下 supervisor 的状态,确定supervisor是启动的
service supervisor status

# 另外可以通过 supervisorctl 来控制进程的启动, mysite 为你配置文件的 program 后面的名字
supervisorctl restart mysite

到目前为止你已经可以通过IP:端口号来访问你的网站了,重启服务器也没有问题.
接下来是配置 Nginx

九、安装并配置 Nginx

# 安装 Nginx
 sudo apt-get install nginx

可以直接访问 IP 看到 Nginx 的欢迎页面了,接下来配置转发.

提供配置文件 xx.conf( xx 为任意英文/数字字符)

server {
    listen 80;
    server_name 这里为你的IP 地址/ 域名;

    #符号表
    charset utf-8;
     # 最大上传文件
    client_max_body_size 75M;
    #静态文件路径
    location /static {
            alias /home/yaotiancheng/mysite/static;
        }

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        # 这里的地址要与你在 supervisor 里面相同
        proxy_pass         http://127.0.0.1:2000;
    }

}

这个配置文件可以放在工程目录内,想 Nginx 配置文件做软连接即可

更改为,重启 Nginx 或者 重新读取一遍 Nginx 配置文件即可.

十、大功告成!

到这里一般你的网站就已经布置好了,有什么问题块可以留言. 踩了无数的坑终于把网站部署好了...

感谢以下文章提供的帮助:

Nginx配置文件(nginx.conf)配置详解

感谢萧井陌大神提供的学习路线.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容