
我用树莓派CM0搭建一个超级小巧的个人web站点!
简介
搭建一个超小型的web站点到CM0上,利用512MB的内存和它小巧的2.4GHz Wi-Fi 搭建一个内网的超小型的个人资料整理站。
简介:搭建一个超小型的web站点到CM0上,利用512MB的内存和它小巧的2.4GHz Wi-Fi 搭建一个内网的超小型的个人资料整理站。开源协议
:GPL 3.0
描述
在我写这篇文章的时候,已经是2025年12月31日,是2025年的最后一天,在下班前,我突然想着这个基础文档不要拖到年后了,争取在年前再发布一篇,也算是对自己有个交代。
这次的内容非常简单,就是搭建一个超小型的web站点到CM0上,利用512MB的内存和它小巧的2.4GHz Wi-Fi 搭建一个内网的超小型的个人资料整理站,不仅可以做为博客平台,也可以通过学习markdown语法,实现简单的技术站点部署。
一、设备准备
* 1 x CM0 Dev Kit / Nano Kit 也可以
* 1 x MicroUSB 电源5v @3A
就这些,要简单, 简单,再简单,不然新手不会跟着做。
二、烧录系统
详细参考我第一篇帖子:
https://mp.weixin.qq.com/s/4C-LEV1Gh357opEdLT0L4A?scene=1&click_id=3
三、配置环境
先说明一下,整体思路,是通过mkdocs包和nginx服务器(web)来搭建一个属于自己的web小站,用markdown语法记录一下自己的学习CM0的学习笔记,然后顺便搭建一个git服务器,让CM0成为最小的web服务器和git代码仓库。
操作步骤如下:
1. 创建一个项目目录,我这里无异于一个曼哈顿计划,所以起名manhattan.

2. 进入目录:

3. 安装mkdocs 和nginx包
sudo apt update
sudo apt -y install virtualenv git nginx
sudo apt -y install vim vim-youcompleteme

4. 创建虚拟环境
创建一个干净的虚拟环境,这样不会收到PEP868的影响,安装python的第三方模块也非常顺利。
virtualenv -p python3 venv

激活环境:
source venv/bin/activate

可以看到这里出现虚拟环境的提示,每次重启后记得使用激活环境的命令哦,不然下次启动会提示没有对应的库,你们如果安装opencv也是这样操作。
安装mkdocs的库:
pip install mkdocs


如果看到Successfully就是说明安装成功了。
5. 创建新项目
我想创建的是CM0的学习知识站点,所以我起名为LearningCM0
mkdocs new learningCM0

sudo apt -y install tree

安装个tree,方便给你们看文件结构。

让我们简单操作一下看看效果:
cd learningCM0
ls
mkdocs serve

可以看到我们本地的8000端口开放了一个服务,直接通过浏览器访问http://127.0.0.1:8000/ 端口,就可以看到页面,但是我们是字符界面,怎么会有桌面呢?所以我们先ctrl+C 终止。
先回到终端,然后输入下面的命令:
mkdocs serve -a 0.0.0.0:8000

就会发现,地址变为了任意地址,可以通过查看当前树莓派的IP地址来访问。
查看本机IP:
ifconfig wlan0

实际上我的ip在重启后成为了192.168.3.64,所以下面我打开浏览器访问一下:

是不是挺好看的?也容易实现啊?
接下来让我们atl+F2 打开另外一个终端,或者你可以直接通过远程终端软件例如mobaxterm去连接我们的CM0,然后编辑文件:

这里需要注意的是:开发服务器支持自动重新加载,当配置文件、文档目录或主题目录中的任何内容发生更改时,它将重新构建你的文档,所以只要开着浏览器时时刻刻修改保存就会发生变化。
docs/index.md用你选择的文本编辑器打开文档,将初始标题更改为”CM0学习笔记小站“,然后保存更改。浏览器将自动重新加载,你应该会立即看到更新后的文档,就是这么丝滑~
现在尝试编辑配置文件:将设置mkdocs.yml更改 site_name为”CM0学习笔记小站” 并保存文件。

保存退出后,你刷新网页:

就看到效果了。那么剩下的就是自己编辑markdown文档了。
由于我们的文档网站将包含一些导航标题,我们就可以编辑配置文件,并通过添加设置来添加有关导航标题中每个页面的顺序、标题和嵌套的信息nav 就是表示导航栏:

然后我要在docs目录里面生成这几个markdown的文件,为了方便,我就用AI生成一堆介绍说明,放到里面去。

我们挨个修改一下内容:
vim index.md

这里就是markdown格式的内容了,直接根据需求修改一下。
我让AI帮我写了,我直接复制粘贴。


cm0 的也是一样。


其他的也一样,我就不赘述了。

另一个终端执行的时候如果发现下面报错,说明你缺少了一个kicad.md的文档。

然后去创建一个简单的就好, 在群里看到已经有人在cm0上跑起来ollama了,可以通过调用ollama api,直接生成markdown文本,然后就特喵的闭环了。

好的,目前都写好了,上传几个图片,然后放到文档里面,就齐活了,然后看看效果。

直接下载图片拖入对应的目录:

然后将图片插入到文档中,非常简单:

然后再执行看看效果:

浏览器访问一下:


再切换一下:

是不是突然感觉有点儿专业了呢?哈哈

好吧,也不能一直用mkdocs运行跑这个web服务吧。
我们再进一步。就可以让我们的nginx来对外提供服务了。
在项目目录中:
mkdocs build
就可以生成静态页。

然后把静态页直接同步到/var/www/html/目录中,就可以啦~
sudo rsync -avz --progress site/* /var/www/html/


一秒结束。

然后删掉这个默认页。

重启nginx服务,然后访问IP的80端口就可以看到页面了。
这边用了
sudo systemctl restart nginx
sudo systemctl enable nginx (开机自动加载)

检查一下端口:
netstat -natp |grep 80

把原先的mkdocs开启的8000端口关闭,直接用80对局域网开启服务,如果想开到广域网, 你需要申请域名和备案,最好还得有个固定IP才好,不然也可以用花生壳绑定域名在路由器上开个端口转发或直接丢入DMZ,这个就是另一个故事了。

这么一弄,好了,这个CM0 可以一直开机了。低功耗的特性也不怕它把家里电用完,还能随时随地写记录,备注自己的技术小代码。是不是很简单?快去采购一个CM0 dev kit玩儿起来。
另外,说起代码,如果有人想要备份代码一想到github访问的时候就有点儿心里发怵,时而能行,时而不行,gitee虽然在国内,但是也得注册不是? 如果想把CM0打造成一个Git服务器行不行呢?
答案是:那必须行。
首先:什么是git?
Git就像是一个超级厉害的“文件时光机”。它能帮你记录文件(主要是代码)的每一次变化,就像你写作业时的“撤销”和“重做”,但功能强大得多。你可以随时看看以前的版本,对比不同版本的差别,要是发现哪里改错了,还能轻松回到之前的版本。
而且,Git是“分布式”的,就好比每个开发者都有一个自己的“文件宝库”,里面不仅有最新的文件,还有完整的修改历史。大家可以在自己的电脑上独立地做各种操作,比如修改代码、创建新的分支,最后再把成果跟团队合并。这比那种只有一个中心仓库的“集中式”系统要灵活、强大、安全得多。
用更通俗的话来说,Git的核心用途和解决的问题可以总结为以下几点:
1.备份与历史
Git就像一个“时间胶囊”,把项目的每一个版本都保存得清清楚楚,永远不会丢。不管你改了多少次,以前的版本都能找回来。
2. 协作开发
当很多人一起开发一个项目时,Git能保证大家互不干扰。每个人都可以在自己的电脑上修改代码,最后还能把修改的部分高效地合并在一起,不用担心互相覆盖。
3. 版本追踪
Git会把每次修改的细节都记录下来,比如是谁改的、改了什么、为什么改。这样,团队成员可以清楚地了解项目的进展,有问题也能快速找到原因。
4. 分支管理
Git允许你创建独立的“小世界”(分支),比如开发新功能或者修复Bug。开发完后,可以轻松地把新功能或修复合并回主项目,不影响其他部分。
5. 还原与回溯
如果新代码出了问题,Git可以快速帮你回到之前的稳定版本,不用担心项目崩溃或者数据丢失。
简单来说,Git就像是一个超级好用的“代码管理助手”,帮你备份、协作、追踪、开发新功能和修复问题,让开发过程更顺畅、更安全。
操作步骤:
1. 更新系统并安装git
sudo apt update
sudo apt upgrade -y
sudo apt -y install git

2. 创建一个专门用来管理git的用户
sudo adduser git
sudo su - git

3. 创建Git仓库并初始化
mkdir -pv codebase
cd codebase/
git init --bare democodes.git

这时候,CM0上的democodes.git就是一个项目仓库了,我们就可以去别的电脑上来操作这个仓库了。
例如,我现在在windows上,已经安装了git软件,我通过打开gitbash


我需要配置一下用户名和邮箱,然后克隆那个CM0上的远程仓库。
git config --global user.name “codemonkey”
git config --global user.email “codemonkey@codemonkey.com”
git clone git@192.168.3.64:codebase/democodes.git

它默认是空的我们创建分支然后提交看看效果。
git checkout --orphan feature1

可能有人会问git checkout --orphan feature1中的 --orphan 参数是不是必须加呢?
它不是必须的,但它有特定的用途。
1. --orphan 的作用
--orphan 参数用于创建一个全新的分支,这个分支没有任何父分支(即它是一个“孤儿分支”)。它的主要用途是:
创建一个全新的分支,不继承任何历史记录:当你需要从头开始开发一个全新的功能或重构项目,但又不想保留当前分支的历史记录时,--orphan 是非常有用的。
2. 不加 --orphan 的情况
如果你不加 --orphan,git checkout feature1的行为会根据当前仓库的状态有所不同:
如果 feature1已经存在:Git 会切换到这个已存在的分支。
如果 feature1不存在:Git 会尝试从当前分支创建一个新分支 feature1,并且这个新分支会继承当前分支的所有历史记录。

3. 总结
如果你希望创建一个全新的分支,且不继承任何历史记录,那么 --orphan 是必须的。
如果你只是想创建一个新分支并继承当前分支的历史记录,那么不需要加 --orphan。
创建一个代码和Readme.md文档并提交到工作区,然后再提交记录

git add README.md
git commit -asm “update readme”

通过日志可以看到log信息。

好了,推送到CM0服务器上看看?
git push origin HEAD:refs/for/feature1
这里稍微提示一下:
- origin:远程仓库的名称。
- HEAD:当前分支的最新提交。
- refs/for/feature1:目标路径,告诉 Gerrit 将这个提交作为代码审查请求推送到 feature1 , refs/for/:这是 Gerrit 的特定语法,用于触发代码审查流程。如果没有 refs/for/,代码会直接推送到目标分支,而不会触发代码审查。

下面再弄个直接推送代码的:
随便创建一个代码:

git add .
git commit -asm “update test_camera.py”
git push origin feature1

这会直接将代码推送到远程仓库的 feature1,不会触发代码审查。
如果使用下面的方法,就会触发代码审查。
git push origin HEAD:refs/for/feature1

然后我们看看cm0这边发生了什么?


然后我们看看我们的git log
说明我们的代码已经传到cm0上了,从此,cm0 就是我们的github的替代产品哈哈。
我们删除原先的代码再clone一次看看效果。
git clone git@192.168.3.64:codebase/democodes.git

然后查看所有分支:
git branch -a

切换到feature1分支
git checkout feature1
git status

嗯,完美实现,你还愣着干嘛?夹菜啊~下单啊,没有CM0你怎么玩儿?
如需了解Raspberry Pi CM0的详细规格、配置选项、使用文档及技术支持,请咨询上海晶珩。
树莓派CM0及CM0 Dev Board(https://so.szlcsc.com/global.html?k=C51966415)已通过立创商城正式发售!
树莓派CM0 Dev Board 视频介绍:https://www.bilibili.com/video/BV1F3nXzEEcf/
树莓派CM0 Dev Board 官方网站:https://edatec.cn/zh/cm0
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论