iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0

上一篇中,我們做好的網頁聊天程式,只有我們自己能使用而己。今天我們要讓其它人使用我們的作品。

開發階段: 反向代理

在我們的作品還沒有完成,只是想要讓我們自己的電腦暫時當做伺服器,讓其它人連上來試一下時,我們可以使用一種叫反向代理 (reverse prosy) 的技術,讓其它人可以透過公開網址連到我們的電腦。

最有名的 reverse proxy 產品是 cloudflare tunnel 及 ngrok,不過我們今天要來介紹一個更簡單,不用帳號跟費用的 localhost.run/

首先確認我們的 phoenix server 是開著的。如果關掉了就再 cd 到專案目錄下,用 iex -S mix phx.server 跑起來。

提示:如果想要停掉 server,在畫面上按兩次 [Ctrl + C]。

接著按 [Command + T]另開一個終端機視窗,輸入 ssh -R 80:localhost:4000 localhost.run

第一次會出現確認提示,按下 [Enter] 就好

成功的話,終端機裡會出現一個長得像 `` 的網址及 QR Code,只要把網址貼給朋友,或是請他掃描 QR Code,他就可以用瀏覽器連到我們的網頁程式了。

但是這個方法在你關閉電腦,或是停掉我們的伺服器後,別人也就連不上了。所以大多是用在開發階段測試的情況下使用。


正式佈署

當我們的程式完成,想要讓大家開始使用時,就進入我們之前提過的維運階段了。維運要考量的事有非常多,包含了要花多少錢,用什麼機器及資料庫等等。原則上愈多人透過網路使用的程式,就會愈複雜(而且愈貴)。

最單純: VPS

最基本的作法,是在網路上租虛擬機器(VPS),並把該主機的環境、資料庫設定好,把程式碼推上去,但是就需要自行維護及備份等。

最簡單的佈署: PAAS

而比較簡單的做法,是使用 PAAS (平台即服務, platform as a service),只要用提供的工具上傳程式碼,就會幫你處理好環境、分散式佈署、備份策略等等。

目前比較知名的 PAAS 有 老牌的 Heroku,對 Elixir 很友善的 Fly.io,台灣的 zeabur 等等。我們今天要用的,是有免費額度的 Gigalixir。

Gigalixir 帳號設定

  1. 首先到終端機上,輸入 brew tap gigalixir/brew

  2. 然後輸入 brew install gigalixir 安裝工具

  3. 安裝完成後,要來註冊帳號,輸入 gigalixir signup:google,用我們的 google 帳號註冊。接著用瀏覽器連到上面顯示的網址。

  4. 登入你的 google 帳號

  5. 回到終端機,你可以用 gigalixir account 來確認是否有成功登入。

Gigalixir 佈署

  1. 在終端機裡,先切換到我們的專案資料夾下,並輸入以下指令:
APP_NAME=small-talk
gigalixir create -n $APP_NAME
  1. 輸入 git remote -v,應該要看到 gigalixir 的名稱。

  2. 由於 Gigalixir 上的預設的語言版本比較舊,所以要加上設定,讓他使用新的語言版本,輸入以下指令:

touch .tool-versions
mise use elixir@1.18.4-otp-28
mise use erlang@28.1
mise use node@24.10.0

  1. 配合 Gigalixir 編譯 JavaScript 的方式,我們還要打開編輯器,在 assets/ 資料夾下新增一個 package.json 檔案,並貼下以下內容後存檔。
{
  "scripts": {
    "deploy": "cd .. && mix assets.deploy && rm -f _build/esbuild"
  }
}

  1. git aa && git commit -m "setup gigalixir" 來儲存版本。

建立資料庫

  1. 在終端機中輸入 gigalixir pg:create --free

佈署程式

  1. 在終端機中輸入 git push gigalixir

  2. 完成之後,會在下方看到你的應用程式的網址。長得應該像是 https://xxxxxx.gigalixir.com

最後一步:遷移資料庫

我們需要把資料庫裡面的表變成這個程式要用到的樣子,不過好在 Phoenix 已經在程式裡寫好配方了,我們只要叫電腦執行這些改變資料庫的配方就好,這個動作,叫做遷移資料庫

  1. 先把我們電腦上的 SSH 公開金鑰傳到 gigalixir 上。在終端機中輸入:
gigalixir account:ssh_keys:add "$(cat ~/.ssh/id_rsa.pub)"

Note: 你的電腦上的公開金鑰可能不是這個名稱,用 ls ~/.ssh 找找看有沒有用 .pub 結尾的。

  1. 等個兩三分鐘,再跑資料庫遷移指令 gigalixir ps:migrate

來試試看吧!

用瀏覽器連到這個網址,跟之前一樣,在後方加上 /chat (或是昨天你 AI 生成的網址後綴),就可以看到你的程式了。那就可以傳給你的朋友一起用了!

你也可以來 https://small-talk.gigalixirapp.com/chat 試試看我的程式,雖然我不確定它可以活多久。


更專業的情況

例如 facebook, YouTube 等網路平台,會需要更複雜的維運設定。在這些公司會有很多人單純做維運這件事。這些公司可能會有自己的機房,也可能會用「基礎架構即服務 IAAS (Infrastructure as a service)」的平台。

最有名的 IAAS 服務有三家,亞馬遜的 AWS,Google 的 GCP以及微軟的 Azure。

[TODO: 補三家 IAAS 圖]

在 IAAS 上,你的程式跟資料庫可能會同時備份到多台真正的機器,但是我們不在乎是哪一台。這種情況,就是我們通稱的雲端


最後一天的回顧

  1. 開發階段,想要讓別人測試時,可以用反向代理。我們這次用了 localhost.run
  2. 有空可以去學 cloudflare tunnel
  3. 輕鬆佈署可以用 PAAS (平台即服務),我們這次用了 Gigalixir。(雖然還是蠻多步驟的,但至少是免錢的)
  4. fly.io 是對 Elixir 最友善的,但要 5 塊美金
  5. 更專業的情況,會使用 IAAS (基礎設施即服務)。最大的有 AWS, GCP 及 Azure。我們常稱之為雲端

地圖

登登~登登登登~
雖然還有很多地方沒有去到,不過,就放輕鬆,一步一步,繼續我們的旅程吧~


上一篇
Ch 28. 來做一個線上聊天室吧!
下一篇
終章:感言,與置入性行銷們
系列文
Just enough code with AI: 給新手們的程式設計世界觀32
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
taiansu
iT邦新手 3 級 ‧ 2025-10-14 18:28:07

發現好像要補一篇 ssh XD

我要留言

立即登入留言