0%

Asp.Net Core 部署到 【Heroku】

前言

將網站開發完成之後,最後都會部署到機器上面來提供服務和測試。如果是部署到雲端平台 (ex:Azure, AWS, GCP…) 可以大幅簡化部署和維護的工作,但這篇選擇使用 Heroku 雲端平台,因為它有長期的免費方案可以使用 (前面提到的平台有提供短期的免費方案) ,包含有 PostgresSQL 資料庫和 SSL憑證,很適合作開發和測試一些小項目💖

Heroku 特點

  • 操作界面簡單,容易上手

  • 支援 Docker 部署

  • 主機 (作業系統 Linux)

    提供免費每個月 550 個小時的運行時間,如果開通信用卡,還會額外增加 450 個小時的免費時數
    缺點是使用免費額度的版本,如果30分鐘未被使用,主機會自動休眠,重新喚醒大約要20~30秒
    主機使用額度

  • 資料庫 (PostgreSQL)

    提供最大連線數20, 資料筆數10000筆的免費使用量
    資料庫使用量

Asp.Net Core 部署 (使用 Docker) 版本 .NET Core 3.1

選擇使用 Docker 的方式部署,如果之後想改成別的雲端平台會比較方便

  1. 建立專案時選擇支援 Docker 且為 Linux 版本 (或則自己加上DockerFile)
    建立專案

  2. 修改 DockerFile

  • 將Entrypoint那行改成Cmd的指令將Entrypoint那行改成Cmd的指令
    1
    CMD ASPNETCORE_URLS=http://*:$PORT dotnet 專案名稱.dll
  1. Heroku 註冊會員並建立好 App

    建立 App 建立 App2
  2. 開啟CMD小黑窗,下面開始輸入指令做事

    開啟小黑窗
  3. 建立 DockerImage

    1
    docker build -t registry.heroku.com/HerokuAPP名稱/web .
  4. 安裝 Heroku CLI

  5. 如果以前有安裝過 Heroku CLI 的話,可以先進行更新

    1
    heroku update
  6. 登入 Heroku 和 Heroku Container

    1
    2
    heroku login
    heroku container:login
  • 會彈出登入頁面,點一下即可完成登入,CMD視窗會有登入成功的訊息登入頁面
  1. 執行 DockerFile 建立 Image 並推送

    1
    heroku container:push web -a HerokuAPP名稱
  2. 進行部署

    1
    heroku container:release web -a HerokuAPP名稱

    部署完成

  3. 開啟 APP 測試
    開啟測試1
    開啟測試2

  • 之後有調整程式碼,要再次部署時只要執行下面指令即可

    重新建立Image => 登入Heroku => 登入HerokuContainer => 推送 => 部署

    1
    2
    3
    4
    5
    6
    先清除舊的image
    docker build -t registry.heroku.com/HerokuAPP名稱/web .
    heroku login
    heroku container:login
    heroku container:push web -a HerokuAPP名稱
    heroku container:release web -a HerokuAPP名稱

心得

Heroku 部署除了Docker之外還有Git的方式,但相比之下使用Docker比較簡單一些,可移植性也比較好,就選擇Docker的部分來測試。之後有空再來研究,使用GitLab版控並自動部署到Heroku


References