基于云原生构建的远程开发解决方案,支持通过 WebIDE、VSCode 客户端、Cursor 客户端连接远程开发环境进行远程开发。
参考文档:云原生开发介绍
在仓库分支页面,点击右上角 云原生开发 按钮,一键创建开发环境, 无需任何配置,即可直接打开一个默认的开发环境。当然这个默认环境并不是永久有效的,具体可参考远程开发工作区回收机制。
端口转发:https://docs.cnb.cool/zh/workspaces/business-preview.html

启动 nginx 镜像
docker run -d --name dd-nginx -p 80:80 nginx
启动 redis 镜像
docker run -d --name dd-redis -p 6379:6379 -e REDIS_PASSWORD=123456 redis redis-server --requirepass 123456
你将学习到的知识点包括:
1️⃣自定义系统镜像编写
2️⃣自定义开发环境编写
3️⃣自定义镜像仓库推送
4️⃣镜像的查找
5️⃣自定义云开发环境CPU核数
如果你希望使用自定义系统镜像(例如添加 java、node、python、Go环境等等),而不使用默认镜像,则需要你在仓库的根目录下创建一个名为.cnb.yml 的配置文件,并填写如下内容:
$:
# vscode 事件:专供页面中启动远程开发用
vscode:
- docker:
# 自定义镜像作为开发环境
image: ubuntu:25.04
services:
- vscode
- docker
镜像如何查找,可以通过dockerhub进行查找,也可以用轩辕镜像 DockerHub 搜索,毫秒镜像进行镜像查找
现在点击云原生开发,会出现以下界面代表正在启动中,其中在环境创建中... 后面有个倒计时,代表距离系统创建还差多长时间完成。一般环境都会在10秒之内创建完成。在下面还有对应创建的日志,可以看在启动过程中有没有报错。

启动成功后自动跳转WebIDE界面中,其中环境配置下方则提示你使用的cpu核数、内存、以及快速关闭和自动回收♻️机制。

编辑仓库根目录下的.cnb.yml配置runner.cpus 声明需要的开发资源,最大支持 64核,内存为 cpus x 2(GB)。
云原生开发环境核数计费详见:CNB计费模式
$:
# vscode 事件:专供页面中启动远程开发用
vscode:
- docker:
# 自定义镜像作为开发环境
image: ubuntu:25.04
runner:
cpus: 2
services:
- vscode
- docker
# 开发环境启动后会执行的任务
stages:
- name: ls
script: ls -al
重新启动环境,可以很明显的看到环境配置已经变成2核 4G内存

通过cat /etc/os-release指令查看操作系统是否是我们指定的镜像版本

这是我们点击自己头像中的我的云原生开发,会发现当前云原生开发环境只支持WebIDE,这是不符合我们预期的

在基础案例中我们使用了自定义镜像,但是这个镜像只支持WebIDE,如果想要支持ssh则需要安装自定义dockerfile并添加openssh-server服务。 添加Dockerfile文件到仓库根目录,并添加如下内容:
FROM ubuntu:25.04
RUN apt-get update && \
apt-get install -y git rsync jq git-lfs vim curl wget unzip lsof nload htop net-tools dnsutils openssh-server && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://code-server.dev/install.sh | sh &&\
code-server --install-extension cnbcool.cnb-welcome &&\
code-server --install-extension redhat.vscode-yaml &&\
code-server --install-extension waderyan.gitblame &&\
code-server --install-extension mhutchie.git-graph &&\
code-server --install-extension donjayamanne.githistory &&\
code-server --install-extension cloudstudio.live-server &&\
code-server --install-extension tencent-cloud.coding-copilot
# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
我们进行镜像构建、推送
# 镜像构建
docker build -t docker.cnb.cool/dadong.cnb/test/test/ubuntu:25.04 .
# 镜像推送
docker push docker.cnb.cool/dadong.cnb/test/test/ubuntu:25.04
推送成功后,我们将会在本仓库的制品中看到我们刚刚推送的镜像

修改.cnb.yml文件,添加我们刚刚推送的镜像
$:
# vscode 事件:专供页面中启动远程开发用
vscode:
- docker:
# 自定义镜像作为开发环境
image: docker.cnb.cool/dadong.cnb/test/test/ubuntu:25.04
runner:
cpus: 2
services:
- vscode
- docker
# 开发环境启动后会执行的任务
stages:
- name: ls
script: ls -al
重新启动环境,并打开我的云原生开发界面,发现已有WebIDE,VSCode,Cursor,SSH选项

自定义开发环境
这里以自定义go语言环境为例
go语言开发环境有2种方式,第一种最简单在dockerfile文件中添加 apt install -y go 命令安装,第二种采用在Dockerfile中添加 RUN 命令下载二进制进行安装
FROM ubuntu:25.04
RUN apt-get update && \
apt-get install -y git rsync jq git-lfs vim curl wget unzip lsof nload htop net-tools dnsutils openssh-server && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置工作目录(可选)
WORKDIR /workspace
RUN curl -fsSLO https://go.dev/dl/go1.24.5.linux-amd64.tar.gz &&\
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.5.linux-amd64.tar.gz &&\
ln -sf /usr/local/go/bin/go /usr/bin/go && \
rm -rf go1.24.5.linux-amd64.tar.gz
RUN curl -fsSL https://code-server.dev/install.sh | sh &&\
code-server --install-extension cnbcool.cnb-welcome &&\
code-server --install-extension redhat.vscode-yaml &&\
code-server --install-extension waderyan.gitblame &&\
code-server --install-extension mhutchie.git-graph &&\
code-server --install-extension donjayamanne.githistory &&\
code-server --install-extension cloudstudio.live-server &&\
code-server --install-extension tencent-cloud.coding-copilot
# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
执行镜像构建、推送,关闭当前云开发环境并重新启动,输入go version 查看是否安装成功
n8n 地址:https://github.com/n8n-io/n8n
n8n 中文插件地址:https://github.com/other-blowsnow/n8n-i18n-chinese
services:
n8n:
image: n8nio/n8n:1.104.2
container_name: n8n
ports:
- "5678:5678"
environment:
- N8N_DEFAULT_LOCALE=zh-CN
- N8N_SECURE_COOKIE=false
volumes:
- ./dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist
- ./n8n_data:/home/node/.n8n
restart: always
$:
vscode:
- services:
- vscode
- docker
# 开发环境启动后会执行的任务
env:
# 配置环境变量,指定首次打开终端时自动执行的命令
CNB_WELCOME_CMD: |
chmod -R 777 n8n_data
docker compose up -d
你将学习到的知识点包括:
1️⃣ dify一键启动
2️⃣ dify持久化存储
3️⃣自定义环境销毁前任务
4️⃣python脚本的编写
github:https://github.com/langgenius/dify
准备代码:dify-1.5.1

先编写启动的python脚本: start.py
注意:脚本执行需传入相应的port,例如:python start.py 8080
import webbrowser
import os
import sys
port = sys.argv[1]
original_uri = os.getenv("CNB_VSCODE_PROXY_URI")
appurl = original_uri.replace("{{port}}", port)
print("欢迎欢迎,热烈欢迎!")
print("欢迎使用 Dify 环境!")
print(f'\tdify环境访问:')
print(f"\t - http://localhost:{port}")
print(f"\t - {appurl}")
webbrowser.open_new_tab(appurl)
print("1. 如果没有自动打开界面,请检查一下你的浏览器,是否阻止了弹出式窗口")
print("2. 如果还未打开界面,请手动点击port为80端口后面的小地球开始吧~")
配置cnb云原生开发点击自动运行,无需手动在点击一次
新建 .cnb/setting.yml 文件,并填写以下内容:
workspace:
launch:
# 自动打开webIde
autoOpenWebIDE: true
编写.cnb.yml文件
$:
vscode:
- docker:
image: docker.cnb.cool/dadong.cnb/cloud/os/ubuntu:25.04
env:
# 配置环境变量,指定首次打开终端时自动执行的命令
CNB_WELCOME_CMD: |
cd docker
docker-compose up -d
python ../start.py 80
services:
- vscode
- docker
在基础案例中已经实现基于CNB一键启动dify,接下来我们来实现基于CNB持久化存储dify的数据,以及自定义环境销毁前任务。
注释.gitignore文件中关于docker/volumes/*目录的内容,并执行git add . git commit -m "add" git push
启动云原生开发环境,会基于我们基础案例自动进入docker目录,执行docker compose up -d指令
修改云原生开发环境中的.cnb.yml文件,添加以下内容:
$:
vscode:
- docker:
image: docker.cnb.cool/dadong.cnb/cloud/os/ubuntu:25.04
env:
# 配置环境变量,指定首次打开终端时自动执行的命令
CNB_WELCOME_CMD: |
cd docker
mkdir -p volumes/db/data/pgdata/pg_notify volumes/db/data/pgdata/pg_tblspc volumes/db/data/pgdata/pg_replslot volumes/db/data/pgdata/pg_twophase volumes/db/data/pgdata/pg_commit_ts volumes/db/data/pgdata/pg_logical/{snapshots,mappings}
chown -R 70:70 volumes/db/data
docker compose up -d
python ../start.py 80
services:
- vscode
- docker
# 开发环境销毁前会执行该任务
endStages:
- name: sync code
script: git add . && git commit -m "自动提交:$(date '+%Y-%m-%d %H:%M:%S')" && git push
关闭云原生开发环境,等待流水线启动完成,之后项目的重启就会自动持久化数据