使用 vitepress + docker + oneDrive 等实现本地知识库 预览+备份

代码拓荒牛
• 阅读 189

1.简介

使用 语雀notion 等文档知识库,在使用起来比较方便,但是如果需要本地备份,就需要借助一些工具。本文介绍使用 本地预览框架 vitepress 和 同步网盘 oneDrive 来实现本地知识库 预览+备份。

2.自己实现一遍

2.1.初始化项目

2.1.1.创建项目

创建并进入目录,初始化 vitepress 项目。

mkdir local_wiki && cd local_wiki

2.1.2.创建 package.json

创建 package.josn 文件,并粘贴以下内容。

{
    "name": "local_wiki",
    "private": true,
    "scripts": {
        "docs:dev": "vitepress dev --host --port 10050"
    },
    "devDependencies": {
        "vitepress": "1.0.0-rc.29"
    }
}

2.1.3.初始化 pnpm-lock.yaml 文件

安装依赖,生成 pnpm-lock.yaml 文件。

pnpm install

2.2.配置 Docker 相关

2.2.1.创建 Dockerfile 文件

创建 Dockerfile 文件,并粘贴以下内容。

# 基础镜像
FROM node:16.15.0-alpine

# 创建 工作目录
WORKDIR /app

# copy 项目到镜像里
COPY . .

# 运行命令
RUN npm install -g pnpm && \
    pnpm install --frozen-lockfile

# 暴露端口
EXPOSE 5173

# 运行
CMD [ "npm", "run", "docs:dev" ]

2.2.2.创建 .dockerignore 文件

创建 .dockerignore 文件,并粘贴以下内容。

/.vitepress
/.git

/caches
/node_modules
/docs

2.3.构建本地镜像

终端运行以下命令。

docker build -t local_wiki:local -f ./Dockerfile .

2.4.运行镜像

2.4.1.了解配置路径

如果电脑有 iCloudoneDrive 等同步网盘,可以把 projectHostDocsDirprojectHostConfigDir 替换成同步目录。如果不需要备份,那就把 2 个配置改成自定义路径即可。

例如:

  • projectHostDocsDir => /Users/pocky/iCloud 云盘(归档)/local_wiki/docs
  • projectHostConfigDir => /Users/pocky/iCloud 云盘(归档)/local_wiki/config

2.4.2.创建 vitepress 配置文件

先去创建 projectHostConfigDir 这个预设目录,然后再到 local_wiki/config 目录里创建 config.mts 文件,并粘贴以下内容。

import { defineConfig } from "vitepress";

// https://vitepress.dev/reference/site-config
export default defineConfig({
    title: "本地文档",
    description: "本地文档知识库",
    srcDir: "./docs",
    cacheDir: "./caches",
    themeConfig: {
        search: {
            provider: "local",
        },
    },
});

2.4.3.创建 docs 目录

同上,也创建 projectHostDocsDir 这个预设目录,然后再到 local_wiki/docs 目录里创建一个 index.md 文件。

# 这是一个 md 文件

2.4.4.运行 docker 镜像

把以下的 projectHostDocsDirprojectHostConfigDir 变量改成自己的预设路径后,去终端运行此命令。

#!/bin/sh

# 镜像信息
dockerImageName=local_wiki
dockerImageVersion=local

# 运行后的容器信息
dockerContaimerName=L_local_wiki

# 端口
dockerHostPort=10050
dockerContainerPort=10050

# 文档目录映射配置
projectHostDocsDir=/XXXXXXXXXXXXXXX/local_wiki/docs
projectContainerDocsDir=/app/docs

# 配置目录映射配置
projectHostConfigDir=/XXXXXXXXXXXXXXX/local_wiki/config
projectContainerConfigDir=/app/.vitepress

# ====================

# 运行脚本
runShell(){
    # 停止并删除容器
    docker container stop $dockerContaimerName; \
    docker container rm $dockerContaimerName; \

    # 生成容器
    docker run -itd \
        --name=$dockerContaimerName \
        -p $dockerHostPort:$dockerContainerPort \
        -v $projectHostDocsDir:$projectContainerDocsDir \
        -v $projectHostConfigDir:$projectContainerConfigDir \
        $dockerImageName:$dockerImageVersion
}

runShell

3.或直接使用封装好的镜像

目录配置请看 2.4.运行镜像

终端运行以下命令。

#!/bin/sh

# 镜像信息
dockerImageName=pocky2460392754/vitepress_local_wiki
dockerImageVersion=1.0.0

# 运行后的容器信息
dockerContaimerName=vitepress_local_wiki

# 端口
dockerHostPort=10050
dockerContainerPort=10050

# 文档目录映射配置
projectHostDocsDir=/XXXXXXXXXXXXXXX/local_wiki/docs
projectContainerDocsDir=/app/docs

# 配置目录映射配置
projectHostConfigDir=/XXXXXXXXXXXXXXX/local_wiki/config
projectContainerConfigDir=/app/.vitepress

# ====================

# 运行脚本
runShell(){
    # 停止并删除容器
    docker container stop $dockerContaimerName; \
    docker container rm $dockerContaimerName; \

    # 生成容器
    docker run -itd \
        --name=$dockerContaimerName \
        -p $dockerHostPort:$dockerContainerPort \
        -v $projectHostDocsDir:$projectContainerDocsDir \
        -v $projectHostConfigDir:$projectContainerConfigDir \
        $dockerImageName:$dockerImageVersion
}

runShell

4.查看效果

浏览器输入 http://localhost:10050 地址,修改 index.md 文件查看效果。

5.总结

语雀 迁移到 notion, 再从 notion 迁移到 本地, 或许 本地+网盘同步 才是最好的选择。

6.博客原文

https://www.965.ink/archives/1701055919322

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表(关于日期时间时分秒显示不出来)
在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
JAVA_将二进制流转换成图片文件
_1. __\代码\_将二进制流转换成图片文件晚风工作室www.soservers.com    _跳至\1\(http://www.oschina.net/code/snippet_931591_1760429253)\全屏预览\(http://www.oschina.net/code/piece_full?code17
Stella981 Stella981
3年前
Linux查看GPU信息和使用情况
1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
PowerDesigner列名、注释内容互换
在用PowerDesigner时,常常在NAME或Comment中写中文在Code中写英文,Name只会显示给我们看,Code会使用在代码中,但Comment中的文字会保存到数据库TABLE的Description中,有时候我们写好了Name再写一次Comment很麻烦,以下两段代码就可以解决这个问题。在PowerDesigner中PowerDesig
代码拓荒牛
代码拓荒牛
Lv1
江汉思归客,乾坤一腐儒
文章
3
粉丝
0
获赞
0