code block怎样导入整个文件夹_按需分配随时可用的在线开发环境:弹性容器+code-server踩坑记...
需求整理
微軟在19年的build大會上公開了Visual Studio Online,相當于把Visual Studio Code和我們需要的開發相關文件裝進了瀏覽器,隨時訪問。不過目前的公共預覽版還沒有提供在國內的服務器,定價上最基本的配置4核/8GB RAM/64GB HDD每活躍一小時需3.15元人民幣,待機一小時0.05元人民幣。自建服務器也必須跑在Azure上,也并不算便宜:Visual Studio Online 定價
社區也開發了相同功能的開源軟件:code-server。不過如果我們專程為這個需求分配一個開發機,即使是2核/4GB RAM/40GB SSD的基本機型,不打折時包年的費用也接近2000元人民幣。所以使用code-server,我們也必然需要實現按需分配。接下來我們就在阿里云上實現這個需求。
code-server用到了service worker,在不通過localhost訪問時,必須使用https協議。所以我們為了實現整個需求,必須用到阿里云的如下服務:
- 一個已經備案的域名,如果用境外服務器的話域名可以不備案
- 一個彈性公網IP,需要的時候申請下來,將一個二級域名http://code.example.com解析到該IP上
- 容器鏡像服務,方便我們快速地使用打包好的code-server docker鏡像
- 彈性容器實例ECI,這是最為經濟的算力資源,2核/4GB RAM每小時0.44元人民幣,4核/8GB RAM每小時0.88元人民幣,而且計價是精確到秒的。
- 文件存儲服務NAS,我們之后需要將它作為NFS Volume掛載在ECI上,存儲開發常用資料。這部分需要長期運行,價格0.30元/GB/月。
實現我們想要的按需分配code-server的“算法”描述起來如下:
- 準備階段
- 準備code-server的鏡像上傳到阿里云容器鏡像倉庫,鏡像里需要有SSL證書相關服務
- 申請好NAS實例
- 需要真正使用時
- 申請一個彈性公網IP x.x.x.x
- 更新二級域名http://code.example.com的解析到x.x.x.x
- 申請彈性容器實例,以準備好的docker image啟動,綁定彈性IP x.x.x.x
- 啟動時執行代碼,給二級域名http://code.example.com獲取SSL證書后,之后便可以啟動code-server了
- 掛載NAS,阿里云這里應該是有些bug,啟動時掛載NAS容易使ECI無法正常啟動
docker鏡像準備
我們首先要準備一個幫助我們處理SSL證書的增強版code-server docker image。
一個思路是,code-server為我們提供了它的Dockerfile,我們可以對這個Dockerfile稍加修改,以滿足我們所要的功能。可惜的是,我自己試了多次,即使不更改這個Dockerfile,也無法正確地生成docker image。會遇到這個問題:Failed to build docker image · Issue #1380 · cdr/code-server
于是我轉換了另一個解決方案,基于centos鏡像,在這個基礎上,下載code-server的Binary Release,布置好SSL證書相關軟件,這里選擇Let's Encrypt的Certbot。
基于此,準備好的Dockerfile如下(注意這個Dockerfile后面有更新):
FROM更改工作目錄到這個文件夾后,制作docker image:
docker image build -t my-code-server:0.1 .成功之后查看本地images,找到需要的ID
docker images登錄阿里云的容器鏡像服務,這里我選擇離我最近的成都節點:
sudo docker login --username=mayundaddy registry.cn-chengdu.aliyuncs.comtag并推送這個容器鏡像:
sudo docker tag [imageID] registry.cn-chengdu.aliyuncs.com/mayundaddy/code-server:0.1 sudo docker push registry.cn-chengdu.aliyuncs.com/mayundaddy/code-server:0.1測試一下,我們手動做好其他部分的工作,啟動這個容器的時候,運行以下指令,成功之后就可以在任意設備上訪問了:
&&不過這個方法相當于是每次啟動時都申請了一個新的SSL證書,Let's Encrypt對此是有頻率限制的,整個一級域名每周50個。如果啟動次數沒有那么頻繁,這個也能將就用了。我這邊后來為了解決這個問題,其實用了一個常在線的服務器不斷維系一個通用*.example.com的SSL證書并且在啟動時拷貝過來。
由此我更改了Dockerfile如下:
FROM這個版本的Dockerfile不再需要處理certbot相關的SSL/HTTPS邏輯,構建起來也輕松許多。轉而在`run.sh`中處理一些簡單邏輯:
#!/bin/bash阿里云API操作
既然Docker image已經構造好了,那么只需要調用阿里云的API,把其他步驟做好就是。由于我們改進了思路,所以到這一步還需要完成的任務就是:
- 申請一個彈性公網IP x.x.x.x
- 更新二級域名http://code.example.com的解析到x.x.x.x
- 申請彈性容器實例,綁定彈性IP x.x.x.x,以準備好的docker image啟動,綁定彈性IP x.x.x.x
可以說比較簡單了,node.js實現如下:
const執行一下`node this.js`,很快一切都配置好了。不過域名解析還需要至多10分鐘生效。這段時間如果急著用,可以通過不安全的方式訪問https://IP開始使用。
云盤掛載
這一部分暫時還沒來得及測試,等搞定了回來補充
總結
以上是生活随笔為你收集整理的code block怎样导入整个文件夹_按需分配随时可用的在线开发环境:弹性容器+code-server踩坑记...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lol白金是什么水平(艾欧尼亚VS诺克萨
- 下一篇: 不愧妖板之王!华擎A620主板解锁PCI