iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

富士大顆系列 第 28

vol. 28 你還沒用過 Zeabur 部署?那你有點落伍了

  • 分享至 

  • xImage
  •  

你好,我是富士大顆 Aiko
不可能接到業配吧
對,沒有。

一切的神奇故事發生於那兩天無法註冊 Heroku 的 8 月底(沒錯,9/16 Demo Day)
我們做了每個查得到的可能:開無痕、換瀏覽器、換裝置、換email、換地區、清 cookie、寫信給客服(他們有設計只能會員登入才可以寫信給客服,我找這個入口真的找到天荒地老,然後回信說請如果一直發生請耐心等候(???)、在他們三百年沒更新的社群帳號留言...
結果都是--

也沒任何解釋我們是做錯什麼了老天爺!

還好想到老師有提過的一個台灣人做的部署平台,今年剛上線
就是 Zeabur
好親切的繁體中文!就決定是他了

以下介紹會分為: Zeabur 的部分,以及專案的部分

Zeabur

Step 1. 註冊會員

註冊會員之後超快,這邊如果你用 github 登入,就像什麼事情也沒發生一樣快

Step 2. 新增專案


就可以來新增專案了(左邊是我們的專案)
使用免費專案的話,只能有一個專案歐

Step 3. 設定環境

新增之後會看到像這樣的後台:

我們可以分左邊跟右邊大塊
左邊由上到下,是專案人員(這邊你可以邀集專案同伴,同樣也是註冊就好)
環境設定就可以新增:像是 Production, Test (我對不起老師,沒有寫測試!)

Step 4. 設定服務

(要走到這步驟的話,我會建議先跳到下面看 Rails 專案的部分
設定完整,部署會快很多)

這邊可以很直觀的點,看你要連結在 github 上的哪個專案(你必須是擁有者,不然會需要擁有者授權)的哪個分支!
像我們是 Rails 系統就會抓你是 Rails:

好處是 Zeabur 會直接抓那個分支最新的狀況,概念有點像是 CD(我不確定自己講的哈哈哈哈)

那我們是使用 PG,選擇要用的 production 環境資料庫,Zeabur 會幫你設定好:

你可以透過 Zeabur 提供的 Host、Port、Password、Username 去看線上的資料庫
而這些 databse 的資料就是要跟 Rails 專案的環境變數綁定喔~

Step 5. 設定域名(Domain Name)

這邊有兩種選項:

  • 自己選自己買的域名
    如果不是 Cloudflare 購買的話,
    這邊需要另外到購買的平台(e.g. GoDaddy)修改 DNS 指向; 也要修改

  • 從 zeabur 產生的,長相會是 xxxx.zeabur.app
    xxxx 是你自己取

  • 另外也可以有 sub 域名,讓 sub 域名指向設定的主域名
    例如 域名長這樣 iding.cc
    sub 可以是 www.iding.cc
    當有人前往 www.iding.cc 畫面會跑 301 也就是說這個網域已經搬家~~
    搬到 iding.cc


Rails 專案

Step 1.編輯 config.environment.production.rb

host 網域指定,這邊是你的網域,可能透過網域代理商購買,
或者直接在 zeabur 設定,就會是有帶 zeabur.app 的網址

config.hosts << "你的網域,前面不用 http"

其他推薦要修改的:

在 production 環境「什麼樣的資訊」應該被記錄

default = :info
config.log_level = :debug

幫助產出 log,這樣部署平台才會看到 log

config.logger = if ENV["RAILS_LOG_TO_STDOUT"].present?
  ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
else
  Rails.logger
end

解決跑版、影片讀取

config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
#這裡要加入 zeabur 的環境變數 RAILS_SERVE_STATIC_FILES = true

Step 2. 金鑰轉 ENV (Environment Variables)

這邊的重點就是要把 credential 有用的金鑰,通通轉成 ENV 形式(本來的 credetional 檔案就讓他靜靜的不用動)

編輯database.yml

主要是告訴 Rails 要使用哪個 pg(Zeabur送的那個)

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>


production:
  <<: *default
  port: <%= ENV["POSTGRES_PORT"] %>
  host: <%= ENV["POSTGRES_HOST"] %>
  database: <%= ENV["POSTGRES_DB"] %>
  username: <%= ENV["POSTGRES_USER"] %>
  password: <%= ENV["POSTGRES_PASSWORD"] %>

編輯其他有用到金鑰的檔案

例如我們專案有 carrierwave, device:

CarrierWave.configure do |config|
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider:               'AWS',
    aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    aws_secret_access_key: ENV["AWS_ACCESS_KEY_SECRET"],
    host: 's3-ap-northeast-1.amazonaws.com',
    region: 'ap-northeast-1'
  }
  config.fog_directory = ENV["AWS_S3_BUCKET_NAME"]
end
config.omniauth :google_oauth2, ENV["GOOGLE_OAUTH2_CLIENT_ID"], ENV["GOOGLE_OAUTH2_CLIENT_SECRET"

請確定所有會用到的環境變數都已經設定在部署平台!
包括資料庫連接資訊、第三方服務的 API 金鑰等。


(這是我們的部分 ENV)

最重要的是這對:RAILS_ENV = production

這個才會把環境切到 production!!
並不是說你 Zeabur 環境設定手動編輯'production' 環境就是 'production'
那邊你想亂寫'自然環境' 也是可以的...

Step 3.將環境改成 production

把資料庫遷移,會根據 schema 建造 production 環境的資料庫結構

$RAILS_ENV=production rake db:migrate

如果有種子資料記得要

RAILS_ENV=production rake db:seed

通常會將 JavaScript、CSS 和圖片等靜態資源進行預編譯

RAILS_ENV=production rake assets:precompile

在 production 環境要裝的套件

$bundle install

optional, 可能有套件需要更新

$bundle update

確定都有完成,那就推上去 github 摟
接著回到 Zeabur 的第 4 步驟~

接著就是一連串的看上去的功能有沒有壞掉,看 log、修 code、終端機指令、deploy...
這樣的循環!

有其他問題也可以在 Zeabur 的 discord 群組發問,有真人服務的最棒了!


上一篇
vol. 27 最後的一步:網站部署大辭典
下一篇
vol. 29 Rails 的補充: 前端的革命英雄 Hotwire
系列文
富士大顆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言