上一篇中,我們做好的網頁聊天程式,只有我們自己能使用而己。今天我們要讓其它人使用我們的作品。
在我們的作品還沒有完成,只是想要讓我們自己的電腦暫時當做伺服器,讓其它人連上來試一下時,我們可以使用一種叫反向代理 (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),並把該主機的環境、資料庫設定好,把程式碼推上去,但是就需要自行維護及備份等。
而比較簡單的做法,是使用 PAAS (平台即服務, platform as a service),只要用提供的工具上傳程式碼,就會幫你處理好環境、分散式佈署、備份策略等等。
目前比較知名的 PAAS 有 老牌的 Heroku,對 Elixir 很友善的 Fly.io,台灣的 zeabur 等等。我們今天要用的,是有免費額度的 Gigalixir。
首先到終端機上,輸入 brew tap gigalixir/brew
然後輸入 brew install gigalixir
安裝工具
安裝完成後,要來註冊帳號,輸入 gigalixir signup:google,用我們的 google 帳號註冊。接著用瀏覽器連到上面顯示的網址。
登入你的 google 帳號
回到終端機,你可以用 gigalixir account
來確認是否有成功登入。
APP_NAME=small-talk
gigalixir create -n $APP_NAME
輸入 git remote -v
,應該要看到 gigalixir 的名稱。
由於 Gigalixir 上的預設的語言版本比較舊,所以要加上設定,讓他使用新的語言版本,輸入以下指令:
touch .tool-versions
mise use elixir@1.18.4-otp-28
mise use erlang@28.1
mise use node@24.10.0
assets/
資料夾下新增一個 package.json
檔案,並貼下以下內容後存檔。{
"scripts": {
"deploy": "cd .. && mix assets.deploy && rm -f _build/esbuild"
}
}
git aa && git commit -m "setup gigalixir"
來儲存版本。gigalixir pg:create --free
在終端機中輸入 git push gigalixir
完成之後,會在下方看到你的應用程式的網址。長得應該像是 https://xxxxxx.gigalixir.com
我們需要把資料庫裡面的表變成這個程式要用到的樣子,不過好在 Phoenix 已經在程式裡寫好配方了,我們只要叫電腦執行這些改變資料庫的配方就好,這個動作,叫做遷移資料庫。
gigalixir account:ssh_keys:add "$(cat ~/.ssh/id_rsa.pub)"
Note: 你的電腦上的公開金鑰可能不是這個名稱,用 ls ~/.ssh
找找看有沒有用 .pub
結尾的。
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 上,你的程式跟資料庫可能會同時備份到多台真正的機器,但是我們不在乎是哪一台。這種情況,就是我們通稱的雲端。
登登~登登登登~
雖然還有很多地方沒有去到,不過,就放輕鬆,一步一步,繼續我們的旅程吧~