當一八年末的時候,我寫了一篇文章 當我有一台服務器時我做了什么
又是年末,我服務器的架構也發生了一些變化,因此總結一番
- 原文地址: 當我有一台服務器時我做了什么
- 系列文章: 當我有一台服務器時我做了什么
概覽
去年服務器有兩台,一台 2C4G,一台 1C2G
今年服務器有三台,以以下名稱作為 hostname,配置如下
dev: 1C2G,不到一百塊錢。用以日常編碼,簡單的反向代理以及項目部署shanyue: 2C4G,k8s master nodeshuifeng: 4C16G,k8s work node
由於 dev 的機器與去年列舉出來的事情相似,這里只介紹下在這台1C2G的服務器上做了什么
簡單畫了這台服務器的架構圖(不太會畫,所以建了一個倉庫 shfshanyue/graph 用以學習各種架構圖畫法)

博客與編碼
基本上自己的博客以及個人編碼都在這台測試服務器上完成,至於為什么要在服務器下開發:
- 在公司 Mac 及我自己的筆記本間同步博客實在太痛苦了,而使用服務器作為中介則方便很多
由於在服務器下寫博客以及一些個人的代碼,因此我新買的 MBP 也變成了一個顯示器
開發環境
zsh + tmux + vim,截圖如下

大部分時間都在這個模式下,如果寫博客過程中需要截圖,則先下載到隨便一個目錄,然后使用 rsync 復制到目標路徑
$ rsync ~/Documents/tmux.png dev:/path/Documents/blog/op/assets/dev-env.png
vscode remote
如果需要調試代碼,或者在寫 typescript,則使用 vscode remote 來完成工作
在 vscode 插件中關鍵字搜索,安裝下載最多的三個插件就是了
開發調試
如果調試前端頁面需要在瀏覽器中打開地址,比如 IP:8000,一般采用兩種方案
nginx鏡像 +volume掛載 +docker-compose+traefik服務發現。略微麻煩npm run dev+openvpn。在本地環境中的瀏覽器通過openvpn連接局域網
如果調試后端接口,需要打斷點直接使用 vscode remote
對外服務
有幾個在公網下可訪問的服務,如
- 公眾號開發: 主要用以給我的公眾號導流 -> 如果想知道流程是什么,請轉到這篇文章 兩年前端頭條面試記,從中的隱藏部分你便能知道大概。過幾天,我將寫一篇文章作為總結。
- https://whoami.shanyue.tech/: 用以測試
traefik的負載均衡及服務發現 - 若干
reveal.js頁面
對內服務
主要以數據庫為主,使用 local DNS + traefik + openvpn 暴露在本地環境,使用禁掉公網端口以及僅在內網訪問的IP白名單保證安全
postgres,主要是一個關於詩詞的數據庫redistraefik dashboard,管理流量
另外,這些對內對外的服務均是通過 docker 以及 docker-compose 部署
博客去了哪里?
以下是我博客的歷程
- 個人服務器,后來服務器部署了
k8s就把博客挪出了 netlify,但是網絡不好alioss+github actions,速度挺好,但是對http rewrite支持的不是很好
以后將會考慮 serverless
你可以發現,我現在更多的轉向了一些免費的雲服務,如
serverless可以寫后端服務,我將把我的公眾號的服務遷移過來。國內可用阿里雲以及騰訊雲,國外 awsdynomodb與tablestore免費的數據存儲oss很便宜的對象存儲服務netlify免費的靜態網站托管托管服務github actions免費的CICD及構建服務器sentry免費的錯誤日志收集系統github免費的私有倉庫服務prerender.io免費的預渲染服務
嗯,有了這些都可以做一個自由開發者了 (自慚形穢中...)
openVPN
數據庫放在公網訪問有點危險,用docker建了vpn在本地開發訪問。使用了以下鏡像
traefik
前后端需要做一個反向代理,選擇了 traefik,更方便的服務配置以及服務發現,只需要配置容器的 labels 就可以部署成功
另外 traefik 可以很方便的自動生成 ssl/tls 證書,為你提供 https 服務
DNS server
有了這么多的服務,但有的東西不好放在公網,如 redis,postgres 一些私有服務以及開發待調試的服務,又記不住端口號,所以又搭了一個 dns server,方便在本地訪問
自動化運維
初期折騰服務器的時候經常需要重裝系統,並且我有三台服務器,自動化運維是必不可少的了。
必備工具如 docker,git,vim,tmux,jq 都是通過 ansible 進行的安裝
可以參考我的配置
當你有了一台新服務器時,你可以遵循以下步驟
- 使用 ansible-role 預配置環境
- 如果沒有 ansible-role,則自己寫 role
- 對於一些服務使用 docker 進行安裝
- 如果以上都無法解決,手動安裝
監控
沒有像去年那樣使用 prometheus 一套,只簡單了使用了兩個命令以及阿里雲自帶的監控
ctop: 監控容器htop: 監控進程
對比
如果說與去年有對比的話,體現在兩方面
- 更徹底的容器化
- 更加擁抱雲服務,如
github actions,serverless,netlify 等
另外,還有一方面是自建了 k8s 集群 (真是燒錢),將會在另一個倉庫中介紹它的體系。但是如果你對 k8s 沒有什么興趣的話,這一台1C2G的服務器完全滿足你的要求
