Teek使用文档
Typora-one 模板小白使用文档
目录
[toc]
环境
- 拥有一台winodws(或者linux都行)
- 有手
前提条件
自己电脑得提前安装好git和nodejs:
说明
以下配置是讲述了如何拉取自己Teek-one模板,且想要修改把当前网站修改为自己网站的配置信息,都是手把手教程,按着配置弄就完全OK,保准无坑。😍
1、部署博客
这里可以快速拉取下项目,体验下宇宙最美博客的纵享丝滑。😊
#来到自己电脑d盘
cd /d/
#项目拉取
git clone https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public.git
cd /d/vitepress-theme-teek-one-public
#依赖安装(只能用 pnpm 安装依赖)
pnpm install
#项目本地运行
pnpm docs:dev #本地运行
#项目打包
pnpm docs:build
执行pnpm docs:dev
后,浏览器默认就会打开一个http://localhost:5173/
网页:(恭喜你,此时你的Teek博客已经部署完成了)
NOTE
以上方式的确快速帮你拉起了一个Teek网站,但是里的数据都是作者One的信息,此时你需要修改为自己的信息,请看下文。
2、必知必会
这里为了更丝滑操作Teek博客,我们得大概了解下Teek的目录结构,及一些使用规则。
1.目录结构
以下是Teek的各目录结构。
Teek目录结构官方文档:《结构化目录》
2.命名规则
我们在维护Teek仓库之前,必须得弄清楚Teek里目录及文件的命名规则,以方便后续维护Teek网站。
原文链接:结构化目录 | vitepress-theme-teek
如果你搭建的是博客风的站点,那么 Teek 建议和 vdoing 一样,使用以下命名约定:
- 无论是文件还是文件夹,请为其名称添加上正确的正整数序号和
.
,从00
或01
开始累计,如01.文件夹
、02.文件.md
,我们将会按照序号的顺序来决定其在侧边栏当中的顺序 - 同一级别目录别内即使只有一个文件或文件夹也要为其加上序号
序号只是用于决定先后顺序,并不一定需要连着,如 01、02、03...
,实际可能会在两个文章中间插入一篇新的文章,因此为了方便可以采用间隔序号 10、20、30...
,后面如果需要在 10
和 20
中间插入一篇新文章,可以给定序号 15
。
当然可以使用非序号的命名,这并不影响使用,添加序号只是为了排序,且更具有结构化,如果同一个目录下同时存在带序号和不带序号的文件,在生成侧边栏时,Teek 会分为两个区:带序号区和不带序号区,两个区内部按照各自的逻辑排序,在最终生成侧边栏的时候,不带序号区始终放在带序号区的后面。
从维护性、可读性的角度分析,带有序号的文件名在本地目录看起来更加直观;从站点渲染的角度分析,在生成侧边栏时,Teek 会根据文件名的序号进行排序。
说明
没有为什么,照着弄就行;(这里都是最佳实践,刚开始可能感觉有点怪,但是用着用着就会觉得极其丝滑)
3.模式选择
当前Teek-one
默认的模式已强制修改为rewrite
,别问为什么,贫道自有道理,肯定是最佳实践啦。
那么,为什么要切换到rewrite呢?
- 左下角会有中文路径提示
- url打开会有中文提示
这2个问题导致proxy模式的vitepress主题体验就是一坨粑粑(所以不得不切到rewrite模式)。🤣
Teek里文件路径使用原则
- Teek里的每个页面url链接只能是
https://域名/一级前缀/随机uid
(例如我网站《Teek博客》文章的唯一链接就是https://onedayxyy.cn/teek/teek-blog
,此时 一级前缀 就是teek
,随机uid 就是teek-blog
) - 必须保证 一级目录下的 所有md都得有同一个一级前缀,例如
/一级前缀/随机uid
- 一级前缀决定了是否都在同一个侧边栏显示。你一级目录下,都是其子目录,默认都弄成同一个一级前缀就好了。如果不想让他出现在侧边栏,那就单独指定一个一级目录。
- 所以,一级前缀 就统一整成 /技术/xxx /专题/xxx /生活/xxx /兴趣/xxx /关于/xxx (这里的中文可以替换为对应的英文)
以上只是简单指明一个规则,具体如何配置请看下文的4、迁移数据
这一块。
3、配置博客
配置一些个人信息。
模板拉起的博客默认是 菜鸡 One的一些个人信息,此时,你需要修改为自己的个人信息,需要修改的个人信息详情如下章节。
其它服务见我网站单独md。
1.侧边栏 个人头像、呢称、背景图、座右铭、首页3个banner图片
(1)侧边栏 个人头像、呢称、背景图、座右铭
编辑docs\.vitepress\config.ts
文件:
blogger: {
// 博主信息,显示在首页侧边栏
avatar: "/img/xyy.webp", //侧边栏个人头像
shape: "circle-rotate", // 头像风格:square 为方形头像,circle 为圆形头像,circle-rotate 可支持鼠标悬停旋转
name: "One", // 侧边栏个人昵称
slogan: "明心静性,爱自己", // 侧边栏个人座右铭
circleBgImg: "https://img.onedayxyy.cn/images/TeekBg/14.webp", // 侧边栏个人头像圆形背景图
circleBgMask: false, // 头像圆形背景图是否显示遮罩层
color: "#fff",
},
效果:
(2)首页3个banner图片
编辑docs\index.md
文件:
features: # 可选的
- title: 初见
details: 茫茫人海,我们相遇
link: / # 可选
# imgUrl: /img/web.png # 可选
image: /img/xyy-1.webp # 可选
- title: 幸福
details: 与你一起,真的幸福
link: /
# imgUrl: /img/ui.png
image: /img/xyy-2.webp
- title: 后来
details: 再见竟是,再也不见
link: /
# imgUrl: /img/other.png
image: /img/xyy-3.webp
效果:
2.左上角网站名称、标签页名称、首页网站名称、网站logo
(1)左上角网站名称
编辑docs\.vitepress\config.ts
文件:
title: "One", //左上角网站名称
效果:
(2)标签页名称
编辑docs\index.md
文件:
title: One
titleTemplate: 明心静性,爱自己
效果:
(3)首页网站名称
编辑docs\.vitepress\theme\config\teekConfig.ts
文件:
效果:
(4)网站logo
编辑docs\.vitepress\config.ts
文件:
logo: "/favicon.ico", //网站logo
效果:
3.联系方式、友链、footer
(1)联系方式
编辑docs\.vitepress\ConfigHyde\SocialDate.ts
文件:
// 卡片栏社交信息
import { Social } from "vitepress-theme-teek/config";
export const SocialDate: Social[] = [
{
icon: "mdi:github",
name: "GitHub",
link: "https://cnb.cool/onedayxyy",
},
{
icon: "simple-icons:gitee",
name: "Gitee",
link: "https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public",
},
{
icon: "icon-qq",
iconType: "iconfont",
name: "QQ",
// link: "http://wpa.qq.com/msgrd?v=3&uin=2675263825&site=qq&menu=yes",
link: "https://img.onedayxyy.cn/images/Teekwebsite/teek-hg-qq.jpg",
},
{
icon: "icon-mobile",
iconType: "iconfont",
name: "微信",
// link: "https://onedayxyy.cn/?contact=true",
link: "https://img.onedayxyy.cn/images/image-20230107215114763-1694437284994-1-1697348761221-1-1697407921190-1-1697636582091-3-1698965093137-1.png",
},
];
效果:
(2)友链
编辑docs\.vitepress\ConfigHyde\FriendLink.ts
文件:
// FriendLink用于在首页展示一些友链
export const FriendLink = {
enabled: true, // 是否启用友情链接卡片
limit: 5, // 一页显示的数量
// autoScroll: true, // 是否自动滚动
// scrollSpeed: 2500, // 滚动间隔时间,单位:毫秒。autoScroll 为 true 时生效
autoPage: true, // 是否自动翻页
pageSpeed: 4000, // 翻页间隔时间,单位:毫秒。autoPage 为 true 时生效
titleClick: (router) => router.go("/websites"), // 查看更多友链
// 友情链接数据列表
list: [
{
avatar: "/teek-logo-large.png",
name: "vitepress-theme-teek",
desc: "Teek官网",
link: "https://vp.teek.top/",
},
{
name: "Teeker",
desc: "朝圣的使徒,正在走向编程的至高殿堂!",
link: "http://notes.teek.top/",
avatar: "https://testingcf.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
},
{
avatar: "https://img.onedayxyy.cn/images/Teekwebsite/hyde.webp",
name: "Hyde Blog",
desc: "人心中的成见是一座大山",
link: "https://teek.seasir.top/",
},
{
avatar: "https://wiki.eryajf.net/img/logo.png",
name: "二丫讲梵",
desc: "💻学习📝记录🔗分享",
link: "https://wiki.eryajf.net/",
},
{
avatar: "https://img.onedayxyy.cn/images/Teekwebsite/sugarat.top-logo.jpeg",
name: "粥里有勺糖",
desc: "你的指尖,拥有改变世界的力量",
link: "https://sugarat.top/",
},
{
avatar: "https://img.onedayxyy.cn/images/POETIZE-logo.jpg",
name: "POETIZE",
desc: "最美博客",
link: "https://poetize.cn/",
},
{
avatar: "https://img.onedayxyy.cn/images/image-20250220073534772.png",
name: "宇阳",
desc: "记录所学知识,缩短和大神的差距!",
link: "https://liuyuyang.net",
},
{
avatar: "https://img.onedayxyy.cn/images/Teekwebsite/blog.grtsinry43.com.jpeg",
name: "Grtsinry43’s Blog",
desc: "总之岁月漫长,然而值得等待 ",
link: "https://blog.grtsinry43.com/",
},
{
avatar: "https://img.onedayxyy.cn/images/Teekwebsite/blog.zhheo.com.png",
name: "张洪Heo",
desc: "分享设计与科技生活",
link: "https://blog.zhheo.com/",
},
{
name: "王嘉祥",
desc: "唱响科普和人生兴事,分享科技与美好生活(rust写的zola主题,移植于张洪heo)",
link: "https://blog.jiaxiang.wang/",
avatar: "https://img.onedayxyy.cn/images/Teekwebsite/blog.jiaxiang.wang.webp",
},
],
// autoScroll: true,
};
效果:
(3)footer
编辑
D:\vitepress-theme-teek-one-private\docs\.vitepress\ConfigHyde\FooterInfo.ts
文件:
// 底部信息配置
import { version } from "vitepress-theme-teek/es/version"; // 导入版本号
export const FooterInfo = {
topMessage: [
`<span><img alt="VitePress" src="https://liuyuyang.net/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fanimals.65eaf6e3.webp&w=750&q=75"><span/>`,
`<a target="_blank" href="https://vitepress.dev/" title="本站框架基于 VitePress_v1.6.3" ><img alt="VitePress" src="https://img.shields.io/badge/Frame-VitePress-4868C2?logo=vitepress&logoColor=fff" ></a>
<a target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" title="本站内容采用 CC BY-NC-SA 4.0 国际许可协议进行许可"><img alt="Copyright" src="https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?logo=coursera&logoColor=fff"></a>
<a target="_blank" href="https://twikoo.js.org/" title="本站评论系统使用 Twikoo" ><img alt="Twikoo" src="https://img.shields.io/badge/Comments-Twikoo-0072F9"></a>
<a target="_blank" href="https://www.algolia.com/" title="本站搜索服务使用 Algolia"><img alt="Algolia" src="https://img.shields.io/badge/Search-Algolia-3095FA?logo=Algolia"></a>
<a target="_blank" href="https://www.ucloud.cn/" title="本站部署服务使用 ucloud"><img alt="ucloud" src="https://img.shields.io/badge/Ucloud-Server?logo=alibabacloud&label=Server&color=%23FF6A00"></a>
<a target="_blank" href="https://edgeone.ai/zh" title="本站部署服务使用 EdgeOne"><img alt="EdgeOne" src="https://img.shields.io/badge/EdgeOne-CDN?logo=alibabacloud&label=CDN&color=%23FF6A00"></a>
<a target="_blank" href="https://51.la/" title="本站统计服务使用 51.LA"><img alt="51.LA" src="https://img.shields.io/badge/51.LA-000000?logo=51.LA&label=Count&color=%23FF6A00"></a>
<a target="_blank" href="https://nginx.org/" title="本站Nginx反向代理服务 Nginx"><img alt="Nginx" src="https://img.shields.io/badge/Nginx-Proxy?logo=Nginx&label=Proxy"></a>`,
],
theme: {
name: `Theme By Teek@${version}-2025.8.24`,
},
bottomMessage: [
`<script id="LA-DATA-WIDGET" crossorigin="anonymous" charset="UTF-8" src="https://v6-widget.51.la/v6/3LmZHLhDZIDpMaT0/quote.js?theme=#1690FF,#333333,#999999,#007BFF,#FFFFFF,#1690FF,12&f=12&display=0,0,1,1,1,1,1,1"></script>`,
// `<span id="runtime"></span>(●'◡'●)`,
"初闻不知曲中意,再听已是曲中人",
],
copyright: {
createYear: 2021,
suffix: "One Blog",
},
icpRecord: {
name: "陇ICP备2023002645号",
link: "http://beian.miit.gov.cn/",
},
// 网络安全备案信息配置
securityRecord: {
name: "甘公网安备62102702000211号",
link: "https://beian.mps.gov.cn/",
},
customHtml: ``, // 搭配 ./theme/composables/useRuntime.ts
};
效果:
4.壁纸配置
(1)首页壁纸配置
编辑docs\.vitepress\ConfigHyde\Wallaper.ts
文件:
// 首页壁纸
export const Wallpaper = [
"https://img.onedayxyy.cn/images/TeekBg/1.webp",
"https://img.onedayxyy.cn/images/TeekBg/2.webp",
"https://img.onedayxyy.cn/images/TeekBg/3.webp",
"https://img.onedayxyy.cn/images/TeekBg/4.webp",
"https://img.onedayxyy.cn/images/TeekBg/5.webp",
"https://img.onedayxyy.cn/images/TeekBg/6.webp",
"https://img.onedayxyy.cn/images/TeekBg/7.webp",
"https://img.onedayxyy.cn/images/TeekBg/8.webp",
"https://img.onedayxyy.cn/images/TeekBg/9.webp",
"https://img.onedayxyy.cn/images/TeekBg/10.webp",
"https://img.onedayxyy.cn/images/TeekBg/11.webp",
"https://img.onedayxyy.cn/images/TeekBg/12.webp",
"https://img.onedayxyy.cn/images/TeekBg/13.webp",
"https://img.onedayxyy.cn/images/TeekBg/14.webp",
"https://img.onedayxyy.cn/images/TeekBg/15.webp",
"https://img.onedayxyy.cn/images/TeekBg/16.webp",
"https://img.onedayxyy.cn/images/TeekBg/17.webp",
"https://img.onedayxyy.cn/images/TeekBg/18.webp",
"https://img.onedayxyy.cn/images/TeekBg/19.webp",
];
效果:
把这里的图片替换为你自己图片地址,可以使用图床地址,或者把图片放本地路径:
例如:
/img/bg/1.webp
这里相对目录指的是docs\public
目录下。
(2)文章封面配置
编辑docs\.vitepress\ConfigHyde\Cover.ts
文件:
// 首页壁纸
export const Cover = [
"https://img.onedayxyy.cn/images/TeekCover/1.webp",
"https://img.onedayxyy.cn/images/TeekCover/2.webp",
"https://img.onedayxyy.cn/images/TeekCover/3.webp",
"https://img.onedayxyy.cn/images/TeekCover/4.webp",
"https://img.onedayxyy.cn/images/TeekCover/5.webp",
"https://img.onedayxyy.cn/images/TeekCover/6.webp",
"https://img.onedayxyy.cn/images/TeekCover/7.webp",
"https://img.onedayxyy.cn/images/TeekCover/8.webp",
"https://img.onedayxyy.cn/images/TeekCover/9.webp",
"https://img.onedayxyy.cn/images/TeekCover/10.webp",
"https://img.onedayxyy.cn/images/TeekCover/11.webp",
"https://img.onedayxyy.cn/images/TeekCover/12.webp",
"https://img.onedayxyy.cn/images/TeekCover/13.webp",
"https://img.onedayxyy.cn/images/TeekCover/14.webp",
"https://img.onedayxyy.cn/images/TeekCover/15.webp",
"https://img.onedayxyy.cn/images/TeekCover/16.webp",
"https://img.onedayxyy.cn/images/TeekCover/17.webp",
"https://img.onedayxyy.cn/images/TeekCover/18.webp",
"https://img.onedayxyy.cn/images/TeekCover/19.webp",
];
效果:
把这里的图片替换为你自己图片地址,可以使用图床地址,或者把图片放本地路径:
例如:
/img/bg/1.webp
这里相对目录指的是docs\public
目录下。
5.文档风 or 博客风
默认我的Teek-one模板是博客风,如果你想切换到默认文档风格,请按如下配置。
注意:得编辑2处地方。
(1)编辑docs\.vitepress\theme\components\TeekLayoutProvider.vue
文件:
注释博客风格,去掉docs风格注释
import { teekDocConfig } from "../config/teekConfig";
// import { teekBlogCardConfig } from "../config/teekConfig";
// 默认文档风
const currentStyle = ref("doc");
const teekConfig = ref(teekDocConfig);
// 博客 卡片风
// currentStyle = ref("blog-card");
// teekConfig = ref(teekBlogCardConfig);
(2)编辑docs\.vitepress\theme\components\ConfigSwitch.vue
文件:
注释博客风格,去掉docs风格注释
// 默认文档风格
const themeStyle = defineModel({ default: "doc" });
const currentStyle = useStorage("tk:configStyle", "doc");
// 默认blog-card风格
// const themeStyle = defineModel({ default: "blog-card" });
// const currentStyle = useStorage("tk:configStyle", "blog-card");
结束。
6.导航栏
如果你想自定义自己的导航看,请看如下配置:
编辑docs\.vitepress\ConfigHyde\Nav.ts
文件:
// nav导航栏配置
import { TeekIcon, VdoingIcon, SSLIcon, BlogIcon } from "./icon/NavIcon";
export const Nav = [
{ text: "🏡首页", link: "/" },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/teek.svg" alt="" style="width: 16px; height: 16px;">
<span>Teek</span>
</div>
`,
link: '/teek/teek-one',
},
// 笔记
{
text: '📚知识库',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/linux.svg" alt="" style="width: 16px; height: 16px;">
<span>运维</span>
</div>
`,
link: '/linux/linux-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/前端.svg" alt="" style="width: 16px; height: 16px;">
<span>前端</span>
</div>
`,
link: '/qianduan/qianduan-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/编程.svg" alt="" style="width: 16px; height: 16px;">
<span>编程</span>
</div>
`,
link: '/code/code-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/黑客.svg" alt="" style="width: 16px; height: 16px;">
<span>黑客</span>
</div>
`,
link: '/hacker/hacker-index',
},
],
},
// 专题
{
text: '🛠️专题',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/博客.svg" alt="" style="width: 16px; height: 16px;">
<span>博客搭建</span>
</div>
`,
link: '/zhuanti/blog',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/前端demo.svg" alt="" style="width: 16px; height: 16px;">
<span>前端demo</span>
</div>
`,
link: '/zhuanti/qianduan-demo',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/Git.svg" alt="" style="width: 16px; height: 16px;">
<span>Git</span>
</div>
`,
link: '/zhuanti/git',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/面试.svg" alt="" style="width: 16px; height: 16px;">
<span>面试</span>
</div>
`,
link: '/zhuanti/mianshi',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/NAS.svg" alt="" style="width: 16px; height: 16px;">
<span>NAS</span>
</div>
`,
link: '/zhuanti/NAS',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/脚本.svg" alt="" style="width: 16px; height: 16px;">
<span>脚本</span>
</div>
`,
link: '/zhuanti/jiaoben',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/工具.svg" alt="" style="width: 16px; height: 16px;">
<span>工具</span>
</div>
`,
link: '/tools/tools',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/开源项目.svg" alt="" style="width: 16px; height: 16px;">
<span>开源项目</span>
</div>
`,
link: '/zhuanti/opensource',
},
],
},
// 生活
{
text: '🏓生活',
items: [
{
// 分组标题1
text: '娱乐',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/相册.svg" alt="" style="width: 16px; height: 16px;">
<span>相册</span>
</div>
`,
link: '/yule/photo',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/电影.svg" alt="" style="width: 16px; height: 16px;">
<span>电影</span>
</div>
`,
link: '/yule/movie',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/音乐.svg" alt="" style="width: 16px; height: 16px;">
<span>音乐</span>
</div>
`,
link: '/yule/music',
},
],
},
{
// 分组标题2
text: '小屋',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/精神小屋.svg" alt="" style="width: 16px; height: 16px;">
<span>精神小屋</span>
</div>
`,
link: '/love/inner',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/时间管理.svg" alt="" style="width: 16px; height: 16px;">
<span>时间管理</span>
</div>
`,
link: '/love/time-plan',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/文案.svg" alt="" style="width: 16px; height: 16px;">
<span>情感文案</span>
</div>
`,
link: '/love/wenan',
},
// { text: "💖情侣空间", link: "https://fxj.onedayxyy.cn/" },
],
},
],
},
// 兴趣
{
text: '🎨兴趣',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/旅行.svg" alt="" style="width: 16px; height: 16px;">
<span>旅行</span>
</div>
`,
link: '/xingqu/travel',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/读书.svg" alt="" style="width: 16px; height: 16px;">
<span>读书</span>
</div>
`,
link: '/xingqu/reading',
},
],
},
// 索引
{
text: '👏索引',
items: [
{ text: '📃分类页', link: '/categories' },
{ text: '🔖标签页', link: '/tags' },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/归档.svg" alt="" style="width: 16px; height: 16px;">
<span>归档页</span>
</div>
`,
link: '/archives',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/清单.svg" alt="" style="width: 16px; height: 16px;">
<span>清单页</span>
</div>
`,
link: '/articleOverview',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/登录.svg" alt="" style="width: 16px; height: 16px;">
<span>登录页</span>
</div>
`,
link: '/login',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/风险提示.svg" alt="" style="width: 16px; height: 16px;">
<span>风险链接提示页</span>
</div>
`,
link: '/risk-link?target=https://onedayxyy.cn/',
},
],
},
// 关于
{
text: '🍷关于',
items: [
{ text: '👋关于我', link: '/about/me' },
{ text: '🎉关于本站', link: '/about/website' },
{ text: '🌐网站导航', link: '/about/websites' },
{ text: "👂留言区", link: "/about/liuyanqu" },
{ text: "💡思考", link: "/about/thinking" },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/时间轴.svg" alt="" style="width: 16px; height: 16px;">
<span>时间轴</span>
</div>
`,
link: 'https://one.onedayxyy.cn/',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/网站统计.svg" alt="" style="width: 16px; height: 16px;">
<span>网站统计</span>
</div>
`,
link: 'https://umami.onedayxyy.cn/share/DzS4g85V8JkxsNRk/onedayxyy.cn',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/站点监控.svg" alt="" style="width: 16px; height: 16px;">
<span>站点监控</span>
</div>
`,
link: 'https://status.onedayxyy.cn/status/monitor',
},
],
},
]
效果:
注意:
此时我的docs下目录数据结构如下
另外,需要注意的是:
docs
下的每一个目录成为一级目录,每个一级目录下必须得有个md,后续nav
里的对应链接就可以填这个Md的url: 示例如下:
7.修改右上角gitee地址
编辑docs\.vitepress\ConfigHyde\SocialLinks.ts
文件:
import { gitee, email, WhatsApp, telegram } from "../theme/icon/icons";
export const SocialLinks = [
{
icon: { svg: gitee },
link: "https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public",
},
// {
// icon: { svg: email },
// link: "mailto:2675263825@qq.com",
// },
// {
// icon: { svg: WhatsApp },
// link: "https://api.whatsapp.com/send/?phone=13527063419&text=Hello",
// },
// {
// icon: { svg: telegram },
// link: "https://t.me/seasir_Bot",
// },
// {
// icon: "github",
// link: "https://github.com/Kele-Bingtang/vitepress-theme-teek/tree/dev",
// },
];
效果:
8.公告信息
修改公告信息:
编辑docs\.vitepress\theme\components\NoticeCard.vue
文件:
// 公告内容
const noticeContent: NoticeContent = {
title: '📢 重要公告',
subtitle: '全网最美博客Teek🎉',
content: 'Teek~一款简约、唯美、丝滑且强大的VitePress主题博客(知识库&博客二合一) ,正在持续迭代更新,欢迎交流学习!',
operationButtonName: '查看详情',
operationButtonPath: 'https://vp.teek.top/',
};
效果:
9.修改关于我、关于本站
编辑这2个文件就好:
更多……(待更新)
4、维护数据
1.迁移数据
(特别注意🛑)
(1)删除模板中存在的老数据
此时,就可以把模板docs目录
下的10.Teek和20.文档
目录 给删除了,然后把你之前的个人笔记数据给放到Teek的docs目录下,然后按上面提到的方式命名。
(2)创建自己的新数据
例如,我们会创建如下目录结构:(每个目录下有多个子目录或者md)
具体目录结构截图示例:
特别注意:
在把你之前的数据迁移到teek时,这里需要格外注意一个问题。
teek目前使用rewrite模式的autoformatter插件来给md强制注入永久permalink,每个md的permalink格式为/一级前缀/随机uid
。
因此,当你想要使用teek的rewrite模式后,这里需要我们提前配置一点东西,后续就可以丝滑使用了:
(3)指定一级前缀
规则
编辑docs\.vitepress\config.ts
文件:
{ folderName: "10.运维", prefix: "/linux/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "20.前端", prefix: "/qianduan/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "30.编程", prefix: "/code/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "35.黑客", prefix: "/hacker/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "40.专题", prefix: "/zhuanti/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "50.工具", prefix: "/tools/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "60.生活", prefix: "/life/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "70.精神小屋", prefix: "/love/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "80.娱乐", prefix: "/yule/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "85.兴趣", prefix: "/xingqu/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "90.关于", prefix: "/about/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
{ folderName: "100.Teek", prefix: "/teek/$uuid5", removeLevel: 99}, // 清空前缀并且添加前缀使用随机数
即:有多少个一级目录,那么配置文件那里就必须配置多少行,这样每个一级目录下的内容就会出现在同一个侧边栏了。
配置完成后,不管你之前的md是否有permalink,teek的autoformatter插件都会强制注入永久permalink。(先可以用其他少量文档做下测试,没问题后,再迁移自己的个人数据。我这里都是测试没问题的,大家可以放心食用。🤣)
(4)配置导航栏项
你需要做的就是,在docs\.vitepress\ConfigHyde\Nav.ts
文件里配置对应的url即可:
这里为了方便管理,每个一级目录下最好存放一个md,其序号可以命名为01. 让其为最优先的一个文件。(导航栏对应的菜单就可以配置对应一级目录下这个文件的permalink就行了。)
详细信息
// nav导航栏配置
import { TeekIcon, VdoingIcon, SSLIcon, BlogIcon } from "./icon/NavIcon";
export const Nav = [
{ text: "🏡首页", link: "/" },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/teek.svg" alt="" style="width: 16px; height: 16px;">
<span>Teek</span>
</div>
`,
link: '/teek/teek-one',
},
// 笔记
{
text: '📚知识库',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/linux.svg" alt="" style="width: 16px; height: 16px;">
<span>运维</span>
</div>
`,
link: '/linux/linux-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/前端.svg" alt="" style="width: 16px; height: 16px;">
<span>前端</span>
</div>
`,
link: '/qianduan/qianduan-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/编程.svg" alt="" style="width: 16px; height: 16px;">
<span>编程</span>
</div>
`,
link: '/code/code-index',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/黑客.svg" alt="" style="width: 16px; height: 16px;">
<span>黑客</span>
</div>
`,
link: '/hacker/hacker-index',
},
],
},
// 专题
{
text: '🛠️专题',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/博客.svg" alt="" style="width: 16px; height: 16px;">
<span>博客搭建</span>
</div>
`,
link: '/zhuanti/blog',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/前端demo.svg" alt="" style="width: 16px; height: 16px;">
<span>前端demo</span>
</div>
`,
link: '/zhuanti/qianduan-demo',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/Git.svg" alt="" style="width: 16px; height: 16px;">
<span>Git</span>
</div>
`,
link: '/zhuanti/git',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/面试.svg" alt="" style="width: 16px; height: 16px;">
<span>面试</span>
</div>
`,
link: '/zhuanti/mianshi',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/NAS.svg" alt="" style="width: 16px; height: 16px;">
<span>NAS</span>
</div>
`,
link: '/zhuanti/NAS',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/脚本.svg" alt="" style="width: 16px; height: 16px;">
<span>脚本</span>
</div>
`,
link: '/zhuanti/jiaoben',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/工具.svg" alt="" style="width: 16px; height: 16px;">
<span>工具</span>
</div>
`,
link: '/tools/tools',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/开源项目.svg" alt="" style="width: 16px; height: 16px;">
<span>开源项目</span>
</div>
`,
link: '/zhuanti/opensource',
},
],
},
// 生活
{
text: '🏓生活',
items: [
{
// 分组标题1
text: '娱乐',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/相册.svg" alt="" style="width: 16px; height: 16px;">
<span>相册</span>
</div>
`,
link: '/yule/photo',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/电影.svg" alt="" style="width: 16px; height: 16px;">
<span>电影</span>
</div>
`,
link: '/yule/movie',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/音乐.svg" alt="" style="width: 16px; height: 16px;">
<span>音乐</span>
</div>
`,
link: '/yule/music',
},
],
},
{
// 分组标题2
text: '小屋',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/精神小屋.svg" alt="" style="width: 16px; height: 16px;">
<span>精神小屋</span>
</div>
`,
link: '/love/inner',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/时间管理.svg" alt="" style="width: 16px; height: 16px;">
<span>时间管理</span>
</div>
`,
link: '/love/time-plan',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/文案.svg" alt="" style="width: 16px; height: 16px;">
<span>情感文案</span>
</div>
`,
link: '/love/wenan',
},
// { text: "💖情侣空间", link: "https://fxj.onedayxyy.cn/" },
],
},
],
},
// 兴趣
{
text: '🎨兴趣',
items: [
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/旅行.svg" alt="" style="width: 16px; height: 16px;">
<span>旅行</span>
</div>
`,
link: '/xingqu/travel',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/读书.svg" alt="" style="width: 16px; height: 16px;">
<span>读书</span>
</div>
`,
link: '/xingqu/reading',
},
],
},
// 索引
{
text: '👏索引',
items: [
{ text: '📃分类页', link: '/categories' },
{ text: '🔖标签页', link: '/tags' },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/归档.svg" alt="" style="width: 16px; height: 16px;">
<span>归档页</span>
</div>
`,
link: '/archives',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/清单.svg" alt="" style="width: 16px; height: 16px;">
<span>清单页</span>
</div>
`,
link: '/articleOverview',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/登录.svg" alt="" style="width: 16px; height: 16px;">
<span>登录页</span>
</div>
`,
link: '/login',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/风险提示.svg" alt="" style="width: 16px; height: 16px;">
<span>风险链接提示页</span>
</div>
`,
link: '/risk-link?target=https://onedayxyy.cn/',
},
],
},
// 关于
{
text: '🍷关于',
items: [
{ text: '👋关于我', link: '/about/me' },
{ text: '🎉关于本站', link: '/about/website' },
{ text: '💖友链', link: '/about/friend-links' },
{ text: '🌐网站导航', link: '/about/websites' },
{ text: "👂留言区", link: "/about/liuyanqu" },
{ text: "💡思考", link: "/about/thinking" },
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/时间轴.svg" alt="" style="width: 16px; height: 16px;">
<span>时间轴</span>
</div>
`,
link: 'https://one.onedayxyy.cn/',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/网站统计.svg" alt="" style="width: 16px; height: 16px;">
<span>网站统计</span>
</div>
`,
link: 'https://umami.onedayxyy.cn/share/DzS4g85V8JkxsNRk/onedayxyy.cn',
},
{
text: `
<div style="display: flex; align-items: center; gap: 4px;">
<img src="/img/nav/站点监控.svg" alt="" style="width: 16px; height: 16px;">
<span>站点监控</span>
</div>
`,
link: 'https://status.onedayxyy.cn/status/monitor',
},
],
},
]
⚡ 一级目录 和 一级前缀的 对应关系:
2.维护数据
5、部署博客
方式1:CNB+Eo Pages(推荐)
这里推荐使用CNB+Eo Pages,非常丝滑。
《CNB配合eo托管静态博客》(腾讯的eo Pages也的确丝滑)
具体步骤:
备注:
CNB是腾讯推出的云原生构建产品,EO是腾讯推出的免费cdn;
方式2:传统的云服务器部署
传统的云服务器部署,然后利用nginx代理。
(1)自己电脑得提前安装好git和nodejs:
(2)在自己winodws pc上部署Teek
#来到自己电脑d盘
cd /d/
#项目拉取
git clone https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public.git
cd /d/vitepress-theme-teek-one-public
#依赖安装(只能用 pnpm 安装依赖)
pnpm install
#项目本地运行
pnpm docs:dev #本地运行
#项目打包
pnpm docs:build
执行pnpm docs:dev
后,浏览器默认就会打开一个http://localhost:5173/
网页:(恭喜你,此时你的Teek博客已经部署完成了)
(3)将Teek生成的静态文件推送到云服务器的nginx站点目录下
利用pnpm docs:build
命令打包好静态文件,然后把docs\.vitepress\dist
路径下的内容直接传输到自己的云服务器的nginx站点目录下,这样其它小伙伴就可以通过域名来访问你的博客了。
特别注意:
一般情况,自己的云服务器都是通过nginx来代理静态站点的,但是这里需要单独做一个额外的配置,否则自己的Teek博客部署到云服务器后,刷新url会报404。
具体配置方法如下:
vim /etc/nginx/conf.d/onedayxyy.cn.conf
(这里编辑自己的nginx配置文件就好)
location / {
index index.html index.htm;
try_files $uri $uri.html $uri/ =404; #添加这一行
……
}
配置后重启nginx: nginx -s reload
nginx完整配置如下:
[root@wiki ~]# cat /etc/nginx/conf.d/onedayxyy.cn.conf
server {
listen 80;
server_name onedayxyy.cn;
#配置https重定向
return 301 https://$host$request_uri;
}
server {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
listen 443 ssl;
server_name onedayxyy.cn;
root /root/rsync/rsync-vitepress/dist;
location / {
index index.html index.htm;
try_files $uri $uri.html $uri/ =404;
# non existent pages
error_page 404 /404.html;
# a folder without index.html raises 403 in this setup
error_page 403 /404.html;
# adjust caching headers
# files in the assets folder have hashes filenames
location ~* ^/assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
location /images {
alias /images;
index index.html;
valid_referers none blocked *.onedayxyy.cn onedayxyy.cn *.gitee.com gitee.com *.cnb.cool cnb.cool *.sleele.com localhost 127.0.0.1;
if ( $invalid_referer ) {
# 如不满足,指定访问如下资源
rewrite ^/ https://onedayxyy.cn/error/1.png;
return 403;
}
}
location /error {
autoindex on; # 启用目录索引
alias /FdangDaoLianImages;
index index.html; # 默认显示index.html文件,如果没有则列出目录内容
}
ssl_certificate /etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/onedayxyy.cn/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/onedayxyy.cn.https.log;
}
(4)验证
访问自己域名:
扩展
如何将本地Teek生成的静态文件推送到云服务器的nginx站点目录,有多种办法(见如下详细链接):
- shell一键发布 (shell一键发布版内容到teek网站)
- 或者利用其它传输软件;(例如sftp,ftp,winscp……)
结束。