iT邦幫忙

2023 iThome 鐵人賽

DAY 12
1
SideProject30

placeholder系列 第 12

30天打造線上多人桌遊網站-Day 12-Deploy to zeabur

  • 分享至 

  • xImage
  •  

0. 前情提要

昨天把專案建起來了,今天要來把專案推到雲端。


1. 新增 zeabur 專案

zeabur 是個新興的雲端部署解決方案,特色是只須提供專案原始碼,便可以自動將服務打包部署到雲端。

請到官網註冊帳號 https://zeabur.com/zh-TW

新增專案 -> 新增服務 -> 選擇 github 專案

然後就會自動幫你部署第一次了(太快了來不及截圖XD)

部署完成後可以到 網域 取得公開 url

https://ithelp.ithome.com.tw/upload/images/20230927/2015098775WtRZIUX9.png

這時直接連線上去會發現,由於 production 環境預設沒設定任何 host,因此會連線不上。

https://ithelp.ithome.com.tw/upload/images/20230927/20150987pfXzcu7W2l.png

2. 新增 host

# config/applications.rb

config.hosts << ".zeabur.app"

# config/environments/production.rb

config.log_level = :debug # 為了從 log 得到更多訊息

改好後 commit、push

可以看到 zeabur 會自動開始新的部署

https://ithelp.ithome.com.tw/upload/images/20230927/20150987JFIcXTNFk2.png

3. 新增資料庫

https://ithelp.ithome.com.tw/upload/images/20230927/20150987ycnhLou4ff.png

重新訪問網站發現,我們還需要一個資料庫服務,zeabur 上面增加資料庫也很簡單

選擇建立服務 -> Marketplace -> PostgreSQL

https://ithelp.ithome.com.tw/upload/images/20230927/20150987IGIP1gfZz0.png

TBD...

--- updated at 09/28 01:50

編輯 database.yml 讓他能找到雲端上的資料庫

production:
  <<: *default
- database: ironman2023_hanabi_production
- username: ironman2023_hanabi
- password: <%= ENV["IRONMAN2023_HANABI_DATABASE_PASSWORD"] %>
+ database: <%= ENV["IRONMAN2023_HANABI_DATABASE"] %>
+ host: <%= ENV["POSTGRES_HOST"] %>
+ username: <%= ENV["POSTGRES_USERNAME"] %>
+ password: <%= ENV["POSTGRES_PASSWORD"] %>
+ port: <%= ENV["POSTGRES_PORT"] %>

並在 環境變數 中設定 IRONMAN2023_HANABI_DATABASE 的值

https://ithelp.ithome.com.tw/upload/images/20230928/20150987g86XPxQRD7.png

檢查 Runtime Logs 會發現目前是跑 development 的環境

https://ithelp.ithome.com.tw/upload/images/20230928/20150987A8qKuKYzHu.png

可以新增 RAILS_ENV=production 環境變數去指定到 production 環境

再次 deploy

遇到第一次 build fail

查看 Build Logs

找到失敗原因

ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit`

一樣設定環境變數 SECRET_KEY_BASE = config/master.key 的值

再次 deploy

會看到 production 下預設的 error page

https://ithelp.ithome.com.tw/upload/images/20230928/2015098781zjMTq08U.png

此時 Logs 也不打算告訴我們更多訊息

https://ithelp.ithome.com.tw/upload/images/20230928/20150987W0yruY7z6p.png

猜測應該是 db 還沒建立 / Migrate

為了方便操作,我們可以新增 dotenv 這個套件,來輕鬆指定環境變數,並連線到遠端資料庫更新。

bundle add dotenv-rails

在 專案根目錄下建立 .env 檔案,值可從 zeabur/postgresql 上查看

>> 注意不要將 .env 檔案 commit 到專案中 <<

>> 注意不要將 .env 檔案 commit 到專案中 <<

>> 注意不要將 .env 檔案 commit 到專案中 <<

IRONMAN2023_HANABI_DATABASE=database
POSTGRES_HOST=host
POSTGRES_USERNAME=username
POSTGRES_PASSWORD=password
POSTGRES_PORT=port

然後執行

RAILS_ENV=production rails db:prepare

// or create then migrate

https://ithelp.ithome.com.tw/upload/images/20230928/20150987CvtspHuCG8.png

再次查看網頁

總算可以成功進入了

https://ithelp.ithome.com.tw/upload/images/20230928/20150987QZ7Q2gDMbT.png

4. Assets

看到 config/environments/production.rb

  # Disable serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?

由於還沒有配置靜態網頁伺服器,因此我們讓 rails 來提供靜態檔案,一樣透過新增環境變數來切換

並且按下 redeploy 讓他產生 assets

成果

https://ithelp.ithome.com.tw/upload/images/20230928/20150987OgmbDZI0AG.png

5. 結語

這些步驟當初已經先做過一次驗證可行性,想不到打成文字說明會花那麼久時間 /images/emoticon/emoticon06.gif

明天看情況決定 1. 串 action cable 或是 2. 進入遊戲開發 XD


上一篇
30天打造線上多人桌遊網站-Day 11-Rails new
下一篇
30天打造線上多人桌遊網站-Day 13-Action Cable
系列文
placeholder20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言