二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • CNB

    • 用上赛博菩萨CNB,咱直接起飞
    • CNB云原生开发环境届的瑞士军刀,详解qifei项目
      • 背景
      • 详解项目
        • 简介
        • 如何使用
        • 自定义按钮
        • 开发语言环境
        • 终端支持 Oh My ZSH
        • 丰富的开发工具
        • database 插件
        • 各种优秀开源项目即刻体验
        • one more thing
      • 结语
  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • CNB
二丫讲梵
2025-07-24
目录

CNB云原生开发环境届的瑞士军刀,详解qifei项目

文章发布较早,内容可能过时,阅读注意甄别。

注: 本文首发于: 一个项目,如何让你在CNB天天起飞 (opens new window)

# 背景

在 CNB 中,构建以及开发都是基于云原生环境构筑的,因此镜像成为这些操作的底层环境支撑,默认情况下,官方会以 cnbcool/default-dev-env:latest 作为拉起环境的基础镜像,但这个镜像只做了通用的基础封装,我们可以自己封装一些镜像,来作为开发与构建的基础环境。

打造一个趁手的基础镜像,这是我从接触CNB一开始就在做的事情,经过长时间的打磨与优化,我做出了一个近乎完美的云开发环境,它容纳了大量的效率实践,能涵盖你开发过程中的各种场景,下边我会逐一介绍,带你领略优雅的运维魅力。

# 详解项目

# 简介

  • 项目地址: https://cnb.cool/znb/qifei (opens new window)
  • 项目依赖镜像对应的 Dockerfile: https://cnb.cool/znb/images/-/blob/main/base/debian-all/Dockerfile (opens new window)

项目主页图:

# 如何使用

第一步:Fork 项目

访问开源项目地址:https://cnb.cool/znb/qifei (opens new window),点击右上角 Fork 按钮,将项目复制到你的组织下。

第二步:点击起飞

点击右上角起飞按钮,即可享受该项目。

# 自定义按钮

在 CNB 中,你可以通过 .cnb/settings.yml 配置文件,自定义项目的一些基础信息。我这里定义了Fork和Issue以及启动云开发的自定义背景图,配置如下:

workspace:
  launch:
    button:
      name: 🛫 起飞
      description: 💪 逐步迈向运维的四个现代化:规范化,标准化,高效化,优雅化
      hoverImage: .cnb/qifei.gif
    cpus: 16
    disabled: false
    autoOpenWebIDE: false

issue:
  button:
    description: 🙋🏻‍♀️ I Have A Question
    hoverImage: ".cnb/jushou.jpg"

fork:
  button:
    description: 🫵 年轻人,你很眼光
    hoverImage: ".cnb/trump.gif"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

更多配置,详见官方文档:UI 定制 (opens new window)

三个按钮的效果如下:

# 开发语言环境

项目镜像默认提供了 golang 和 nodejs 的开发环境,对应版本信息分别如下:

同时两个工具是基于nvm和gvm集成的,因此,如果临时开发项目版本不合适,可通过这两个工具快速切换版本。

因个人常用开发语言是这两个,因此默认集成了这两个语言,欢迎使用其他语言开发的同学,参考当前项目,定制贡献其他语言的环境。

# 终端支持 Oh My ZSH

即便是临时使用的 VScode 终端,也不能将就。

于是,经过一番探索,我把本地终端提效利器 Oh My ZSH 集成到了云开发环境中。

配置定义如下:

# set bash to zsh
RUN sh -c "$(wget -O- https://github.com/deluan/zsh-in-docker/releases/download/v1.2.1/zsh-in-docker.sh)" -- \
    -t https://github.com/skylerlee/zeta-zsh-theme \
    -p https://github.com/paulirish/git-open \
    -p git -p ssh-agent -p 'history-substring-search' -p z -p wd \
    -p sudo -p extract -p hitokoto -p colored-man-pages -p docker -p docker-compose \
    -p https://github.com/zsh-users/zsh-autosuggestions \
    -p https://github.com/zsh-users/zsh-syntax-highlighting \
    -p https://github.com/zdharma-continuum/fast-syntax-highlighting \
    chsh -s /bin/zsh root

RUN  echo 'exec zsh' >> /root/.bashrc &&\
     echo '# custom alias' > ~/.aliases.zsh &&\
     echo 'alias src="source ~/.zshrc"' >> ~/.aliases.zsh &&\
     echo 'alias cl="clear"' >> ~/.aliases.zsh &&\
     echo 'alias bash="zsh"' >> ~/.aliases.zsh &&\
     echo 'alias gop="git-open"' >> ~/.aliases.zsh &&\
     echo 'alias dp="docker ps"'  >> ~/.aliases.zsh &&\
     echo 'alias di="docker images"'  >> ~/.aliases.zsh &&\
     echo 'alias cdw="cd /workspace"'  >> ~/.aliases.zsh &&\
     echo 'alias docker-compose="docker compose"'  >> ~/.aliases.zsh &&\
     echo 'alias ll="ls -lhtr"'  >> ~/.aliases.zsh &&\
     echo 'alias ..="cd .."'  >> ~/.aliases.zsh &&\
     echo 'alias ...="cd ../.."'  >> ~/.aliases.zsh &&\
     echo 'alias g="git"' >> ~/.aliases.zsh &&\
     echo 'alias ping="docker run --rm --network host docker.cnb.cool/znb/images/alpine ping "' >> ~/.aliases.zsh &&\
     echo 'alias gping="docker run --rm -ti --network host docker.cnb.cool/znb/images/gping "' >> ~/.aliases.zsh &&\
     echo "alias openw='python3 -m webbrowser \"\$CNB_VSCODE_WEB_URL\"'" >> ~/.aliases.zsh &&\
     echo "alias openv='python3 -m webbrowser \"\$CNB_VSCODE_REMOTE_SSH_SCHEMA\"'" >> ~/.aliases.zsh &&\
     echo 'open() { python3 -m webbrowser "http://localhost:$1"; }' >> ~/.aliases.zsh &&\
     echo 'openr() { python3 -m webbrowser "$(echo "${CNB_VSCODE_PROXY_URI//\{\{port\}\}/$1}")"; }' >> ~/.aliases.zsh &&\
     echo "alias opendoc='python3 -m webbrowser https://cnb.cool/znb/qifei/-/issues/3'" >> ~/.aliases.zsh &&\
     echo 'source ~/.aliases.zsh' >> ~/.zshrc

# 添加以下RUN命令来填充历史命令
RUN echo ': 1751940881:0;vim Dockerfile' >> /root/.zsh_history && \
    echo ': 1751940882:0;vim docker-compose.yaml' >> /root/.zsh_history && \
    echo ': 1751940883:0;docker-compose up -d' >> /root/.zsh_history && \
    echo ': 1751940884:0;docker ps -a' >> /root/.zsh_history && \
    echo ': 1751940885:0;open 8888' >> /root/.zsh_history

CMD [ "/bin/zsh" ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

我在定义环境时集成了一些 alias 快捷命令,具体内容可看上边内容,这里捡一些比较典型的介绍下,让你了解并用起来:

  • cl:执行 clear 命令,清除当前屏幕终端上的任何信息。
  • gop:执行git-open命令,功能是在CNB打开当前项目。顺便说一句,这个功能是我提交的反馈,详见:https://cnb.cool/cnb/feedback/-/issues/450 (opens new window)
  • di, dp:docker 相关的一些快捷别名。
  • cdw:无论你在环境中去了哪里,执行之后让你回到工作目录。
  • ..,...:无需写入 cd,直接往上层和上上层目录返回。
  • openw:表示打开当前项目的WebIDE界面,如果你当前在vscode界面中,想要跳转打开WebIDE界面,通常需要先到CNB中点击个人头像然后点击我的云原生开发,找到项目的WebIDE按钮,点击跳转。而有了这个别名,一条命令就让你实现跳转。
  • openv:如上同理,如果你当前所在位置是WebIDE中,此时想要打开vscode远程开发,那么可以直接执行openv命令进行跳转,而不用再去个人主页查找。(实测发现对应变量的渲染需要通过vscode打开过之后才会生成)
  • open:表示从本地打开要访问的端口。比如执行:open 8888 则表示在浏览器打开http://localhost:8888。
  • openr:表示从远程监听打开要访问的端口。比如执行:openr 8888则表示在浏览器打开 https://parye2fki0-8888.cnb.run/

    当前,在WebIDE中打开远程访问端口,还需要进行二次确认,这个问题会在不久的将来发版中解决,让你真正一键打开。关于此功能的讨论,详见:https://cnb.cool/cnb/feedback/-/issues/1183 (opens new window)

  • opendoc:打开当前文档。如果你想详细了解这个项目有哪些最佳实践,可以通过opendoc打开文档来浏览。

默认安装了这些插件:git-open, git, ssh-agent, history-substring-search, z, wd, sudo, extract, hitokoto, colored-man-pages, docker, docker-compose, zsh-autosuggestions, zsh-syntax-highlighting, fast-syntax-highlighting,挑一些比较有代表性的来介绍下。

  • zsh-autosuggestions:一个提供输入建议的插件。因为输入建议是基于历史命令来渲染的,为了让你新开环境时可以直接用一些常用操作,我把一些常用的几个 docker 拉起项目的操作写到了历史命令,这样打开终端之后,你可以直接执行,获得提醒,如下图,灰色部分是智能提示的候选内容。
  • extract:任何压缩包,都可以在终端中,用 x 命令解压。
  • zsh-syntax-highlighting:终端美化效果,自动对不同内容着色。
  • z:zsh中强大的跳转插件,它自动解析历史执行过的cd命令,当你下次想要切换到哪个目录,通过 z 关键字 就能跳转。

之所以把这个终端环境打造的如此舒服,就是因为 CNB 的优势在于,它不仅给我们提供了临时的开发环境,还几乎给我们提供了一台随时可用的服务器,如果想要做什么实验,或者搭建什么临时环境,都可以在这个临时服务器上完成,用完销毁即刻,也不用担心因为不熟悉把本地环境搞坏。

# 丰富的开发工具

一个优雅的开发环境,怎能少了常用的数据库等环境,别急,qifei 仓库已为你贴心集成。

假如你现在开发的项目需要一个 MySQL 环境,只需如下命令:

只需要两条命令,依赖的 MySQL 环境,就已到位。

除了 MySQL,还集成了 Redis,MongoDB,PostgreSQL 几个数据库,均可在 README 中看到:

再分享下我是如何实现拉起环境,就能快速跳转的,上文介绍过 z 这个插件,并且 z 还提供了一个 --add 指令,用于将指定目录填写到列表中,于是,我在 .cnb/vscode.yml 中做了如下定义:

      stages:
        - name: start
          script: |
            current_time=$(date +%s)
            find /workspace/letsfly -mindepth 1 -maxdepth 2 -type d | while read dir
            do
              echo "$dir|1000|$current_time"
            done >> /root/.z
1
2
3
4
5
6
7
8

用于把提供的工具快捷方式写入到列表,使得这些项目均可以通过 z 关键字 的方式,跳转到对应目录。目录列表如下:

# database 插件

上边介绍了数据库的拉起,同时我也在环境中集成了 mysql 等命令行客户端,但这仍然非常低效,不符合我们高效的宗旨。

别急,vscode 的插件 database 解你忧,它支持如下截图中的中间件连接管理,几乎涵盖了你开发场景中能遇到的所有存储。

插件提供付费订阅的计划,不过免费版限制最多 3 个连接,对我们临时开发环境来说,足够使用了。

# 各种优秀开源项目即刻体验

除了开发环境的集成,项目还内置了一批个人感觉很不错的开源项目的 compose,可供一键拉起,快速体验。

目前配置的项目列表如下:

你如果还有更好玩的项目,欢迎提交 PR 贡献你的项目。

# one more thing

除了如上介绍的各种摆在面上的可以利用的提效工具之外,qifei 还内置了不少优秀的工具,奉献给懂的人。

air:go 语言编写的热加载工具,开发 go 语言项目的时候,可以直接使用。 upx:优秀的二进制压缩工具,无论是在云原生开发还是云原生构建环境中,都可以直接使用。 gox:go 语言多架构平台二进制并发交叉编译的工具。

gping:更强大的 ping 检测命令。(这个工具通过如上展示过的 alish 命令定义)

运行 gping cnb.run tencent.com eryajf.net,执行效果如下:

dufs:让云开发过程中产生的制品,在本地下载。

# 结语

CNB 是一个开启程序员开发构建新篇章的一个产品,善用各种效率工具,借助其提供的能力,可以实现各种玩法。

欢迎大家来仓库交流更多优秀的玩法。

微信 支付宝
上次更新: 2025/07/24, 09:28:35
用上赛博菩萨CNB,咱直接起飞
给php-7-1-5添加扩展fileinfo

← 用上赛博菩萨CNB,咱直接起飞 给php-7-1-5添加扩展fileinfo→

最近更新
01
学习周刊-总第221期-2025年第30周
07-24
02
vuepress-vdoing主题配置自建不蒜子统计
07-20
03
学习周刊-总第220期-2025年第29周
07-17
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式