利用免費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/























avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
遇到問題: root@b10000ea1f5b:/app/backend# ollama run phi3:14b pulling manifest pulling 7a3cc4804c64... 98% ▕███████████████████████████████████████ ▏
Thumbnail
Rush 為管理大型存儲庫的工具,適用於處理多個互相依賴的專案。本篇文章教導讀者如何全域安裝 Rush,進行專案初始化並在專案內添加相關檔案。同時也提供瞭如何將其他專案加入以及在專案中引入其他套件的方法。文章詳細介紹了 Rush 的主要功能和各種配置檔案的作用。另外,也提供了一些相關的參考資料。
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
Simple Storage Service (S3) 是 AWS 最常應用到的服務,只要是需要將檔案上傳到雲端的狀況都可以使用S3,本篇文章將介紹如何設定與使用AWS S3。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
※ 為什麼選擇SQLite? 安裝簡單:SQLite是一個零配置的資料庫,不需要複雜的設定和安裝過程。。 使用SQL語法。 設計選擇多元性(MySQL / SQLite):適合於小零件資料應用、嵌入式系統、物聯網設備。 ※ SQLite四大優點: 執行檔檔案很小:資料庫系統需要的磁碟空
遇到問題: root@b10000ea1f5b:/app/backend# ollama run phi3:14b pulling manifest pulling 7a3cc4804c64... 98% ▕███████████████████████████████████████ ▏
Thumbnail
Rush 為管理大型存儲庫的工具,適用於處理多個互相依賴的專案。本篇文章教導讀者如何全域安裝 Rush,進行專案初始化並在專案內添加相關檔案。同時也提供瞭如何將其他專案加入以及在專案中引入其他套件的方法。文章詳細介紹了 Rush 的主要功能和各種配置檔案的作用。另外,也提供了一些相關的參考資料。
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
Simple Storage Service (S3) 是 AWS 最常應用到的服務,只要是需要將檔案上傳到雲端的狀況都可以使用S3,本篇文章將介紹如何設定與使用AWS S3。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更