PHP 的開始是想把很多東西整合在一起,怎麼說呢 ?
話說為了管理主機,主機裡面會使用 Shell Script 或 Perl 寫的程式,排程固定時間去跑起來監控主機的運作情況。
這些種在主機裡的 agent 會使用 email 通知監控結果,但效率不怎麼好,日子久了信件太多就懶得看了。所以有時候會讓中央監控主機去抓每台主機的狀況,不過這也會有時效性的問題,假如主機很多時,光等待也睡著了,所以有時候也會讓主機自己把監控結果丟出來 ; 要怎麼丟、丟到那就要好好想想,不然它就變成在 DDOS 攻擊了 ! 是吧 (每台同時啟動但延遲為不同時間丟出)。
最後這些監控資料漸漸的變得需要好好的再整理一翻才出得了廳堂 (本來就出得了,只是還是覺得很亂),所以想要有一個 Web 介面的管理系統來整合這些資料。不過不是有很多現成的系統了嗎 ; Icinga (我有在用) 、Ansible (我沒用過)、Cacti 等等,它們不都有 Web 介面了嗎 !
但
主機再怎麼監控、現成的系統再怎麼用,你可以想像我如果每監控一種就要登入一種系統,真的當主機當機了、流量衝高了的時候,還要一個一個登入查,那不是累死了。更何況真正發生問題時,即時的、完整的、唯一的資訊是讓我知道真正問題在那裡才是比較重要的 !
所以所以我選擇了 PHP 來架構我要的環境 ; PHP 是熱門的程式語言之一,用它也是因為管理主機久了, PHP 也接觸習慣了、架設方便、方便使用。然而一開始只是純 coding ,後來覺得還是要找個 Framework 較好 (基本環境、功能、安全性都先顧到),評估了 Codeigniter、Laravel 、YII、Slim 等 ,我選擇了 Codeigniter,因為好入門、不會比 Laravel 繁重,也加上使用 TWIG (PHP Template Engine ) 來搭配 (讓 HTML 與 PHP 分開編寫,不過也不是真正分離,也只是多了一種格式去寫而己,至少好看一點)。
你說 Laravel 很多人用啊,還會有專門舉辦聚會活動,怎麼不用它 ? Laravel 有個讓我不喜歡的一點是它的目錄架構
app public 其它
我如果要把 Laravel 裝在 Web Server 上,設定就要這樣子
<VirtualHost *:80> ServerName ssorc.tw DocumentRoot /var/www/html/laravel/public </VirtualHost>
我還要為了它去改 DocumentRoot 指向到 public ,或者你可以忍受 https://ssorc.tw/public 這樣子。老實說 Laravel 入門有點難,所以放棄。
不過之後 Codeigniter 4 就是這麼搞 !!! @@ OOXX !
回到我想要的系統架構
[NOC or C&C] 就是控制一切的中央機器,它可以直接去存取[主機],透過 22 or 80 or 443 port 取得需要的資訊,或者等待 [主機] 把資訊丟到 [receiver] 後,[NOC or C&C] 再去 [receiver] 拿回來。
[NOC or C&C] 並沒有對外,所以 [主機] 無法直接丟過去,所以要有 [receiver] 當一個接收器,一方面也可以解決 [主機] 有時候也並不會對外的情況。
+--- GET ---> [receiver] <---- POST ----------+ | | + + [NOC or C&C] ---- 直接 GET 22/80/443 -------------> [主機]
另提
我把 PHP 當成是 Web 開發的選擇 ([NOC or C&C]),而 Perl or Shell Script 則是 [主機] 裡系統 console 下的選擇 (排程執行),
是有評估過 Python,但
1。它的編寫格式有夠龜毛,連怎麼空隔也要管。
2。我常拿 GitHub 上別人寫好的 Python 套件來用 (弱掃等等的),常因缺少什麼元件而困擾,我也裝了它缺少的了喔,還是給我出現錯誤,火大,也常要在 Python2 或 Python3 之間跑來跑去 (有時候要 3 才能跑,有時候要 2),煩 ! (這種煩不會像 PHP 5.1 / 5.4 / 5.6 / 7 這種,不太一樣,不怎麼好形容)
用了 Codeigniter 確實很多東西都要自己從頭 coding,但也不會花太多時間,更何況還有 composer 可以用,GitHub 上也有一些 library 可以參考。並且要設定一個目標去作,然後看別人怎麼寫程式,會是學習任何一種程式語言很有效的途徑。
Codeigniter 的目錄結構、文件清楚好明了,也是我的主要選擇。
留言