當我有一臺伺服器時我做了什麼
當一八年末的時候,我寫了一篇文章 當我有一臺伺服器時我做了什麼
又是年末,我伺服器的架構也發生了一些變化,因此總結一番
- 原文地址: 當我有一臺伺服器時我做了什麼
- 系列文章: 當我有一臺伺服器時我做了什麼
概覽
去年伺服器有兩臺,一臺 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
,主要是一個關於詩詞的資料庫redis
traefik 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在本地開發訪問。使用了以下映象
docker-openvpn
traefik
前後端需要做一個反向代理,選擇了 traefik,更方便的服務配置以及服務發現,只需要配置容器的 labels
就可以部署成功
另外 traefik
可以很方便的自動生成 ssl/tls 證書,為你提供 https 服務
DNS server
有了這麼多的服務,但有的東西不好放在公網,如 redis
,postgres
一些私有服務以及開發待除錯的服務,又記不住埠號,所以又搭了一個 dns server
,方便在本地訪問
自動化運維
初期折騰伺服器的時候經常需要重灌系統,並且我有三臺伺服器,自動化運維是必不可少的了。
必備工具如 docker
,git
,vim
,tmux
,jq
都是通過 ansible
進行的安裝
可以參考我的配置
- https://github.com/shfshanyue/ansible-op
當你有了一臺新伺服器時,你可以遵循以下步驟
- 使用 ansible-role 預配置環境
- 如果沒有 ansible-role,則自己寫 role
- 對於一些服務使用 docker 進行安裝
- 如果以上都無法解決,手動安裝
監控
沒有像去年那樣使用 prometheus
一套,只簡單了使用了兩個命令以及阿里雲自帶的監控
ctop
: 監控容器htop
: 監控程序
對比
如果說與去年有對比的話,體現在兩方面
- 更徹底的容器化
- 更加擁抱雲服務,如
github actions
,serverless,netlify 等
另外,還有一方面是自建了 k8s 叢集 (真是燒錢),將會在另一個倉庫中介紹它的體系。但是如果你對 k8s 沒有什麼興趣的話,這一臺1C2G的伺服器完全滿足你的要