在阿里云部署 Flask 应用

原文首发于CSDN,略有增删

在阿里云部署 Flask 应用

本文简单记录在阿里云部署 Flask 应用的过程。由于我的应用是业余的,Demo 性质的(在简书中有说明过初衷),很多操作也是现搜现用,怎么方便怎么来,所以并不适合真正的生产要求。这更有点像是知乎问题“自己拥有一台服务器可以做哪些很酷的事情?”的一个稍稍跑题的回答吧。

云服务器购买

双十二时以 1 折(¥799.00/3年起)购买了一台ECS共享型n4服务器。操作系统选择了 ubuntu_18_04_64,因为 Ubuntu 比 CentOS 更适合“把玩”。

环境搭建

前期准备

  1. 安装本地 SSH 客户端

我本地是 Windows 系统,可以选择的有 SecureCRT,Putty,Bitvise SSH 等。最后我选择的是 Bitvise SSH,个人用户免费,界面也友好。可以在官网下载(速度慢),也可以在 CSDN 资源下载

  1. 添加安全组规则

在阿里云控制台,添加“入方向”的安全组规则,端口范围:80/80,授权对象:0.0.0.0/0。这样才能通过 80 端口访问你的 Web 应用程序。

添加安全组规则
  1. 域名解析

我的域名也是在阿里云注册的,可以在域名控制台进行域名解析设置。主机记录填写“@”或“www”域名前缀,效果是“http://example.com/”或“http://www.example.com/”。记录值填写云服务器外网 IP。

域名解析设置

软件安装

在安装软件前,先通过 SSH 客户端连接到云服务器,更新系统软件源。没有通过更新系统软件源的话,可能无法通过apt install安装我们需要用到的软件 :

$ sudo apt update 
$ sudo apt upgrade

安装 Python 虚拟环境管理工具

Python 虚拟环境管理也有很多工具,如 pyenv + virtualenv/venv + virtualenvwrapper 等。我平时主要是在 Windows 下工作,习惯了 Anaconda,所以在服务器上也选择 Anaconda。但对于常规的 Python 开发来说,Anaconda 太重了,而且主要面向科学计算领域,但是精简版的 Miniconda 却是一个很好的 Python 版本和虚拟环境管理工具。可以根据官方文档Installing on Linux进行安装,不过在官网下载安装文件有可能很慢,在清华大学开源软件镜像站下载就快很多了。

安装 Gunicorn

在安装完 Miniconda 后创建 Python 虚拟环境,然后在虚拟环境中安装 Gunicorn:pip install gunicorn

安装 Nginx

除了源码编译,如果想方便,用简单的apt命令就可以安装了,apt install nginx,安装完毕可以用curl测试是否成功,curl IP,如果不是返回...Failed to connect to...字样的信息则是成功了。

安装 Supervisor

Supervisor 是一个进程管理工具,当进程中断的时候 Supervisor 能自动重新启动。同样可以用apt命令安装,apt install supervisor

应用部署

在安装完必须的软件后就可以开始正式部署了,首先上传应用文件到云服务器,可以直接 FTP 上传,也可以先上传到 GitHub,然后通过 git clone下载。然后安装应用依赖,进入 Python 虚拟环境执行命令:pip install -r requirements.txt

配置 Gunicorn

Gunicorn 支持以 Python 文件配置,更详细的配置可参考官方文档http://docs.gunicorn.org/en/stable/settings.html#settings,以下是我自己的配置,gconfig.py:

from gevent import monkey
monkey.patch_all()
import multiprocessing
debug = False
loglevel = 'debug'
bind = 'localhost:5002' # 绑定与Nginx通信的端口
pidfile = 'log/gunicorn.pid'
logfile = 'log/debug.log'
workers = multiprocessing.cpu_count() * 2 + 1 # 开启的进程数
worker_class = 'gevent' # worker 进程的工作方式
reload = True

配置 Nginx

先备份 /etc/nginx/sites-available/default 文件,修改为 default_old,然后再创建 default 文件。

mv default default_old
vim default

然后输入以下内容,这是我的配置具体根据实际情况不同修改,需要注意的是要和前面 Gunicorn 绑定的端口号要一致:

server {
        listen 80; 
        root /www/ebox001;
        server_name mfzxs.com;
        location / {
            proxy_set_header x-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_pass http://localhost:5002/; # Gunicorn 绑定的端口号
        }
        # 配置static的静态文件:
        location ~ ^\/static\/.*$ {
            root /www/ebox001;
        }
}

修改配置文件后用nginx -t检查文件,最后重新加载配置文件nginx -s reload

配置 Supervisor

/etc/supervisor/conf.d/目录下创建控制进程的配置文件,并以.conf结尾,这样将会自动应用到主配置文件当中,创建后添加如下的配置内容,[program:ebox001]ebox001是进程名,gconfig.py是 Gunicorn 的配置文件:

[program:ebox001]
command=/www/ebox001/venv/bin/gunicorn -c /www/gconfig.py run:app
directory=/www/ebox001  //项目目录
user=root
autorestart=true //设置自动重启
startretries=3  //重启失败3次

保存配置文件之后,我们需要通过命令来更新配置文件:supervisorctl update,然后通过supervisorctl进行管理,start ebox001这时 Gunicorn 服务器应用就已经启动了。可以通过curl IP进行测试,或者直接在浏览器上输入域名访问,譬如我的应用是:
http://www.mfzxs.com/news_at_zhihu

原域名为企业备案,现以迁移到个人备案站点 ebox001 :https://www.ebox001.com/news_at_zhihu 数据也放在了 GitHub 上,仓库地址:https://github.com/JeetChan/history_json_daily_zhihu

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

推荐阅读更多精彩内容