惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
Webroot Blog
Webroot Blog
GbyAI
GbyAI
S
SegmentFault 最新的问题
Cyberwarzone
Cyberwarzone
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 【当耐特】
S
Secure Thoughts
酷 壳 – CoolShell
酷 壳 – CoolShell
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta
S
Security Affairs
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
Spread Privacy
Spread Privacy
T
Threatpost
Forbes - Security
Forbes - Security
C
Cisco Blogs
Scott Helme
Scott Helme
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
腾讯CDC
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
小众软件
小众软件
V
Vulnerabilities – Threatpost
美团技术团队
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 司徒正美
C
Cybersecurity and Infrastructure Security Agency CISA
Martin Fowler
Martin Fowler
博客园 - 聂微东

短巷与雨

用免费域名,搭建一个自己的临时邮箱服务保护您的真实邮箱地址 PakePlus打包程序的使用体验 备案 Vercel & Cloudflare 项目分享 Linux日志查找 IPV6.ARPA域名申请并托管到Cloudflare 再见,普莫雍措 CNB迁移和UI定制 ZFile工具 CNB刷新EO缓存和插件化 备案 CNB创建知识库 小工具 备案 备案 备案 SSH免密登录 UV和Mamba包管理工具 消息摘要(Message Digest)
CNB远程部署和EdgeOne Pages
Hudi(唱唱反调) · 2025-08-24 · via 短巷与雨

​ 由于我目前已经把我的博客项目从GitHub迁移到腾讯云的CNB上了,并且最近也是在一直倒腾这个CNB。写这篇文章的主要目的是,去解决一些重复性的工作。在这之前我的站点,主要是依靠Hexo提供的hexo-deployer-git这个插件去部署的静态页面。既需要部署更新后的页面。又需要提交新的代码到GitHub,觉得有些繁琐,后面我看了青萍老哥写的一些devops的文章,就在想可以把页面打包成docker镜像,但是我发现我得自己去搭建持续集成和部署的那些平台。耗费服务器资源不说(没那么大的服务器),还费时费力。后来看到Liushen写了一篇『1Panel自动同步Github仓库』 的文章,我也尝试去操作了,但是我的工作流提示成功,静态产物也上传到CNB仓库了,不知道什么原因没同步到服务去上去。所以我索性把博客项目直接迁移到CNB上了。这样直接上传代码到CNB工作流自动部署。

​ 下面就介绍用cnb代码仓库+hexo+rsync远程部署项目,由hexo,hugo等框架生成的静态站点均可这样部署。

CNB远程部署站点

一、密钥仓库

CNB创建代码仓库,上传博客代码,这里省略。注意:博客项目配置文件需要一并上传,博客代码仓库私有化。

​ 密钥仓库是 云原生构建 提供的安全型代码仓库,专为存储敏感信息(如密码、API密钥、证书等)设计。 通过严格的访问控制、页面水印、审计追踪等机制,实现敏感数据的安全存储与合规使用。

1、创建密钥仓库

创建链接地址:https://cnb.cool/new/repos 。公开性选择:密钥仓库即可。如下:

image-20250824142837146

创建完仓库后,在仓库中新建env.yml。文件名称自拟,但时语法必须是yml或者是json。

密钥仓库还有按需使用,限定流水线引用等详细教程说明看这里:https://docs.cnb.cool/zh/repo/secret.html

2、配置ssh免密登录

在远程服务器创建ssh密钥。

1
ssh-keygen -t rsa  

将公钥 id_rsa.pub 文件的内容添加到远程机器的 ~/.ssh/authorized_keys 文件中或者执行以下命令

1
ssh-copy-id -p 22 root@服务器ip

3、配置密钥仓库

复制私钥到密钥仓库的env.yml文件中,

1
cat /root/.ssh/id_rsa

~/.ssh/目录下的id_rsa文件内容复制到env.yml。格式如下

1
2
3
4
5

RSYNC_KEY: |
id_rsa的内容

RSYNC_USER: root

二、rsync插件使用

​ CNB还提供了还很多插件,包括之前讲到的知识库插件,还有webhook,微信\QQ小程序构建、CNB自动部署Edgeone Pages、Helm单元测试等等。更多的插件内容和用法看这里https://docs.cnb.cool/zh/plugins.html

在博客代码仓库中添加流水线.cnb.yml内容如下:

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
master:  
push:
- docker:
image: node:20
volumes:
- /root/.npm:cow
stages:
- name: yarn install
script: yarn install
- name: build
script: yarn build
- name: rsync 上传到服务器
image: tencentcom/rsync

imports: https://cnb.cool/***/-/blob/main/envs.yml
settings:
user: $RSYNC_USER
key: $RSYNC_KEY
port: 22
hosts:
- 服务器IP
- 服务器IP

source: ./public/*
target: /root/hexo/
script:
- echo "after script"
- ls /root/hexo

上面的配置文件只需要修改以下内容:

1、imports:引用密钥仓库配置文件,修改成你的密码仓库路径即可 例如 https://cnb.cool/hudi22/hudikey/-/blob/main/env.yml

2、hosts:服务器的IP列表 注意:远程主机中需要已安装 rsync

3、source:表示你的博客项目静态构建产物的目录 例如 ./dist

4、target:需要部署到服务的哪个目录下 例如 /root/hexo

完成上述并提交修改后,就会自动触发构建静态产物并同步到远程服务器的相应目录中了。🎉🎉🎉

CNB部署到EdgeOne Pages

​ 最简单的就是再EdgeOne Pages控制台界面去关联CNB仓库,但是也可以通过CNB的流水线去部署产物到Pages。下面就通过CNB的流水线去部署。

前提:已有 EdgeOne 账号并创建了 Pages 项目, 注意这个项目必须是 直接上传 类型。(有点鸡肋既然都要登录EdgeOne Pages创建项目,为什么不直接关联仓库🤣)。API Token不能直接创建项目吗?

1、在Pages创建一个直接上传类型的项目。上传一个空文件夹就行,它会自动部署,如下 项目名字:自定义即可。

image-20250824155457707

2、创建API Token,并添加到cnb的密钥仓库中。

image-20250824155755511

密钥仓库信息如下:

1
EDGEONE_API_TOKEN: sn8dgNgl**********n4Gy7Cs=

3、创建.cnb.yml流水线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

main:
push:

- imports: https://cnb.cool/***/-/blob/main/envs.yml
stages:

- name: Build Current Project
image: node:20
script: node -v && npm install && npm run build

- name: Deploy to EdgeOne Pages
image: node:20
script: npx edgeone pages deploy <outputDirectory> -n <projectName> -t $EDGEONE_API_TOKEN

: 项目构建后产物所在的文件夹(必填) 例如我的是 ./public

-n, –name: 需要部署的项目名称 ,例如 blogc根据第一步创建的为准。项目必须存在,他官方说的没有会自动创建,但是我试过了没有创建时会出错,应该是个api的bug还没有修复,要不然就是文档给错了。

构建完成后,就会把构建产物部署到EdgeOne Pages上了。进去控制台通过临时域名就能访问。

cnb的部署EdgeOne Pages插件还提供了预发以及生产两个环境部署方法有需要的可以看一下这里:https://docs.cnb.cool/zh/plugin/#public/tencentcom/deploy-eopages

​ 其实很早就在看EdgeOne Pages,因为我想部署一些由前端编写的工具。但是我前段时间使用流水线去部署到Pages的时候,一直提示获取项目ID错误,如下图。但是官方给出的说是没有项目会自动创建项目,手动创建以后就不会报这个错误❌了。

image-20250824170339443

多条流水线

​ 有的时候时候,我们会需要一次提交代码做好几个任务,比如修改完源码提交仓库以后,需要把当前的项目构建的产物部署到Edgo Pages上。并且帮我打包成一个docker镜像。这时候我们可以使用多流水线去完成这个操作。更多关于流水线的内容看这里: https://docs.cnb.cool/zh/build/grammar.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
main:
push:
- services:
- docker
stages:
- name: set docker tag
script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest"
exports:
info: IMAGE_TAG
- name: docker build
script: docker build -t $IMAGE_TAG .
- name: push image
script: docker push $IMAGE_TAG
- imports: https://cnb.cool/***/-/blob/main/envs.yml
stages:

- name: Build Current Project
image: node:20
script: node -v && npm install && npm run build

- name: Deploy to EdgeOne Pages
image: node:20
script: npx edgeone pages deploy ./public -n blogc -t $EDGEONE_API_TOKEN

构建信息如下:可以看到pipeline-1和pipeline-2两条流水线。一条流水线是将产物打包成docker镜像,一条流水线将产物发布到EdgeOne Pages上。

image-20250824165706896

总结

​ 比起GitHub国内限制,CNB确实要快的多,又有免费的云开发环境。免费的制品库,最近还免费白嫖到了EdgeOne的CDN加速,还有Pages可以用,那既然要白嫖,那就贯彻到底咯🤣。尤其是CNB和EdgeOne才起步难免还会有很多问题。但是我还是坚信,他能够做的更好。

​ 再哔哔一下,CNB有一个云原生桌面项目,我fork了一个看这里:https://cnb.cool/hudi22/Desktop 。就是直接在浏览器使用Debian桌面版开发环境。有兴趣的朋友可以看看。但是注意免费额度🤣。