利用免費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
留言分享你的想法!
DDDDD-avatar-img
發文者
2023/08/30
利用免費fly.io空間,學習如何部署第一個Laravel 專案!(一)提及了這篇文章,趕快過去看看吧!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
AWS 佈署簡單操作以及 RDS 建立篇
Thumbnail
AWS 佈署簡單操作以及 RDS 建立篇
Thumbnail
根據上一篇部署完畢Laravel 專案後,本章要來幫線上專案設定資料庫,fly.io 部署MySQL免費容量是3GB,在設定的時候要記得設定size,避免超過要收費。 接下來建置mysql 應用程序並創建屬於 mysql volume ,避免數據資料遺失~
Thumbnail
根據上一篇部署完畢Laravel 專案後,本章要來幫線上專案設定資料庫,fly.io 部署MySQL免費容量是3GB,在設定的時候要記得設定size,避免超過要收費。 接下來建置mysql 應用程序並創建屬於 mysql volume ,避免數據資料遺失~
Thumbnail
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
Thumbnail
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
Thumbnail
有了MySQL後,當然就要下指令來玩玩 能玩爆代表你有天賦,每一次爆炸你又能修復就是成長大躍進的時刻 但是看看你的資料庫空空如也,只有系統DB怎麼辦咧 還好網路上有很多善心人士願意分享範例資料庫供人使用 話不多說就來試試看吧  1. 先找到你要的範例資料庫 範例資料庫下載
Thumbnail
有了MySQL後,當然就要下指令來玩玩 能玩爆代表你有天賦,每一次爆炸你又能修復就是成長大躍進的時刻 但是看看你的資料庫空空如也,只有系統DB怎麼辦咧 還好網路上有很多善心人士願意分享範例資料庫供人使用 話不多說就來試試看吧  1. 先找到你要的範例資料庫 範例資料庫下載
Thumbnail
網路隨便估狗都有一堆大神教學文,不過還是紀錄一下自己安裝的步驟 (2021.11.7)身為一個linux和資料庫菜雞只能乖乖腳踏實地一步一步來 準備好環境 (廢話) 1. 先準備好環境 (廢話) 我是用virtualbox起一個CentOS7的虛擬機詳細以參考以下網址,有非常詳盡的步驟
Thumbnail
網路隨便估狗都有一堆大神教學文,不過還是紀錄一下自己安裝的步驟 (2021.11.7)身為一個linux和資料庫菜雞只能乖乖腳踏實地一步一步來 準備好環境 (廢話) 1. 先準備好環境 (廢話) 我是用virtualbox起一個CentOS7的虛擬機詳細以參考以下網址,有非常詳盡的步驟
Thumbnail
Environment: GCP Linux version: CentOS 7 Laradock的初衷原是為了將Laravel環境容器化,但隨著時間的演進,慢慢包含了各種常用的工具了,如php-fpm, apache, nginx, mysql, phpmyadmin, redis等等這些常用的東
Thumbnail
Environment: GCP Linux version: CentOS 7 Laradock的初衷原是為了將Laravel環境容器化,但隨著時間的演進,慢慢包含了各種常用的工具了,如php-fpm, apache, nginx, mysql, phpmyadmin, redis等等這些常用的東
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News