爽爆了!我搞了一個網(wǎng)頁版 VS Code
點擊上方Python知識圈,設(shè)為星標(biāo)
回復(fù)100獲取100題PDF
閱讀文本大概需要 5 分鐘
VS Code 想必大家都聽說過吧,VS Code 憑借其強(qiáng)大的插件生態(tài)簡直把自己玩出花來了,現(xiàn)在我身邊越來越多的程序員朋友現(xiàn)在都轉(zhuǎn)向使用 VS Code 來寫代碼了,我也不例外。
但大家知道 VS Code 本身是用什么寫的嗎?沒錯,其實是 JavaScript 寫的,準(zhǔn)確來說是用 TypeScript 寫的。
這時候我就想問,既然是用 TypeScript 寫的,那它有沒有網(wǎng)頁版呢?
有人就要問了,網(wǎng)頁版的 VS Code 有啥用啊,其實它能解決很多痛點:
-
如果我能在網(wǎng)頁版的 VS Code 里面寫代碼,這樣換了一個 PC 之后我只需要打卡這個網(wǎng)頁就能接著寫了,多么簡單方便。
-
另外我寫了代碼,想給別人復(fù)現(xiàn)現(xiàn)場看效果,直接甩給他一個網(wǎng)頁鏈接就好了。
-
別人遇到問題想讓我?guī)驼{(diào)試,那他在里面寫完了,然后直接給我鏈接就好了。
舒服吧!
那就來整一個吧!
于是我就找官網(wǎng)的支持,但是沒找到官網(wǎng)有說 VS Code 網(wǎng)頁版的任何事情。
但是找到了一個開源項目,叫做 code-server,運行之后就可以在瀏覽器里面打卡 VS Code 了,GitHub 地址是:https://github.com/cdr/code-server。
它的官方介紹是:
“Run VS Code on any machine anywhere and access it in the browser.
”
正式我想要的!它在瀏覽器里面的運行效果如圖所示:
安裝
接下來那就安裝試試吧,它支持多個平臺,只需要運行一條命令就能安裝了:
curl -fsSL https://code-server.dev/install.sh | sh
這條命令運行之后會自動判斷當(dāng)前的平臺,然后運行安裝步驟。
安裝完了之后會有一個可用的 code-server 命令,運行之后便可以在本地啟動 code-server 服務(wù)了,然后就可以在瀏覽器中打開 VS Code 了,就像上圖所示。
Docker
但這 code-server 僅僅是在本地運行起來了。
如果我想將其部署到公網(wǎng)供我隨時訪問呢?或者極端一點,如果我想為其他人也部署一個 code-server 怎么辦呢?或者我想為一百個人部署自己專屬的 code-server 怎么辦呢?
所以,這時候一個很好的方案就是上 Docker + Kubernetes 了。
既然要上 Docker,那就順便對 code-server 做一些基礎(chǔ)化的配置吧,比如預(yù)裝一些插件,比如設(shè)置一些主題,比如設(shè)置一些編輯器配置等等。
我本地的 VS Code 現(xiàn)在在用一個我個人覺得比較好看的主題,叫做 Material Ocean,效果是這樣的:
這是通過安裝一個插件實現(xiàn)的,叫做 Material Theme:
另外還有一些基礎(chǔ)的插件,比如 Python的支持、自動提示等等。
另外既然要支持 Python 了,那也可以在 Docker 里面配置一些基礎(chǔ)的 Python 庫,以免使用的時候再安裝。
其他的一些配置比如代碼規(guī)范、縮進(jìn)、換行等都可以通過 VS Code 的一些 settings.json 配置來實現(xiàn)。
等等還有一些其他的優(yōu)化項可以自行發(fā)揮啦。
基本上就是這么多了,所以接下來就可以寫 Dockerfile 了。
這里我直接基于 ubuntu 18.04 來開始搭建了,編寫一個 Dockerfile 如下:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
openssl \
net-tools \
git \
zsh \
locales \
sudo \
dumb-init \
vim \
curl \
wget \
bash-completion \
python3 \
python3-pip \
python3-setuptools \
build-essential \
python3-dev \
libssl-dev \
libffi-dev \
libxml2 \
libxml2-dev \
libxslt1-dev \
zlib1g-dev
RUN chsh -s /bin/bash
ENV SHELL=/bin/bash
RUN ARCH=amd64 && \
curl -sSL "https://github.com/boxboat/fixuid/releases/download/v0.4.1/fixuid-0.4.1-linux-$ARCH.tar.gz" | tar -C /usr/local/bin -xzf - && \
chown root:root /usr/local/bin/fixuid && \
chmod 4755 /usr/local/bin/fixuid && \
mkdir -p /etc/fixuid && \
printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml
RUN CODE_SERVER_VERSION=3.10.2 && \
curl -sSOL https://github.com/cdr/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server_${CODE_SERVER_VERSION}_amd64.deb && \
sudo dpkg -i code-server_${CODE_SERVER_VERSION}_amd64.deb
RUN locale-gen en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
RUN adduser --disabled-password --gecos '' coder && \
adduser coder sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers;
RUN chmod g+rw /home && \
mkdir -p /home/coder/workspace && \
mkdir -p /home/coder/.local && \
chown -R coder:coder /home/coder && \
chown -R coder:coder /home/coder/.local && \
chown -R coder:coder /home/coder/workspace;
USER coder
RUN git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && \
~/.fzf/install
ENV PASSWORD=${PASSWORD:-P@ssw0rd}
COPY ./extensions /home/coder/.local/extensions
RUN /usr/bin/code-server --install-extension ms-python.python && \
/usr/bin/code-server --install-extension esbenp.prettier-vscode && \
/usr/bin/code-server --install-extension equinusocio.vsc-material-theme && \
/usr/bin/code-server --install-extension codezombiech.gitignore && \
/usr/bin/code-server --install-extension piotrpalarz.vscode-gitignore-generator && \
/usr/bin/code-server --install-extension aeschli.vscode-css-formatter && \
/usr/bin/code-server --install-extension donjayamanne.githistory && \
/usr/bin/code-server --install-extension ecmel.vscode-html-css && \
/usr/bin/code-server --install-extension pkief.material-icon-theme && \
/usr/bin/code-server --install-extension equinusocio.vsc-material-theme-icons && \
/usr/bin/code-server --install-extension eg2.vscode-npm-script && \
/usr/bin/code-server --install-extension ms-ceintl.vscode-language-pack-zh-hans && \
/usr/bin/code-server --install-extension /home/coder/.local/extensions/tkrkt.linenote-1.2.1.vsix && \
/usr/bin/code-server --install-extension dbaeumer.vscode-eslint
RUN /usr/bin/python3 -m pip install -U pip setuptools
RUN /usr/bin/python3 -m pip install requests httpx scrapy aiohttp pyquery beautifulsoup4 \
selenium pyppeteer pylint flask django tornado numpy pandas scipy autopep8
COPY settings.json /home/coder/.local/share/code-server/User/settings.json
RUN sudo chown coder /home/coder/.local/share/code-server/User/settings.json
COPY entrypoint.sh /home/coder/.local/entrypoint.sh
RUN sudo chmod +x /home/coder/.local/entrypoint.sh
WORKDIR /home/coder/workspace
EXPOSE 8080
ENTRYPOINT ["/bin/sh", "/home/coder/.local/entrypoint.sh"]
這里就直接把 Dockerfile 列出來了,主要分這么幾步:
-
裝一些基本的環(huán)境依賴庫
-
設(shè)置 shell
-
安裝 code-server
-
設(shè)置工作目錄
-
安裝 code-server 插件
-
安裝 Python 常用的庫
-
設(shè)置 VS Code 的 settings
-
設(shè)置運行目錄
-
設(shè)置運行腳本入口
比如 VS Code 插件我就提前裝好了 Material Theme 插件,然后在 settings.json 里面啟用對應(yīng)的主題即可:
{
"workbench.colorTheme": "Material Theme",
"workbench.iconTheme": "material-icon-theme",
"git.enableSmartCommit": true,
"editor.tabSize": 2,
"editor.detectIndentation": false,
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.fontSize": 16,
"editor.suggestSelection": "first",
"files.autoGuessEncoding": true,
"files.autoSave": "afterDelay",
"terminal.integrated.inheritEnv": false,
"vetur.experimental.templateInterpolationService": true,
"[typescript]": {
"editor.tabSize": 2
},
"[javascript]": {
"editor.tabSize": 2
},
"[python]": {
"editor.tabSize": 4,
"editor.defaultFormatter": "ms-python.python"
}
}
這里配置文件主要配置了主題、字體大小、縮進(jìn)等內(nèi)容,當(dāng)然這個如果你要自己配置的話就按照自己的喜好來就好了。
最后通過 docker-compose.json 文件配置鏡像信息:
version: "3"
services:
code-server:
container_name: "code-server"
build: .
image: "germey/code-server"
ports:
- "8080:8080"
OK,基本就是這樣,運行:
docker-compose build
就可以成功構(gòu)建一個鏡像了,然后運行:
docker-compose push
即可把鏡像 push 到我的 Docker Hub 上面,等待部署即可。
Kubernetes 部署
對于部署 Kubernetes 來說,如果要做到方便部署且靈活管理的話,那就不得不用到 Helm 了,我可以寫一個 Helm Chart,定義好一些模板文件和占位符,同時設(shè)置默認(rèn)的配置選項,這樣我們就可以通過一條簡單的命令來部署這個 Docker 鏡像了。
“如果你沒有用過 Helm 的話可以搜索相關(guān)資料了解下。
”
這里 Chart 的具體實現(xiàn)我就不再贅述了,主要就包括了幾個部分:
-
Deployment
-
Service
-
Ingress
-
PersistentVolumeClaim
-
ServiceAccount
-
Secret
具體的配置我都放在 GitHub 了:https://github.com/Python3WebSpider/CodeServer/tree/master/chart,需要的話自取即可。
有了 Chart 之后,我只需要一條命令即可部署一個在線的 VS Code,命令如下:
helm install code-server-<username> . --namespace <namespace> --set user=<username> --set password=<password>
“注意運行目錄在 chart 路徑下才可以。
”
這里我們傳入了 usrname、namespace、password。
這里我配置了解析域名 code-
helm install code-server-germey . --namespace scrape --set user=germey --set password=1234
這里用戶名我替換成了 germey,命名空間我用了 scrape,密碼用了 1234。
運行這條命令之后,我就能得到一個 https://code-germey.scrape.center/ 網(wǎng)站了。
沒錯,就是一條命令部署一個 VS Code,而且有專屬域名。
打開之后效果如下:
輸入對應(yīng)的密碼之后,就可以進(jìn)入對應(yīng)的 VS Code 編輯器頁面了,如圖所示:
這里我可以新建 Python 文件,然后在線運行:
另外還可以在命令行下像在 Linux 下一樣操作,比如安裝一個新的 Python 庫:
pip3 install pillow
非常方便。
另外插件頁面也可以看到我安裝的一些插件:
也可以在此繼續(xù)添加想要的插件。
全屏之后活脫脫就是一個桌面版本的 VS Code!
唯一不是很方便的就是在里面跑一些 Web 服務(wù),因為 Web 服務(wù)相當(dāng)于在 Docker 里面運行的,不過不要緊,我們只需要在 Chart 里面增加幾個端口映射就好了。
有了它,我在里面寫了代碼,切換了不同 PC,我不用再關(guān)心代碼的同步問題了。另外我就可以一鍵給別人分配一個 Online 版本的 VS Code,別人寫了代碼之后也可以方便拿給我看問題,也方便直接給別人分享我寫的代碼和運行效果,簡直不要太爽了!
往期推薦 01 02 03
↓點擊閱讀原文查看pk哥原創(chuàng)視頻
我就知道你“在看”
