1. 程式人生 > >當我有一臺伺服器時我做了什麼

當我有一臺伺服器時我做了什麼

當一八年末的時候,我寫了一篇文章 當我有一臺伺服器時我做了什麼

又是年末,我伺服器的架構也發生了一些變化,因此總結一番

  • 原文地址: 當我有一臺伺服器時我做了什麼
  • 系列文章: 當我有一臺伺服器時我做了什麼

概覽

去年伺服器有兩臺,一臺 2C4G,一臺 1C2G

今年伺服器有三臺,以以下名稱作為 hostname,配置如下

  • dev: 1C2G,不到一百塊錢。用以日常編碼,簡單的反向代理以及專案部署
  • shanyue: 2C4G,k8s master node
  • shuifeng: 4C16G,k8s work node

由於 dev 的機器與去年列舉出來的事情相似,這裡只介紹下在這臺1C2G的伺服器上做了什麼

簡單畫了這臺伺服器的架構圖(不太會畫,所以建了一個倉庫 shfshanyue/graph 用以學習各種架構圖畫法)

部落格與編碼

基本上自己的部落格以及個人編碼都在這臺測試伺服器上完成,至於為什麼要在伺服器下開發:

  1. 在公司 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,一般採用兩種方案

  1. nginx映象 + volume掛載 + docker-compose + traefik服務發現。略微麻煩
  2. 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 部署

部落格去了哪裡?

以下是我部落格的歷程

  1. 個人伺服器,後來伺服器部署了 k8s 就把部落格挪出了
  2. netlify,但是網路不好
  3. alioss + github actions,速度挺好,但是對 http rewrite 支援的不是很好

以後將會考慮 serverless

你可以發現,我現在更多的轉向了一些免費的雲服務,如

  1. serverless 可以寫後端服務,我將把我的公眾號的服務遷移過來。國內可用阿里雲以及騰訊雲,國外 aws
  2. dynomodbtablestore 免費的資料儲存
  3. oss 很便宜的物件儲存服務
  4. netlify 免費的靜態網站託管託管服務
  5. github actions 免費的CICD及構建伺服器
  6. sentry 免費的錯誤日誌收集系統
  7. github 免費的私有倉庫服務
  8. prerender.io 免費的預渲染服務

嗯,有了這些都可以做一個自由開發者了 (自慚形穢中...)

openVPN

資料庫放在公網訪問有點危險,用docker建了vpn在本地開發訪問。使用了以下映象

docker-openvpn

traefik

前後端需要做一個反向代理,選擇了 traefik,更方便的服務配置以及服務發現,只需要配置容器的 labels 就可以部署成功

另外 traefik 可以很方便的自動生成 ssl/tls 證書,為你提供 https 服務

DNS server

有了這麼多的服務,但有的東西不好放在公網,如 redispostgres 一些私有服務以及開發待除錯的服務,又記不住埠號,所以又搭了一個 dns server,方便在本地訪問

自動化運維

初期折騰伺服器的時候經常需要重灌系統,並且我有三臺伺服器,自動化運維是必不可少的了。

必備工具如 dockergitvimtmuxjq 都是通過 ansible 進行的安裝

可以參考我的配置

  • https://github.com/shfshanyue/ansible-op

當你有了一臺新伺服器時,你可以遵循以下步驟

  1. 使用 ansible-role 預配置環境
  2. 如果沒有 ansible-role,則自己寫 role
  3. 對於一些服務使用 docker 進行安裝
  4. 如果以上都無法解決,手動安裝

監控

沒有像去年那樣使用 prometheus 一套,只簡單了使用了兩個命令以及阿里雲自帶的監控

  • ctop: 監控容器
  • htop: 監控程序

對比

如果說與去年有對比的話,體現在兩方面

  1. 更徹底的容器化
  2. 更加擁抱雲服務,如 github actions,serverless,netlify 等

另外,還有一方面是自建了 k8s 叢集 (真是燒錢),將會在另一個倉庫中介紹它的體系。但是如果你對 k8s 沒有什麼興趣的話,這一臺1C2G的伺服器完全滿足你的要