用 fly.io 部署餐廳論壇

Liyli Wang
7 min readMar 9, 2023

--

🌟須知

主要流程為:

擁有 fly.io 帳號 
-> 建立資料庫專案
-> 資料庫雲端建立
-> 針對欲部署的專案進行修改
-> 前往 workblench 連線遠端資料庫建立資料表
-> 測試部署是否成功

環境:

作業系統:Windows 10
專案:Express + Sequelize + MySQL

🌟本文開始

🚩 建立帳戶

fly.io 建立帳戶,並新增信用卡,要新增信用卡才能使用「基本免費部署」服務。

🚩 找尋到「Install flyctl」文件區塊

fly.io 文件 中找尋 ( 或用 Search bar 輸入關鍵字 ) 「Install flyctl」文件區塊點進去 ,我這邊是 Windows,所以開啟「命令提示字元」或使用 「VS Code Terminal」輸入以下指令,下載完成建議將「VS Code」關閉,再重啟「VS Code」。

Windows: powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"
Mac: brew install flyctl 或 curl -L https://fly.io/install.sh | sh

🚩 登入 fly.io

終端機輸入下方指令會跳轉到登入 UI 畫面,按登入

fly auth login

🚩 找尋到「Use a MySQL Database」文件區塊

同樣文件「Use a MySQL Database」區塊,跟著文件內容在某個目錄下 ( 不是在專案裡 ),要建立一個名為 my-mysql 的空資料夾 ( 我是建立在跟要部署的專案同一個目錄下 ),手動或用文件提供的指令建立皆可,要取什麼名稱都可以,但希望之後協助能夠更順暢,建議照著 Doc 的名稱走。

//指令也可以直接參考這裡

mkdir my-mysql
cd my-mysql

🚩 VS Code 打開剛剛建立的空資料夾

依序輸入以下指令,並附上成功完成的圖片參考

//輸入此指令,系統會要求你輸入主機名稱,可以按 enter 請系統幫我們設定
fly launch
//1. 此指令我的理解為規劃 database 為 1GB,若有誤再請大大回饋~~ 感恩~~
//2. 輸入此指令完會被要求選擇主機區域,我是選擇 Tokyo 按下 enter,
// 請求區域離主機所在位置(這邊指的是 ToKyo)越遠,使用服務所需的時間就會越長。

fly volumes create mysqldata -- size 1
fly secrets set MYSQL_PASSWORD=password MYSQL_ROOT_PASSWORD=password

🚩 修改「fly.toml」檔案

接著針對因上方指令而產生的「fly.toml」檔案進行修改,記得修改時一定要照「fly.toml」檔案格式進行新增修改,格式可以參照「fly.toml」其他參數寫法,不然會出現錯誤訊息,修改如下

修改完成執行以下指令,這邊附上成功訊息圖片

//成功訊息基本都是差不多在整串訊息的最尾端會有,
//「v + 數字 + deployed + successfully」這樣的訊息組成架構,
//因此後面就不會在重複說明囉~

fly deploy

🚩 前往 fly.io Dashboard 查看建立狀態

成功建立都會有「綠勾勾」,2 GB 應該是當初後續重新下指令我不小心按錯沒有注意到,應該要是「1GB」,朋朋們再留意一下。

Dashboard 結果

🚩 VS Code 打開要部署的專案

跟剛剛的流程蠻像的,輸入「 fly launch」指令建立 fly.toml 檔案,打開 fly.toml 要在這邊建立環境變數 ( 依照你的專案 .env 內容為主,基本上就是複製貼上 xd )、以及資料表 migrate 指令,程式碼如下

🚩 針對 production 環境設定

前往專案的 config.json,針對 production 環境建立資料庫連線相關內容( 因為我是用 sequelize 所以有這個檔,請朋朋依不同專案做調整 ) 如下:

app.js 將 port 3000 改為 8080,程式碼如下

設定完成就可以輸入以下指令,將目前修改內容更新到遠端,一樣到 fly.io Dashboard 查看

fly deploy
Dashboard 結果

🚩 新增資料表

  • 由於遠端資料庫不提供直接連線進行操作,因此要使用 fly.io 提供用 localhost 監聽本地端 3306 方式對接遠端資料庫 3306 port。
  • 但因為本地端我有下載 MySQL,因此 3306 目前是本地端的 MySQL 正在使用,所以要找替代方案「13306 port」
  • 要將預設用本地端 port 3306 換成 13306 port,要如何換呢? Windows 可以透過在終端機輸入下面第一個指令,達到這件事情。
  • 若我沒有在本地端安裝 MySQL,則可以直接參考第二個指令~
  • 連線成功如下圖
//此指令表示 remote 連線遠端資料庫
1. flyctl proxy 13306:3306 -a <輸入在 my-mysql/fly.toml 的 app 參數欄位的值>
2. flyctl proxy 3306 -a <輸入在 my-mysql/fly.toml 的 app 參數欄位的值>

🚩 前往 Workbench 建立資料表

因為目前文件提供的指令 Windows 需要做一些設定才能使用,解決方案是前往 Workbench 手動建立資料表,資料表成立才能進行 Migrate & Seed 指令,資料表建立 SQL 語法,刷新確認建立成功,記得要確認遠端連線成功 (出現上圖訊息),才能用 Workbench 連線,不然會出現無法連線的錯誤訊息

//資料表名稱要根據 config 為主
create database [這邊是資料表名稱] character set utf8mb4 collate utf8mb4_unicode_ci
Workbench 建立資料庫連線,記得要輸入密碼
指令/手動產生出的資料表

🚩 建立種子資料

前面一個步驟,朋朋們應該有發現有出現 migrate 成功的相關訊息,
但因為目前還沒找到可以輸入兩個以上指令的方法,所以要 seed 的指令分到第二次設定執行。

因此接著終端機 Ctrl + C 跳出遠端連線狀態,根據下方內容修改完再「fly deploy」 一次,順利應該會看到 seed 建立成功相關訊息。

Dashboard 最後成果

🚩 最後打開網址、資料庫操作看看確認剛剛的操作是否成功

根據紅底線路徑找尋專案主機,點選「Hostname」也就是黃線位置就可以打開網址測試囉~

成功部署 ~ !

資料來源:

  1. V 大
  2. https://fly.io/

--

--