部署Flask App到Heroku詳細步驟及遇到的問題

0, Heroku

Heroku是老牌的免費雲空間,可以很好的滿足我們學習/研究/實驗/測試的目的,同時,他對Python的支持非常良好。
下面主要針對flask web開發這本書第17章 Flask程序部署到Heroku平臺。
(我使用的操作系統是ubuntu 16.04)

1, 註冊Heroku賬號

進入Heroku官網進行註冊, 163,QQ等應該是不支持的,可以fanqiang Gmail或者Apple的iCloud郵箱去註冊都可以 https://www.heroku.com/ 

其實註冊微軟的outlook郵箱很方便, 推薦用outlook來註冊Heroku,另外不fanqiang的話 直接訪問https://www.heroku.com/註冊,你會發現總是提示 Please confirm you're not a robot.這是由於有一個圖片驗證碼被屏蔽了。。。需要尋找代理服務器 再登錄 詳細可見小白教學-Heroku註冊與登錄

我自己是在安卓手機上下載了客戶端然後註冊的,也很方便

2, 下載Heroku Toolbelt客戶端

安裝這個客戶端就可以讓我們以命令行來操作管理我們在Heroku上的程序。書上說Heroku Toolbelt實際上裝了兩個工具:

Heroku客戶端和Foreman工具,不過我當時發現裝完Toolbelt沒有foreman, 其實也簡單,直接接提示apt install


3, 登錄Heroku

在終端輸入heroku login 按提示輸入剛剛註冊的賬號密碼 
$ heroku login
最後的logged in as [email protected] 表示登錄成功

4, 準備你的Web App

要使用Heroku部署Web App就要使用Git倉庫託管,用git push的方法將程序放上Heroku。git是很優秀的版本託管工具,開發自然少不了和git打交道
4.1安裝Git
下載安裝 https://git-scm.com/downloads ubuntu直接apt install
使用命令行查看git版本
$ git --version
4.2 生成git倉庫
在Web程序的目錄下,命令行輸入
$ git init #初始化倉庫

接着將文件託管到git倉庫, 請不要忘記將migrations文件夾中的versions文件夾一起託管

$ git add .
$ git commit -m "v1.0" #版本號v1.0

5, 用Heroku創建app

命令行
$ heroku create <appname> #你的app的名字
$ heroku apps #查找你的heroku的app程序
$ heroku apps:destory <appname> #刪除app程序

6, 配置數據庫

創建好app程序後開始配置數據庫,Heroku可以支持Postgre數據庫,這裏我們就用這個。

$ heroku addons:create heroku-postgresql:hobby-dev
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-asymmetrical-71831 as HEROKU_POSTGRESOL_BROWN_URL
Use heroku addons:docs heroku-postgresql to view documentation

出現以上字樣表示配置成功,HEROKU_POSTGRESOL_BROWN_URL中保存了數據庫的URL 這個環境變量的名字並不是一定是這個。。。用下面命令將數據庫地位提升,把URL保存到環境變量DATABASE_URL中

$ heroku pg:promote HEROKU_POSTGRESOL_BROWN_URL
Promoting HEROKU_POSTGRESOL_BROWN_URL to DATABASE_URL ...done

此處DATABASE_URL 就是SQLAlchemy所需要的,config.py腳本中設定的DATABASE_URL, 此時程序可以自動連接到Postgres數據庫

7, 檢查我們的必要文件

Heroku要求在我們的Web程序(Python Web)目錄中必須要有下面的兩個文件:
requirements.txt ProcfileProcfile沒有後綴(不要問我是怎麼知道的。。也請不要拼寫錯誤)Profile的內容就是
web: gunicorn manage:app

requirements.txt文件如下: 版本號麻煩寫自己安裝的

-r requirements/prod.txt
gunicorn==18.0
psycopg2==2.5.1

其中prod.txt 又引用了common.txt common.txt一般都用pip freeze>common.txt生成 最初我也是這樣操作 生成了一大片的包,但是push heroku master時,就出現了 無法安裝apurl的對應版本 而apurl就是pip生成的一個需求包 查資料發現兩篇好文 

如何解決Python包依賴問題 常用python包(依賴)Ubuntu下

大意就是 pip 生成了很多的python依賴包,而我們需要的只是工程中import 庫包 推薦用pipreqs

  1. pip install pipreqs #安裝軟件
  2. #切換到項目目錄下
  3. #生成requirements.txt到項目根目錄
  4. pipreqs --use-local ./

這下生成的包少了一大半喲

8, 進行git push部署

$ git push heroku master
....
To [email protected]:<appname>.git
* [new branch]  master -> master

看到上面字樣就部署成功啦,但還沒法正常使用

9, 配置數據庫表並重啓程序

$ heroku run python manage.py deploy
$ heroku restart
Restarting dynos ... done

下面可以通過https://<appname>.herokuapp.com/  這個書上寫的是hero-kuapp.com 哈哈 昨晚到快11點了 我第一次訪問沒有訪問到 簡單傷心死 還好進了heroku帳戶看了哈 才找到正確的網址 可以訪問了 超級有成就感呀 <-->

0, 部署一次升級

可以訪問了纔是漫漫調試第一步,後續要修改,升級heroku程序前,所有改動提交到git 倉庫,按下面命令進行升級:

$ heroku maintenance:on
$ git push heroku master
$ heroku run python manage.py deploy
$ heroku restart
$ heroku maintenance:off

Heroku客戶端提供的maintenance命令會在升級過程中下線程序,並向用戶顯示一個靜態頁面,告知網站很快恢復。。。目前還沒有用過升級功能,先把知識碼在這



感謝下面作者:

部署Flask App到Heroku完整過程 - CSDN博客

如何解決Python包依賴問題

常用python包(依賴)Ubuntu下

小白教學-Heroku註冊與登錄 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章