搭建个人在线IDE —— vscode online
2021-04-02 tech vscode ide 9 mins 3 图 3242 字
前年,微软在 Ignite 2019
大会上,正式发布了 「Visual Studio Online」。其中包含了微软托管的 Web
版 VSCode
,后来发布的 VSCode 1.40
支持开发者直接从 VSCode
的源代码编译出 Web
版 VSCode
。
由于我目前开发环境众多,win/mac/Linux都有,虽然已经对代码做了容器化,还是需要重复下载代码,配置IDE环境,挺麻烦的。这篇文章简单记录我搭建在线IDE的过程。
安装
配置VSCode Online有几种方法:
- 微软官方提供一个收费版本(含azure的服务器费用,捆绑销售),不推荐
- 下载 VSCode 源代码,编译以后通过yarn web启动。配置难度大,不推荐
- 通过 Code-Server 安装: https://code-server.dev/
- 使用/修改现成的 docker 镜像:linuxserver/docker-code-server
我目前的方法是自行编译 linuxserver 提供的镜像。实际上只用linuxserver 的镜像已经足够了,没有特殊自定义要求的可以跳过这一部分。
这个文件是 code-server实际的启动命令,可以按需自定义修改:
#!/usr/bin/with-contenv bash
if [ -n "${PASSWORD}" ] || [ -n "${HASHED_PASSWORD}" ]; then
AUTH="password"
else
AUTH="none"
echo "starting with no password"
fi
if [ -z ${PROXY_DOMAIN+x} ]; then
PROXY_DOMAIN_ARG=""
else
PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}"
fi
exec \
s6-setuidgid abc \
/usr/local/bin/code-server \
--bind-addr 0.0.0.0:8443 \
--user-data-dir /config/data \
--extensions-dir /config/extensions \
--disable-telemetry \
--auth "${AUTH}" \
"${PROXY_DOMAIN_ARG}" \
/config/workspace
例如我将端口由 8443 改成了 80。
--bind-addr 0.0.0.0:80
修改 dockerfile 中的 expose 内容
EXPOSE 8443
改为
EXPOSE 80
在项目主目录进行编译:
docker build \
--no-cache \
--pull \
-t kelvinblood/code-server:base .
运行
参考 https://github.com/linuxserver/docker-code-server 的帮助内容,我做了调整:
docker-compose.yml:
version: "2.1"
services:
code-server:
image: kelvinblood/code-server:base
container_name: code-server
network_mode: bridge
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- PASSWORD=xxxx #optional
# - HASHED_PASSWORD= #optional
# - SUDO_PASSWORD=abcd #optional
# - SUDO_PASSWORD_HASH= #optional
- PROXY_DOMAIN=xxx.kelu.org #optional
volumes:
- ./config:/config
- /root/abc:/Workspace/abc
- /root/xxx:/Workspace/xxx
# ports:
# - xxxx:80
restart: unless-stopped
配置nginx
在这一块我做多了几个安全认证,这几项都不是必须的,可以跳过,一个是使用https访问:
ssl_certificate /etc/letsencrypt/live/code.kelu.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/code.kelu.org/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
一个是nginx密码:
auth_basic "Please input password";
auth_basic_user_file /etc/nginx/passwd/goaccess;
一个是允许特定IP访问:
satisfy any;
allow xxx;
allow xxx;
deny all;
最后要注意配置 websocket 代理配置,最后两行:
location / {
satisfy any;
allow 121.31.34.22;
allow 61.51.94.34;
deny all;
proxy_pass http://code-server.bj1.local;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding gzip;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
界面预览
装上自己需要的插件,就可以开始开发了。
参考资料
- how to run code-server behind cloudflare and nginx #1560 - github
- 自宅サーバーで Docker + Nginx + code-serverを動かそうとした話
- code-server 構築の茨の道と、その近道
- linuxserver/docker-code-server
- https://hub.docker.com/_/microsoft-vscode-devcontainers
- https://visualstudio.microsoft.com/zh-hans/services//github-codespaces/
- https://zhuanlan.zhihu.com/p/342964881