網站日誌|一個人、零成本:用 GitHub 免費排程,每天自動更新一個資料網站
今天想跟大家聊聊這個網站是怎麼「自己動起來」的
每天晚上八點多,籌碼日報會自己更新
背後沒有人在按按鈕
也沒有一台一直開著的電腦
一開始:靠家裡的電腦
最早的版本很單純
家裡電腦設了三個 Windows 排程
- 17:30 抓正逆價差
- 20:10 抓籌碼、算數字、畫圖
- 20:40 把整個網站上傳
能跑
但有一個問題
電腦要開著,而且要登入
出門、關機、睡眠
那天網站就停在前一天
更麻煩的是
期交所的逐筆成交資料只保留 30 個交易日
電腦關太久,13:30 對齊價差那段就永遠補不回來
所以我問自己
有沒有辦法不靠這台電腦?
選擇:GitHub Actions
GitHub 有一個功能叫 Actions
你寫好一份設定,它就會在指定的時間,借你一台雲端電腦跑程式
私人專案每個月有 2,000 分鐘免費額度
這個網站每天跑一次,大約 5 分鐘
一個月 20 幾個交易日,連額度的一成都用不到
第一個問題:雲端電腦抓得到台灣的資料嗎?
GitHub 的雲端電腦在國外
期交所、證交所會不會擋國外的連線?
這種事不能用猜的
所以我先寫了一個很小的測試
讓雲端電腦用網站實際的程式,去抓 10 月 2 日的資料
結果
雲端電腦在美國鳳凰城
期交所、證交所 7 個資料來源,全部抓得到
筆數跟家裡電腦抓的一模一樣
確定可行,才開始搬
資料存哪裡?
雲端電腦每次跑完就消失
所以累積的資料要存在別的地方
我的做法是
把資料庫拆成一張一張表,存成 CSV 檔,放回 GitHub
每次開工先把 CSV 讀回資料庫,收工再存回去
為什麼不直接存資料庫檔?
資料庫是一整包的二進位檔,每天整包 25 MB 推上去,越存越肥
CSV 是文字,每天只多幾千行,GitHub 只記差異
另外加了一道保險
資料只會越來越多
如果哪天存回去的時候,任何一張表的筆數變少了
程式就拒絕存檔,寧可那天不更新,也不要把舊資料洗掉
踩到的坑
1. 設定檔寫錯一個字
第一次推上去,GitHub 直接說設定檔不合法
原因是我在一個不允許的位置,用了雲端電腦的暫存路徑變數
改成固定路徑就好了
2. 測試只在我的電腦上會過
有一個測試,偷偷用到了我電腦上已經畫好的圖
雲端電腦上沒有這些圖,測試就失敗了
更糟的是
測試失敗之後,後面「抓價差」「抓籌碼」也被跳過了
等於一個測試沒過,整天的資料都沒抓
這不對
測試是用來檢查程式的,不應該擋住抓資料
逐筆資料過期就沒了,抓資料的優先順序應該更高
所以改成
測試失敗,照樣標紅燈通知我
但抓資料的步驟照跑
3. 中文字型
我的電腦用微軟正黑體畫圖
雲端電腦是 Linux,沒有正黑體
裝了 Google 的思源黑體(Noto Sans CJK)之後
畫圖套件只讀得到字型包裡的第一個字面,剛好是日文版
所以現在網站上的圖,少數幾個字是日式寫法
字都有,不會變方塊,只是細看會有一點點不一樣
4. 有一次,壞掉的測試被推上去了
修測試的時候
本機跑完測試,只看了輸出的最後一行就推上去
沒注意到那一行其實是「1 error」
指令是用管線串起來的
前面失敗了,後面還是照樣執行,整串看起來像成功
隔一個 commit 才修好
教訓是:指令串起來的時候,要讓前面失敗就停下來
現在每天晚上發生什麼事
每個平日晚上 20:10(GitHub 的排程常會晚幾分鐘到幾十分鐘)
1. 雲端電腦開機,把 CSV 讀回資料庫
2. 跑測試
3. 抓正逆價差、股利點數、籌碼、漲跌停家數
4. 把我自己看的版本貼到 Notion
5. 重畫網站上所有的圖
6. 產生網站、上傳
7. 把新的資料存回 GitHub
全部大約 5 分鐘
花費 0 元
網站本身放在 Cloudflare,也是免費方案
最後
搬完之後,家裡電腦的排程就停用了
沒有刪掉,萬一雲端出事,隨時可以切回來
一個人維護一個網站
最怕的不是程式寫不出來
是哪天忘了開電腦
我是李阿財,我們下次見