[ASP.net core] 把 asp.net core app 推上 fly.io

[ASP.net core] 把 asp.net core app 推上 fly.io

[ASP.net core] ASP.net core + React + docker deploy to fly.io


2023/01/13 13:58:20

自從 Heroku 取消免費 dyno 方案之後,客家人如我就逃竄到其他平台去了,後來我找到了 flyio,免費額度可以開 3 台 VM,扣掉一台保留作 build machine 還有兩台,綁卡可以增加到十台,其他像對外流量、硬碟空間等都還算夠用。

那接下來就是紀錄下把 Asp.net + react 專案部屬上 flyctl 的過程

建立專案

專案建立時選擇「搭載 React.js 的 ASP.net Core」

在建立一般 ASP.net 專案的時候會有「啟用 docker 支援的選項」,但是搭載 React.js的沒有,這部分我們等下會手動建立。

啟用 docker 支援

在專案上右鍵 > 加入 > docker 支援,選擇 Linux

完成後會自動打開 Dockerfile 文件,我們需要改裡面的內容:

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build 底下加上

# nodejs (build)
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs

在本地用 docker 測試

Properties > launchSettings.json

"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "https://{ServiceHost}:44436",
"publishAllPorts": false,
"useSSL": false
}

上面的 port 44436 依專案而定,看加 docker 之前用哪個 port 跑的就是哪個 port。

Deploy to flyio

接下來我們可以直接發布到 flyio

flyctl launch

首次 deploy 後會自動生成一個 fly.toml 檔案,有些情況下 listen port 會是錯的,要確定 internal_port 是 80

...
[[services]]
http_checks = []
internal_port = 80
...

再次 deploy 即可成功

flyctl deploy