當一八年末的時候,我寫了一篇文章 當我有一台服務器時我做了什么
又是年末,我服務器的架構也發生了一些變化,因此總結一番
- 原文地址: 當我有一台服務器時我做了什么
- 系列文章: 當我有一台服務器時我做了什么
概覽
去年服務器有兩台,一台 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在本地開發訪問。使用了以下鏡像
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的服務器完全滿足你的要求