盤點我的工具包
為了架設網站,我想先盤點我腦子裡擁有的現成資源,包含經驗、知識、技能、或能掌握的外部資源與工具。
內容管理系統
我有一些Content Management System(CMS)的使用經驗。
- 雲端服務:我使用過那些把所有雜事全部都包了,只要註冊帳號並操作簡單的介面就能讓簡單的個人網站、品牌網站、甚至是網路商店上線的雲端服務,像是Medium、Substack、Tumblr、Vocus、Ghost、WordPress、Blogger、Pixnet,甚至是古老懷舊的蕃薯藤、無名小站,還有終端機純文字BBS站⋯⋯
- 自行架設:我使用過、架設過、也客製化修改過一些,有開放原始碼的內容管理系統,像是WordPress。
靜態網站生成
我有一些Static Site Generator(SSG)的使用經驗。
- 我使用過、也稍微深入研究過那些開放原始碼的SSG的軟體架構,像是Astro、Docusaurus、Hexo、Hugo、Jekyll。
- 我過去有很多天馬行空的想法,總是想要客製化地實作現成套裝軟體沒有的功能。例如,為了方便建立我的私人知識庫,我曾經基於我很喜歡的CommonMark設計了一款符合我個人口味的、給我自己專用的「類Markdown方言」的一個語言規格,新增了一些自定義macro語法,並且親自實作這個自定義語言的grammar parser與HTML generator。
網路機房
我有一些實體網路和虛擬網路機房的架設、管理、維護的經驗。
- 我管理維護過一些網路設備,包含交換器、路由器、防火牆等。
- 我曾經用過腳邊的主機、樹莓派、機房裡的機櫃這種在物理上真的摸得到的實體設備來架設各種網站伺服器與資料庫系統。
- 我申請過固定和浮動的IP地址。我申請過網域。我管理過DNS伺服器。我使用過各種代理伺服器,我也用過反向代理,也用過DDNS。
- 我使用過各種VPS虛擬主機託管服務,可以方便地部署、維護、管理、滿足單純的虛擬伺服器需求。能做到虛擬主機託管的服務供應商很多,我過去使用過並且比較熟悉的有Linode和Hetzner和DigitalOcean。
- 我使用過各種IaaS雲端託管服務,只要敲一敲鍵盤就可以在全球各地大型data center部署複雜的網路架構、CDN、負載平衡、防火牆、計算元件、資料庫儲存、異地備援等等元件。能做到這些事情的雲端平台有很多,我比較熟悉的有AWS和GCP和Azure。
程式語言
我有一些使用程式語言,設計、開發、維運軟體系統的經驗(有圖靈完備的程式語言、腳本語言,也有非圖靈完備的文字標記語言、特殊情境專用的領域特定語言等)。
- CSV, JSON, YAML, TOML, INI, Spreadsheet Formulas, SQL
- Markdown, AsciiDoc, Wikitext, OrgMode
- XML, HTML, CSS, TeX, LaTeX, MathML
- JavaScript, TypeScript, Python, Perl, PHP, Ruby, C#, Java, Lua, Swift
- C, C++, Go, Rust, Objective-C, Assembly, CUDA
- Combinatory Logic, Lambda Calculus
- Haskell, Agda, Lisp, Clojure, Bitcoin Script, Solidity
- RegExp, Vim, Emacs, sh, bash, zsh, test, find, grep, sort, uniq, cut, paste, join, tr, sed, awk, jq, yq, xsv, mlr, ...(沒錯我超愛終端機裡可以直接用鍵盤操作的各種純文字工具)
- PowerShell, CMD Batch
網路技術
我有一些網際網路應用技術原理的知識。
- 個人電腦作業系統的大致架構
- 常見的軟體系統程式設計架構
- 常見的網路應用系統部署架構
- 瀏覽器引擎的大致架構
- JavaScript引擎的架構
- HTTP協議
- TCP和UDP協議
- IPv4和IPv6協議
- DNS協議和網域註冊的機制
- 密碼系統常用的抽象代數
- 常用的對稱式密碼系統
- 常用的公鑰密碼系統
- TLS協議、X.509和PKI架構
系統從無到有的完整生命週期
我有一些通訊、網路、硬體、韌體、軟體、風控、安全、災後重建、金鑰管理、密碼學、演算法⋯⋯等領域的硬體到軟體計算系統的設計、研發、營運的實務經驗。在技術方面:我身為技術人員直接參與過一些的、系統生命週期階段或分工任務有
- 【源頭】深入訪談需求、定義問題、釐清動機與目標;
- 【專案】管理專案資源、研究相關技術與可行性、研究經濟成本與效益;
- 【架構】設計系統架構、定義系統模組規格;
- 【安全】建立風險模型、建立災難備援計劃;
- 【模組】釐清模組具體需求規格、研究模組要具體採用的技術、設計具體解決方案、制定模組的測試計畫、建立自動化的測試機制、開發模組原始碼、製造樣品、驗證需求規格;
- 【量產】廠房產線硬體量產計畫、測試與品質管理計畫、管理供應鏈;
- 【營運】正式發布上線、更新或除錯、營運管理、系統監控、災難備援重建系統、系統正式結束下線。
在非技術方面:我身為專業人員參與過那些、需要我去連結非技術人員或部門的、我必須即時「翻譯」改用不同人能清楚理解的人話的、我需要很多不同背景的人合作才能達成一個目標、解決一個問題的、那些必須溝通與協作的任務。
足夠了
目前就先盤點到這裡。在我的有限的知識、記憶、經驗中,我知道網站大概是怎麼回事。我知道架網站有許多可行的路線,有許多可考慮的工具。我想我目前掌握的這些工具、技能、經驗,已經足以讓我架設任何我想要的網站了。