當(dāng)我有一臺服務(wù)器時我做了什么
當(dāng)一八年末的時候,我寫了一篇文章 當(dāng)我有一臺服務(wù)器時我做了什么
又是一九年末,我服務(wù)器的架構(gòu)也發(fā)生了一些變化,因此總結(jié)一番
本文收自于系列文章: 當(dāng)我有一臺服務(wù)器時我做了什么[1]
本文所涉及所有依賴的部署及使用都記錄在 shfshanyue/op-note[2] 這個倉庫
概覽
去年服務(wù)器有兩臺,一臺 2C4G,一臺 1C2G
今年服務(wù)器有三臺,以以下名稱作為 hostname,配置如下
dev: 1C2G,不到一百塊錢。用以日常編碼,簡單的反向代理以及項目部署shanyue: 2C4G,k8s master nodeshuifeng: 4C16G,k8s work node
由于 dev 的機器與去年列舉出來的事情相似,這里只介紹下在這臺 1C2G 的服務(wù)器上做了什么
簡單畫了這臺服務(wù)器的架構(gòu)圖(不太會畫,所以建了一個倉庫 shfshanyue/graph[3] 用以學(xué)習(xí)各種架構(gòu)圖畫法)

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

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