<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          當(dāng)我有一臺服務(wù)器時我做了什么

          共 3087字,需瀏覽 7分鐘

           ·

          2021-01-25 20:08

          當(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 node
          • shuifeng: 4C16G,k8s work node

          由于 dev 的機器與去年列舉出來的事情相似,這里只介紹下在這臺 1C2G 的服務(wù)器上做了什么

          簡單畫了這臺服務(wù)器的架構(gòu)圖(不太會畫,所以建了一個倉庫 shfshanyue/graph[3] 用以學(xué)習(xí)各種架構(gòu)圖畫法)

          博客與編碼

          基本上自己的博客以及個人編碼都在這臺測試服務(wù)器上完成,至于為什么要在服務(wù)器下開發(fā):

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

          1. nginx鏡像 + volume掛載 + docker-compose + traefik服務(wù)發(fā)現(xiàn)。略微麻煩
          2. 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ù)庫
          • redis
          • traefik dashboard,管理流量

          另外,這些對內(nèi)對外的服務(wù)均是通過 docker 以及 docker-compose 部署

          博客去了哪里?

          以下是我博客的歷程

          1. 個人服務(wù)器,后來服務(wù)器部署了 k8s 就把博客挪出了
          2. netlify,但是網(wǎng)絡(luò)不好
          3. alioss + github actions,速度挺好,但是對 http rewrite 支持的不是很好

          以后將會考慮 serverless

          你可以發(fā)現(xiàn),我現(xiàn)在更多的轉(zhuǎn)向了一些免費的云服務(wù),如

          1. serverless 可以寫后端服務(wù),我將把我的公眾號的服務(wù)遷移過來。國內(nèi)可用 aliyun 以及騰訊云,國外 aws
          2. dynomodbtablestore 免費的數(shù)據(jù)存儲
          3. oss 很便宜的對象存儲服務(wù)
          4. netlify 免費的靜態(tài)網(wǎng)站托管托管服務(wù)
          5. github actions 免費的 CICD 及構(gòu)建服務(wù)器
          6. sentry 免費的錯誤日志收集系統(tǒng)
          7. github 免費的私有倉庫服務(wù)
          8. 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),如 redispostgres 一些私有服務(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ù)器時,你可以遵循以下步驟

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

          監(jiān)控

          沒有像去年那樣使用 prometheus 一套,只簡單了使用了兩個命令以及 aliyun 自帶的監(jiān)控

          • ctop: 監(jiān)控容器
          • htop: 監(jiān)控進程

          對比

          如果說與去年有對比的話,體現(xiàn)在兩方面

          1. 更徹底的容器化
          2. 更加擁抱云服務(wù),如 github actions,serverless,netlify 等

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

          最后

          如果你喜歡探討技術(shù),或者對本文有任何的意見或建議,非常歡迎加魚頭微信好友一起探討,當(dāng)然,魚頭也非常希望能跟你一起聊生活,聊愛好,談天說地。魚頭的微信號是:krisChans95 也可以掃碼關(guān)注公眾號,訂閱更多精彩內(nèi)容。

          參考資料
          [1]

          當(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


          瀏覽 25
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费艹逼网站 | 色逼成人综合一二三区 | 99精品少妇 | 国产成人电影久久 | 亚洲一区中文字幕在线观看 |