利用免費fly.io空間,部署Laravel並連接MySQL資料庫(二)

閱讀時間約 12 分鐘

根據上一篇部署完畢Laravel 專案後,本章要來幫線上專案設定資料庫,fly.io 部署MySQL免費容量是3GB,在設定的時候要記得設定size,避免超過要收費。

接下來來建置mysql 應用程序並創建屬於 mysql volume ,避免數據資料遺失,而一個 volume 只能綁定一個應用程序,其他應用程序不可以共享,且volume設定的區域必須要跟運行的Laravel專案是同一個區域才能訪問它

創建MySQL 應用程序

首先我們先來創建屬於mysql 應用程序

// 創建一個資料夾
mkdir demo-mysql

//切到​資料夾
cd demo-mysql

// 創建 mysql app
fly launch
raw-image

接著執行 fly launch,我將專案命名為demo-mysql,並選擇區域與一開始的laravel專案一樣是region = Tokyo

raw-image
raw-image

這邊執行完畢可以看到flyctl幫我創建了一個fly.toml的檔案

raw-image

接著創建 volume 名字設定為剛剛取的 demo-mysql,fly.io文件給的是默認SIZE 10,這邊我們改為SIZE 3GB 避免要被收費,這邊要注意的是命名 volume 名稱僅允許使用字母數字字符和下劃線,最多 30 個字符

fly volumes create demomysql --size 3 # gb
raw-image

接著會出現一段紅字警告

Warning! Individual volumes are pinned to individual hosts. You should create two or more volumes per application. You will have downtime if you only create one. Learn more at https://fly.io/docs/reference/volumes/

raw-image

這段文字只是通知建議你至少要配置兩個以上的volumes 給你的應用程式,不過我們小專案不管他,直接給他YES下去

接著一樣選擇區域Tokyo

raw-image

創建完畢後可以看到 volumes 訊息

raw-image

接下來設定mysql secrets,加密我們的mysql 密碼們

# Set secrets:
# MYSQL_PASSWORD - password set for user $MYSQL_USER
# MYSQL_ROOT_PASSWORD - password set for user "root"

fly secrets set MYSQL_PASSWORD=password MYSQL_ROOT_PASSWORD=password
raw-image

接著編輯fly.toml設定改成下列這樣,這是fly.io V2版的寫法,根據官網說法使用mysql 8.0版本在記憶體空間上,可能會有不足,故以下語法可以增加記憶體(這邊我先不採用,避免產生額外費用)

// Give the vm 2GB of ram
fly scale memory 2048

fly.toml 檔案設定如下

app = "demo-mysql"
kill_signal = "SIGINT"
kill_timeout = 5

# 這是選擇的地區​
primary_region = "nrt"

[processes]
app = '--datadir /data/mysql --default-authentication-plugin mysql_native_password --performance-schema=OFF --innodb-buffer-pool-size 64M'

[mounts]
source="mysqldata"
destination="/data"

[env]
MYSQL_DATABASE = "laravel "
MYSQL_USER = "non_root_user"

# 使用mysql 8版本​
[build]
image = "mysql:8.0.32"

修改完畢後,就可以開始部署我們的 mysql 了

fly deploy

部署完畢後圖案就會從板手改成打勾

raw-image
raw-image

設定完成後因為 volumes 是存放在在fly.io主機上,要確認線上資料庫的連線,需要透過 WireGuard 進行連接,在demo-mysql專案裡使用flyctl proxy連接到主機並映射到本地。

// 使用這段本地連接遠端主機​
flyctl proxy 3306 -a demo-mysql​

//如果 3306 port衝突可修改以下
​flyctl proxy 13306 -a demo-mysql

這裡映射完畢後可以利用本地MySQL GUI 開啟,記得這裡的shell要一直開著。

raw-image

使用 root 帳號登入,發現沒有額外設定的MYSQL_USER = "non_root_user"的帳號,在使用連線資料庫時應該避免使用root帳號操作,故這邊們額外添加 non_root_user 帳號權限

raw-image
// 登入 root 帳號
mysql -u root -p password (你的root密碼)
// 登入後設定額外帳號權限​
CREATE USER 'non_root_user'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON laravel.* TO 'non_root_user'@'%';

FLUSH PRIVILEGES;
raw-image

接下來我們要將我們 laravel 專案設定demo-mysql 連線方式,並執行migrate確認資料庫有正常將 table 塞進去

根據官網文件說明,有四種方式可以進行設定遷移

  1. 通過fly.toml [deploy] 配置(將在每個部署中運行)
[deploy]
release_command = "php /var/www/html/artisan migrate --force"
  1. 通過以下中的啟動腳本.fly/scripts:
echo "/usr/bin/php /var/www/html/artisan migrate --force" > ".fly/scripts/db.sh"
  1. 通過fly ssh consol
fly ssh console -C "php /var/www/html/artisan migrate --force"
  1. 通過fly ssh console:
fly ssh console
cd /var/www/html/
php artisan migrate --force

這邊選擇使用修改fly.toml的方式,在fly.toml增加release_command = "php /var/www/html/artisan migrate --force",執行部署時更新migrate

設定Laravel 專案連線資料庫

先修改fly.toml [env]加上資料庫資料,這邊 host 在創建時,命名app應用程序為demo-mysql,在設定fly.toml DB_HOST的規定需要加上.internal。

DB_DATABASE 對應demo-mysq 資料夾 fly.toml[env]上的MYSQL_DATABASE = "laravel"

DB_USERNAME 對應demo-mysq 資料夾 fly.toml[env]上的MYSQL_USER = "non_root_user"

DB_CONNECTION = "mysql"
DB_HOST = "demo-mysql.internal"
DB_DATABASE= "laravel"

完整設定laravel fly.toml 檔案如下

app = "laravel-demo-v1"
primary_region = "nrt"
console_command = "php /var/www/html/artisan tinker"

[build]
[build.args]
NODE_VERSION = "18"
PHP_VERSION = "8.1"

[deploy]
release_command = "php /var/www/html/artisan migrate --force"

[env]
APP_ENV = "production"
LOG_CHANNEL = "stderr"
LOG_LEVEL = "info"
LOG_STDERR_FORMATTER = "Monolog\\Formatter\\JsonFormatter"
SESSION_DRIVER = "cookie"
SESSION_SECURE_COOKIE = "true"
DB_CONNECTION = "mysql"
DB_HOST = "demo-mysql.internal"
DB_DATABASE= "laravel"
DB_USERNAME="non_root_user"

[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]
raw-image

接下來是 laravel 本身.env的設定,修改DB_USERNAMEDB_PASSWORD的部分,並將APP_ENV環境變數改成正式站,到時候執行時才可以正確執行migrate

raw-image

再來記得把敏感資訊加密(註:為方便理解跟如何填寫故呈現出來,這邊機敏資料會改掉,不用擔心,第一次練習也要避免將機敏資料公開歐)

fly secrets set DB_USERNAME=<MYSQL_USER> DB_PASSWORD=<MYSQL_PASSWORD>

設定完畢後執行部署

fly deploy
raw-image

測試資料庫Mirgate

部署成功後,因部署後因為我們有設定release_command = "php /var/www/html/artisan migrate --force" ,故在執行deploy時會一併執行migrate,來看看資料庫是否有table資料

raw-image

接著我們來測試資料庫執行,這邊試著執行migrate:rollback,確認可以直接操作資料。

因為我們正在操作production 環境變數的資料庫,故Laravel 會跳出畫面,這邊選擇Yes

raw-image

接著系統執行

raw-image

我們再確認一次資料庫是否已經都rollback了,這邊可以看到 table 都回到原始狀態了,確認操作資料庫沒問題,接下來就可以開始試著開發一些有趣小專案哩

raw-image


小結:

這邊利用fly.io 嘗試將小專案部署上去,利用免費空間來簡單製作一些流量不大的side project,且亦不用額外設定SSL的問題,部署完畢又直接幫我們產生網址,可以直接丟給朋油們看看小作品的畫面,也可以多練習CRUD的功能,接著下一步大家可以試著簡單做出一個TodoList 並存到資料庫,部署給朋油玩玩看吧~摳丁愉快~



需要看第一章節的可以往這裡走~

利用免費fly.io空間,學習如何部署第一個Laravel 專案!(一)

文件參考

https://fly.io/docs/app-guides/mysql-on-fly/

https://fly.io/docs/laravel/the-basics/databases/























15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
通常練習開發時,總不知道選擇哪些方便的GUI工具協助簡化工作,新手時期通常都會搭配MAMP or XAMPP本身的 phpmyadmin 使用,雖然沒有不可以,但在職場上通常都是跟著同事們用一樣的版本工具,這邊介紹市面上常見且好用的 MySQL GUI 工具,幫助開發人員減少工作量
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
常說,科技始終來自於人性,而懶惰就是人創造東西的動力 為了解放雙手,創造更多時間價值,這邊我們要先理解什麼是crontab,並利用crontab的設定來幫我們處理例行性任務,並延伸到 aws EventBridge 去設定定時排程,去定時執行我們的爬蟲~
根據PHP官方說明,浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
最近開了複委託打算定期定額買美股,主要因為交割戶是設定外幣帳戶交割,先前設置了常用銀行的外幣到價通知,但是美金最近一直逆空高灰,幾乎不會啟動到價通知🥲,只好一直關注銀行即期價格,但因為上班常常會忘記要看一下外幣網銀換匯優惠,故想說練習python之餘,並順便做個爬蟲將資料發送到line群組
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
通常練習開發時,總不知道選擇哪些方便的GUI工具協助簡化工作,新手時期通常都會搭配MAMP or XAMPP本身的 phpmyadmin 使用,雖然沒有不可以,但在職場上通常都是跟著同事們用一樣的版本工具,這邊介紹市面上常見且好用的 MySQL GUI 工具,幫助開發人員減少工作量
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
常說,科技始終來自於人性,而懶惰就是人創造東西的動力 為了解放雙手,創造更多時間價值,這邊我們要先理解什麼是crontab,並利用crontab的設定來幫我們處理例行性任務,並延伸到 aws EventBridge 去設定定時排程,去定時執行我們的爬蟲~
根據PHP官方說明,浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
最近開了複委託打算定期定額買美股,主要因為交割戶是設定外幣帳戶交割,先前設置了常用銀行的外幣到價通知,但是美金最近一直逆空高灰,幾乎不會啟動到價通知🥲,只好一直關注銀行即期價格,但因為上班常常會忘記要看一下外幣網銀換匯優惠,故想說練習python之餘,並順便做個爬蟲將資料發送到line群組
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
欲傳送之內容,由使用者輸入於文字檔內,執行本執行檔後,指定之LINE群組全員,將會收到推播訊息
Thumbnail
項目介紹: Grass主要是讓用戶能夠自主租借未使用的網絡資源來獲取利潤的去中心化程式(DiPIN),改變目前IP遭中心化公司私自濫用的商業模式,實現更公平、安全和道德的網絡資源市場。 何謂未使用的網路資源? 今天你向網路公司申請了一定的頻寬方案,平均大約為 100 Mbps,而這時如果你
Thumbnail
以下,就要和大家分享,我是如何利用免費Bloger版型,建置屬於個人風格的寫作部落格No End’s Writing Blogger。 首先當然是找到分享版型的網站。我是利用BloggerTemplates進行搜尋,你可以看到首頁①即有免費樣版的標籤,除了針對響應式(適應手機)、SEO設計的版型外
很多初次來做職涯諮詢的個案,在諮詢結束時都會笑著說:"我一直都不知道政府有這麼棒的資源",還一直問我:"為什麼市府有這麼好的免費資源,我們民眾都不知道啊?而且還已經服務這麼久了?",頓時,真是讓我有懷才不遇的感覺啊!;坦白說,假設我們從18歲高中畢業或22歲大學畢業進入職場,一直到65歲退休為止,有
Thumbnail
如果遇到某些數值需要定義上限與下限,例如獎金,當獎金超過5000元時,最高就是5000元,這樣該怎麼快速計算呢? 除了用眼睛核對之外,你第一個是不是想到了IF呢? =IF(獎金>5000,5000,0)這樣子的函數,當然這是其中一種方法,其實還有一個比IF更簡單的函數MAX也能辦到哦!!
Thumbnail
去年年尾橫空出生的 ChatGPT,令世界立即進入 AI 世代。生成式 AI 開始改變工作模式。如果想繼續在工作上保持競爭力就要懂得 work smart! 那麼應該如何 work smart? 那你就要一定懂得利用網上免費資源了。除了使用 AI 外,我們還可以使用一些專門的小工具,以節省跟 AI
Thumbnail
西文單字若沒常常複習會容易遺忘,所以會須需要藉由工具協助記憶。市面上有很多西班牙文學習的APP,不過這邊我會和你分享這款桌遊.......讓你在玩遊戲的同時,對單字更加印象深刻!
Thumbnail
你是否有過使用機器學習時,卻需要人工審查的經驗呢? AWS 的 Amazon Augmented AI (Amazon A2I)是一項機器學習服務,簡化了為 ML 應用程序構建和管理人工審核的過程,讓你可以輕鬆建置人工審查所需的工作流程!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
欲傳送之內容,由使用者輸入於文字檔內,執行本執行檔後,指定之LINE群組全員,將會收到推播訊息
Thumbnail
項目介紹: Grass主要是讓用戶能夠自主租借未使用的網絡資源來獲取利潤的去中心化程式(DiPIN),改變目前IP遭中心化公司私自濫用的商業模式,實現更公平、安全和道德的網絡資源市場。 何謂未使用的網路資源? 今天你向網路公司申請了一定的頻寬方案,平均大約為 100 Mbps,而這時如果你
Thumbnail
以下,就要和大家分享,我是如何利用免費Bloger版型,建置屬於個人風格的寫作部落格No End’s Writing Blogger。 首先當然是找到分享版型的網站。我是利用BloggerTemplates進行搜尋,你可以看到首頁①即有免費樣版的標籤,除了針對響應式(適應手機)、SEO設計的版型外
很多初次來做職涯諮詢的個案,在諮詢結束時都會笑著說:"我一直都不知道政府有這麼棒的資源",還一直問我:"為什麼市府有這麼好的免費資源,我們民眾都不知道啊?而且還已經服務這麼久了?",頓時,真是讓我有懷才不遇的感覺啊!;坦白說,假設我們從18歲高中畢業或22歲大學畢業進入職場,一直到65歲退休為止,有
Thumbnail
如果遇到某些數值需要定義上限與下限,例如獎金,當獎金超過5000元時,最高就是5000元,這樣該怎麼快速計算呢? 除了用眼睛核對之外,你第一個是不是想到了IF呢? =IF(獎金>5000,5000,0)這樣子的函數,當然這是其中一種方法,其實還有一個比IF更簡單的函數MAX也能辦到哦!!
Thumbnail
去年年尾橫空出生的 ChatGPT,令世界立即進入 AI 世代。生成式 AI 開始改變工作模式。如果想繼續在工作上保持競爭力就要懂得 work smart! 那麼應該如何 work smart? 那你就要一定懂得利用網上免費資源了。除了使用 AI 外,我們還可以使用一些專門的小工具,以節省跟 AI
Thumbnail
西文單字若沒常常複習會容易遺忘,所以會須需要藉由工具協助記憶。市面上有很多西班牙文學習的APP,不過這邊我會和你分享這款桌遊.......讓你在玩遊戲的同時,對單字更加印象深刻!
Thumbnail
你是否有過使用機器學習時,卻需要人工審查的經驗呢? AWS 的 Amazon Augmented AI (Amazon A2I)是一項機器學習服務,簡化了為 ML 應用程序構建和管理人工審核的過程,讓你可以輕鬆建置人工審查所需的工作流程!