WinNote
一个轻量级MD文档收集博客,不保证阅读性
使用树莓派+hexo构建,定制化next主题,github部署
2023.9.8更新
使用eci容器构建,自制镜像,cdn加速
一些编辑的Tips:
首页文章预览至:
1 | <!-- more --> |
markdown paste粘图:
1 | ctrl+art+a |
本站加速域名:https://md.winotmk.com/
正式站:winotmk.com
点击查看更多该网站更新日志
一个轻量级MD文档收集博客,不保证阅读性
使用树莓派+hexo构建,定制化next主题,github部署
2023.9.8更新
使用eci容器构建,自制镜像,cdn加速
一些编辑的Tips:
首页文章预览至:
1 | <!-- more --> |
markdown paste粘图:
1 | ctrl+art+a |
本站加速域名:https://md.winotmk.com/
正式站:winotmk.com
点击查看更多该网站更新日志
基础语法
代码结构 {{ ... }}
属于 Go 模板的标准语法:
{{-` 表示删除左侧空白(包括换行符)
- `-}}
表示删除右侧空白if
/else
/end
、range
等函数调用or
和 in
是 Hugo 的内置函数:
1 | {{ in $alt "[no-render]" }} // 检查字符串包含关系 |
上下文变量$alt
和 $title
是 Hugo 在渲染图片时注入的上下文变量:
.Destination
→ 图片 URL.PlainText
→ 图片的 alt 文本(不含 Markdown 格式).Title
→ 图片的 title 属性文件载体
代码虽然写在 .html
文件中,但实际包含三种语言层:
1 | <!-- 外层:HTML 静态标记 --> |
处理阶段
阶段 | 处理内容 | 输出结果 |
---|---|---|
模板编译 | 执行 {{ ... }} 内的逻辑 |
动态生成 HTML 片段 |
客户端渲染 | 浏览器解析最终 HTML | 用户可见的静态页面 |
模板引擎
text/template
和 html/template
hugo::tpl
包)领域特性
1 | // 典型的 Hugo 模板函数示例 |
系统 | 模板语言 | 语法特征 |
---|---|---|
Hugo | Go Template + Hugo 扩展 | {{ .Title }} ,{{ partial }} |
Jekyll | Liquid | {% if post.featured %}...{% endif %} |
Vue | 模板语法 | <div v-if="show"> ,{{ message }} |
React | JSX | {items.map(item => <li>{item}</li>)} |
通过 Hugo 的调试方法输出变量值:
1 | {{/* 输出调试信息到控制台 */}} |
在这里下载打包好的二进制文件,单文件很方便
https://github.com/gohugoio/hugo/releases
要注意的是Hugo发行版分3种,标准版,extended扩展版,和代deploy功能的extended扩展版
而Stack需要extended扩展版
下好以后配置环境变量PATH到hugo单文件所在的目录,如果可以hugo version
即说明它可以工作啦!
https://gohugo.io/getting-started/quick-start/
我是直接新建一个目录到里面打开CMD,然后
1 | hugo new site . |
就会在本地生成好网站目录
初始化git(因为需要用git子模块来拉主题的库)
1 | git init |
然后加载子模块
1 | git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack |
主题文档参见:
https://stack.jimmycai.com/guide/getting-started
https://themes.gohugo.io/themes/hugo-theme-stack/
好了,主题的安装文档居然到这里戛然而止了,令人十分费解,前期工作完成后,最后一步启用居然没说,Stack主题发的文档似乎十分希望用户使用这个库来直接开始用主题和hugo:
https://github.com/CaiJimmy/hugo-theme-stack-starter
但我偏不,我不喜欢预制用户用法的做法,我只是希望hugo作为一个生成器,部署要在阿里云OSS上做而不是github pages。
所以摸索了大半天,自己安装的话应当将:themes\hugo-theme-stack\exampleSite
目录下的hugo.yaml
文件复制到Hugo根目录并且删除原有的hugo.toml
设置文件,注意不是themes\hugo-theme-stack
里的config.yaml
如果你想看自带的示例文章可以将themes\hugo-theme-stack\exampleSite
下的content
覆盖到根目录的同名目录里
之后就可以启动hugo预览了(不加-p参数默认端口为1313)
1 | hugo server -D -p 7512 |
打开浏览器你将会看到:
恭喜你,开始为博客填内容吧~
按照 https://brew.sh 这里的提示:
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
装完brew后,敲brew居然不认得,还得我自己配一下
所以:
1 | cd /opt/homebrew/bin/ |
然后再
1 | cd ~/ |
这下就可以用brew啦,我主要是拿来
1 | bres install git |
安装git
但是神奇的是当我后面再用vim ~/ .zshrc
想看看它时却似乎打不开这个文件,难道mac的设置是一次性的生效就删
打开终端(或 Git Bash),切换到仓库根目录:
1 | cd /path/to/your-repo |
检查哪些文件被修改:
1 | git status |
添加单个文件:
1 | git add 文件名 |
或添加所有修改的文件:
1 | git add . |
再次运行 git status
,绿色显示的文件表示已添加到暂存区。
1 | git commit -m "描述你的修改内容(例如:修复登录页面样式问题)" |
-m
后跟提交信息,需简洁明确(推荐使用英文或中文)。将本地提交推送到远程仓库(默认分支通常是 main
或 master
):
1 | git push origin 分支名 |
main
分支:1 | git push origin main |
1 | git log --oneline # 查看本地提交记录 |
提交后发现漏了文件:
1 | # 继续修改文件,然后再次添加并提交 |
推送冲突(多人协作时可能发生):
1 | git pull origin 分支名 # 先拉取远程最新代码,解决冲突后再推送 |
默认情况下直接使用 git clone
不会自动克隆子模块(submodule)。子模块信息虽然记录在 .gitmodules
文件中,但其代码需要额外操作才能同步到本地。
在克隆时添加 --recurse-submodules
参数,一次性递归克隆主仓库和所有子模块:
1 | git clone --recurse-submodules 仓库URL |
如果已经用普通方式克隆了主仓库,后续可以手动拉取子模块:
1 | # 进入主仓库目录 |
查看子模块目录是否包含文件(不再是空文件夹):
1 | ls -la path/to/submodule |
检查子模块状态:
1 | git submodule status |
子模块更新失败:
1 | git submodule update --init --recursive |
切换分支后子模块内容异常:
主仓库切换分支时,子模块可能需要同步更新到对应提交:
1 | git submodule update --remote |
git config –global http.proxy http://127.0.0.1:7080
git config –global https.proxy https://127.0.0.1:7080
取消设置代理
git config –global –unset http.proxy
git config –global –unset https.proxy
可以通过
git config -l
查看设置状态
我要先吐槽一下是真麻烦,以前一年续签一次的免费证书多好,和服务器续费周期一致,一年维护一次就好了,现在搞得像交房租,每季度都要维护,听说Let’s Encrypt上可以发免费证书,然后通过类似Certbot或者httpsok来自动获取和部署,回头再研究了,似乎我用的这种老式虚拟云主机不能整这个,回头想换成容器服务,这官网价格一年500是逼着你转型网站服务器的节奏
阿里云SSL证书管理
这里点个人测试证书,然后申请域名winotmk.com
与md.winotmk.com
由于都是一个号里买的阿里云的产品,所以可以一键部署
先下载证书,点更多
这里选下载tab,下载第一个pem/key格式的证书即可,解压下来会是两个文件
winotmk.com 是我在新万网买的,所以这里登录后台
www.xinwanwang.com/login.asp
用他给的管理员账号密码在控制面板里登录
登录上以后在域名绑定这里选关闭强制http访问再打开,把刚才下载下来的证书密钥文件两个分别复制到对话框里即可完成部署
整了大半天,总算明白GithubAction是怎么用的了,给人感觉其实有那么些像docker,而需要为其写的action规则又像dockerfile或者dockercompose,它们都是去调用一些已经做好的功能/镜像,来按步骤去一步步达成一些事
参考文章:
https://thooooor.github.io/posts/%E8%84%B1%E5%9D%91%E8%AE%B0%E5%BD%95/hugo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2/
https://kingtuo123.com/posts/hugo-deploy/
https://zhuanlan.zhihu.com/p/367426039
action:
https://github.com/manyuanrong/setup-ossutil
https://github.com/peaceiris/actions-hugo
hugo和其主题:
https://gohugo.io/getting-started/quick-start/
https://github.com/adityatelange/hugo-PaperMod
当你通过 git push
触发 GitHub Actions 流程时,需要将 Hugo 博客的源代码推送到仓库。以下是具体操作步骤和本地准备:
你的本地 Hugo 博客项目需要包含以下内容:
1 | your-blog-repo/ |
1 | brew install hugo # macOS |
1 | cd your-blog-repo |
如果使用了 Hugo 主题(如通过 Git 子模块添加):
1 | # 示例:添加主题为子模块 |
确保 .gitmodules
文件已提交。
你需要将以下内容推送到 GitHub 仓库:
Hugo 源文件
config.toml
(Hugo 配置)content/
(文章)themes/
(主题,通常以子模块形式存在)archetypes/
、static/
等其他 Hugo 所需文件GitHub Actions 配置文件
确保 .github/workflows/deploy.yml
文件存在于仓库中。
不包含生成的文件
不要推送 public/
目录(Hugo 生成的静态文件会被 Actions 自动构建)。
1 | # 本地生成静态文件测试(可选) |
1 | git add . |
1 | git push -u origin main # 假设主分支是 main |
推送后,到 GitHub 仓库的 Actions 标签页查看运行状态。
若流程成功,阿里云 OSS 的存储桶中会自动出现 public/
的内容。
分支匹配
确保工作流配置中的 push
事件分支(默认所有分支)与你推送的分支一致。
(若需限制分支,可在配置中指定:on.push.branches: [main]
)
密钥安全
OSS_KEY_ID
和 OSS_KEY_SECRET
必须通过 GitHub 仓库的 Settings → Secrets 添加,不要明文写在代码中。子模块更新
如果主题子模块有更新,需在本地执行:
1 | git submodule update --remote --merge |
调试失败问题
hugo --minify
命令预验证构建是否正常。1 | 本地修改博客内容 → 提交并推送 → GitHub 触发 Actions → 自动构建 Hugo → 上传到 OSS |
通过这种方式,你只需专注于内容创作和本地代码修改,部署过程会完全自动化。
hexo的GithubAction自动部署,用了两个仓库——github.io与hexo项目仓库区分操作
https://hackergavin.com/2024/01/11/hexo-automate-deploy/#%E5%88%9B%E5%BB%BA-Github-Actions-%E8%84%9A%E6%9C%AC
另外一种hexo部署
https://cloud.tencent.com/developer/article/2369534
https://www.zhihu.com/tardis/zm/art/408177850
KODI软件,可以直接这里
https://kodi.tv/download/android/
下载到能直接安装的软件,试了极米的投影可直接装,然后要设置nas的文件目录,从而通过局域网读取视频文件,显然这是通过投影里解码的,卡得飞起,很快就出现了音话不同步的问题
群晖自己有video station,有nas内的软件,也提供客户端,还有专为tv提供的软件:
https://www.synology.cn/zh-cn/support/download/DS720+?version=7.2#androids
但是这里的tv版装会出现装完了但是会有看不到图标的问题,多半是因为极影用的安卓并不是安卓tv而是魔改的安卓,所以要使用群晖的这个客户端,要么自己重新编一下
https://blog.csdn.net/hx7013/article/details/103764083
要么下这个改过入口app的软件——DSVideo GO!,配合群晖官方的客户端即可使用!!
http://nasyun.com/thread-63924-1-1.html
泰香辣,24年10月31,入了垂涎已久的macbook air M3,之前买的m1pro的macbookpro给了女票剪视频用了,自己平常用台式还是想入个轻便的本本,然后补贴价格入的,真香真香
现在的mac下截图有Longshot(和win下的snipaste完全平替),vscode也一样的用,svn也很好使,群晖nas上的也很好使,还能iphone投屏了!很适合带到图书馆公司里,开盖就做点东西用,重要的是重量和大小,仿佛一个大号的ipad但是x86pc能做的基本都可以做~
在这里打开SMB
然后在路由器里打开端口转发,需要137-139,445
这么几个端口,我是路由拨号已有公网IP
这样的好处就是相对简单,不需要客户端再装软件windows自带即可连接,当然需要NAS有公网IP(或者再做穿透)
缺点:坏处就是,这个几个端口似乎非常不安全,在我转发这几个端口后,可以看到一直有IP尝试钻进来被NAS封,而且如果想要改这几个端口似乎不是那么容易的懒得研究啦
某天在公司忽然死活连不上后(内网还可以访问,说明SMB服务没问题,也许被运营商封端口了?),尝试另一种访问文件的方法
首先NAS上装WeaDAV,设置一下:
路由器里转发这俩端口就可以
然后pc安装RaiDrive这个软件,设置如下:
即可成功挂载一个带盘符的网络驱动器,试了下稳定性还是不错的,速度和SMB无异,用起来也没啥区别
缺点:开机得启动RaiDrive这个软件,而且似乎读不了正确的NAS容量大小(500g是我自己填的)