分類: GCP

我用 AI 做了一個學習網站給我的孩子

我用 AI 做了一個學習網站給我的孩子

起心動念:給孩子的一份禮物 https://learn.paulfun.net

事情的開始,其實很單純。

這陣子我用 AI 做了不少投影片。從專案管理、程式設計概念到各種知識主題,Claude
搭配我自己設計的 Skills,產出的品質讓我很驚艷。

某天晚上,看著電腦裡一堆做好的教學投影片,我突然想:

這些東西,能不能用某種方式分享給我的孩子?

不是要當老師,也不是要開課。只是想把自己覺得有趣的知識,用孩子能理解的方式傳下去。

於是,Mido Learning 的念頭就這樣冒出來了。


初試啼聲:Vibe Coding 的魔法

有了想法,接下來是技術問題。

我需要一個網站。可以上傳教材、可以讓人瀏覽、最好還要有會員系統。以前這種專案,光想就累
— 前端、後端、資料庫、部署、CI/CD⋯⋯每一塊都是坑。

但這次,我決定試試看完全用 AI 來開發。

我把規格訂好,讓 Claude 幫我寫 code。

技術棧?我搭配AI快速決定了:Next.js + .NET Minimal API + Firebase。

我原本以為最麻煩的會是 CI/CD 部署。結果 AI 搭配 GitHub CLI 和 GCP CLI,三兩下就把 GitHub
Actions 的 workflow 寫好了。Push 到 main,自動 build、自動部署到 Cloud Run。

整個過程比我想像中順太多。

這就是所謂的 Vibe Coding — 你描述你要什麼,AI
把程式碼生出來。你不用記住每個語法細節,只要知道你想做什麼就好。


除錯與減法:真正的挑戰

當然,事情不可能一路順風。

第一個坑是投影片相容問題。我做的投影片是純 HTML 的單檔格式,用 iframe
嵌入網站時,遇到各種 CSP、sandbox 權限的問題。AI 陪著我一個一個解決。

第二個坑,反而是「減法」。

AI 很會加東西。你說要一個功能,它會順便幫你想好十個延伸功能。但對一個個人專案來說,太多
功能就是負擔。

我花了不少時間在「砍掉不必要的東西」。

這也是 Vibe Coding 的重要心法:你要很清楚自己要什麼,也要很清楚自己不要什麼。


來來回回:幾十次部署

接下來是漫長的調整期。

改一個小 bug,push,等 GitHub Actions 跑完,上 Cloud Run 確認。發現另一個問題,再改,再
push。

來來回回,大概部署了幾十次。

但神奇的是,我一點都不覺得煩。

因為整個 CI/CD pipeline 是全自動的。我只要 git push,剩下的事情機器會處理。失敗了就看
log,修完再推。

這種「隨時可以部署」的安心感,是以前土法煉鋼時代完全沒有的體驗。


靈光一閃:網頁小遊戲

我把投影片上傳功能做完,看著網站覺得好像少了什麼。

然後我想到:

既然能上傳 HTML 投影片,那能不能上傳 HTML 小遊戲?

技術上沒有什麼不同。都是 HTML + CSS + JS,用 iframe 嵌入就好。

於是我請 AI 幫我做了一個圈圈叉叉的網頁遊戲,打包上傳。

成功了。

網站瞬間從「教學平台」變成「教學 +
遊戲平台」。小朋友可以看投影片學知識,也可以玩小遊戲放鬆一下。

這種「功能延伸」的彈性,其實是當初設計時沒想到的。但因為架構夠乾淨,加新功能幾乎沒有額
成本。


最後一哩:自訂網域

網站做好了,但網址是 Cloud Run 給的一長串亂碼。

我想把它接到自己的網域:learn.paulfun.net。

這種事以前要查一堆文件、設定 DNS、搞憑證。這次我直接問 AI 怎麼做,它一步一步帶著我操作
gcloud CLI,五分鐘搞定。

現在,打開 learn.paulfun.net,就是 Mido Learning。

一個爸爸用 AI 做給孩子的學習網站,正式上線了。


心得:AI 帶我們去了以前去不了的地方

回頭看這整段旅程,最大的感受是:

AI 真的太強了。

不是那種「哇好酷」的強。是那種「以前做不到的事,現在做得到了」的強。

以前,一個人要做這樣的專案,可能要花幾個月,還不一定能做完。現在,有 AI
陪著,從發想到上線,大概兩週。

而且這兩週裡,我學到的東西比以前自己摸索半年還多。

因為 AI 不只是幫你寫
code。它會解釋為什麼這樣寫、這樣設計的好處是什麼、有什麼潛在問題要注意。

它像是一個永遠有耐心的資深工程師,24 小時 on call。

這讓我想到一個以前不敢想的可能:

或許在這個時代,只要你有想法、願意學習,真的可以一個人做出以前需要一個團隊才能做的東西

AI 帶我們去了以前我們去不了的任何地方。

而這只是開始。

2024 WordPress自動架站心得-DockerCompose with AI

2024 WordPress自動架站心得-DockerCompose with AI

最近一個朋友想架官網,我第一個想到的還是wordpress

雖然以技術而言,php感覺已經不是主流(主流是GO, Python….etc),但以能做到CMS網站的解決方案而言,wordpress看起來還是滿強勢,重點是前後台就一站solution包好了,不用去想前後端分離什麼的 ,所以還是試著先搭配AI去安裝看看吧~

第一步,申請Gmail,為你雲端服務商申請有一個信箱 可以註冊

Azure跟 AWS都有免費 12個月,一定大小的size的vm規格可以申請,其實大同小異,這邊我選了熟悉的GCP

第二步 登入gmail後,直接申請 GCP,這邊其實 因為 都是google的服務,所以很順的申請完成!

他一開始會有一個MyFirstProject,一時間無法改名這個Project,所以我就立即創建一個新的Project,免費額度內好像可以建立共12個Project。然後申請服務的時候,會需要信用卡,但他說不會刷額度,在300美元額度內,你不啟用,都可以試用他們的服務,就算額度用完,他也不會跟你直接扣款。

第三步,開啟Compute-Engine,建立一個VM,這時我只有選一個core2, 8g ram的機器,其他都幾乎沒改,連地域都放在us(其實可以挑一下),一直下一步,等待一會兒就可以看到他背景建置好了!

第四步

透過 webssh連進去(這個比起當年還要建立ssh金鑰,上傳 Server才能用 iterm連線 的時代已經方便超級多了!

第五步

問Chatgpt要怎麼wordpress架站,首先先安裝Docker

第一個prompt如下

"Linux instance-20241202-162827 6.1.0-27-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.115-1 (2024-11-01) x86_64

我要怎麼安裝docker "

他回應我如下,我就不全列了,反正AI都會教好教滿,若你貼錯了 把錯誤訊息再丟回去問他,他也會試圖幫你解決

第六步: 安裝Docker-Compose

prompt
"docker-compose  怎麼安裝"

盡量要描述具體,所以我連ssh登入hint給的os資訊都一併給 ,這樣好讓他判斷要給我什麼安裝指令

其實先 前我因為相關經驗,有透過個別指令 安裝過Docker,DB,wordpress各自的container,而這次我希望一鍵安裝,所以使用Docker-Componse,同時我希望還是會有一個實體路徑,以確保備份還有未來轉移遷站的議題。

Prompt
"我要建立一個docker file 然後
docker file 希望可以建立一個wordpress跟mariadb,然後他們的實體路徑希望綁到/mnt/db跟/mnt/wordpress"
version: '3.9'
services:
  wordpress:
    build: .
    container_name: wordpress
    ports:
      - "8080:80"  # 將主機的 8080 端口映射到容器的 80 端口
    volumes:
      - /mnt/wordpress:/var/www/html  # 綁定實體目錄
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress_password #記得改一下
      WORDPRESS_DB_NAME: wordpress 
    depends_on:
      - db

  db:
    image: mariadb:latest
    container_name: mariadb-container
    volumes:
      - /mnt/db:/var/lib/mysql  # 綁定實體目錄
    environment:
      MYSQL_ROOT_PASSWORD: root_password #記得改一下
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress  
      MYSQL_PASSWORD: wordpress_password #記得改一下

volumes:
  wordpress_data:
    driver: local
  db_data:
    driver: local

其他

這時若你linux的OS時區跟語系有問題的話(optional),你也可以請他給你指令

最後,其實執行 “sudo docker-Compose up -d”,就可以一次把這些服務弄起來了

再用 “sudo docker ps -a”檢查一下是否有跑不起來的服務

註: 若你想在vm內驗證服務是否有up起來,你也可以再多chatgpt指令,他會教你

第7步: 設定GCP防火牆 (理論上不用管vm的firewall,不然很可能會不小心讓你連ssh都連不進去)

預設GCP是給 https-server所以只有開放443 port,只要點擊 vm清單上的外部ip旁的網路介面,就可以去設定他的防火牆,這時只要加入tcp: port 8080 允許的規則

小插曲: 原面安裝完跑docker-componse up以後,我看沒有錯誤訊息,但我看連外部ip 80 port都連不進去後,一直繞在怎麼允許80 port連線,還想不透去猜 是不是mariadb還是wordpress上配置不對,後來才發現是docker上port mapping是8080: 80,代表是vm的8080 port要connect到container的80 port,所以才發現gcp我怎麼開80port都還是連不到的原因XD,果然開了8080 port就通了!

你的網站理論上就可以運作了,這時只要選擇語系按安裝,就可以一鍵安裝好了(歡呼 ~)

安裝完如下:

後續其實要做到一個比較完整的官網,還有包含domain的註冊,SSL的配置就不細說了

以上架站其實搭配Chatgpt已經可以一站式的完成所有的工程(若不是firewall,弄到好可能不用10分鐘),而不用像當年我必須對每一個安裝的主題(例如mariadb、docker)去做查詢別人的文章或相關的指令 ,真的超級smooth。

有的時候都覺得AI革的命,絕對不只是軟體設計師 ,未來會不會SRE等指令結構化工程相關的人員可能都漸漸被AI取代掉了?或許分工上,不再那麼的壁壘分明了吧,因為這些工具能透過AI自動化就能被介面整合,人力需求肯定會比以前少的

至於wordpress的關鍵字SEO設定,這些屬於工程外的細節就另開一篇章吧~

GCP平台 VM STARTUP SCRIPT 進行UFW DISABLE 記錄

GCP平台 VM STARTUP SCRIPT 進行UFW DISABLE 記錄

這陣子老婆想要寫網誌 (親子遊日後的心血來潮)

無奈各大平台包含xuite,以前的無名收的收,國外的新平台,又覺得好像不熟悉所以腦筋動到自架平台 ,剛好我有這個wordpress養在那邊

不過,因為想說要有一些公開內容,所以還是專業一點弄一下ssl

SSL申請事小,結果我在try ssh跟firewall簡稱(FW)的時候,為了檢查vm是否有fw

所以apt安裝了ufw,殊不知是惡夢的開始

先前因為常常用 ssh連線,不過這次我索性使用了gcp web SSH連過去,想說,應該是滿無腦的

也確實方便,webssh還整合了上傳下載功能,所以我可以很方便的上傳我將要用的SSL證書跟private key

(但上傳下載也其實就是ssh的指令啦)

結果我一開始裝完ufw後 ,一開始也好好的,繼續去檢查gcloud(不是vm哦)虛擬網路的防火牆

後來一重開VM後,就突然 webssh不進去了…,因為同時在調整gcp ssl的防火牆設定,所以我”以為”

我動了什麼設定造成了這個結果(盲點)

註:這段真的超笨的,一直鑽牛角尖在 外層的fw上,還加了全通的rule也不行..

後來我才知道 ,就是vm我因為裝了ufw,所以自己也有一層防火牆被打開了,所以外殼的就無法進入這個vm

這就有點像在vm中移除了網路界面卡,無法再透過網路的方式連進去了,以往有主機,還可以實體操作

之所以把gcp的設定問題排除主要也是我重新生成了一個新的vm,其實舊的image我也生成過,但生成後,重新掛”新”的獨立網路 還是連不進去,所以我用新的VM加新的網路後,用 我認知的外層 fw設定下,嗯可以,ssh的進去

所以我覺得應該還是在vm自已本身身上,猜想到我曾安裝ufw這一點後,我就試著設定ufw disable的語法到VM的開機指令去…想說碰碰運氣

在 VM的執行個體 編輯視窗..可以找到以下欄位

重啟動vm後 ,果然連進去了..恩 …自己搞自己..結案

註∶其實為了fw去安裝 ufw造成這個風波,在cloud的環境中,若能確認是內網的話(不對外),其實可以依賴google cloud的網路跟防火牆的設定就好(有界面萬歲),vm就分工上可以單純一點處理自己該做的事~就好