Sign inSign up

sqing33/docsify

By sqing33

Updated over 1 year ago

Image
0

1.1K

sqing33/docsify repository overview

本项目提供了一个基于 Docker 的 Docsify 环境,基于 stilleshan/docsify 镜像修改而成,新增了右侧标题栏插件,使用左边文件名+右边标题的布局,支持通过 Git Webhook 自动更新文档内容并重新生成侧边栏。

功能特性

  • Docker化环境: 使用 Docker 容器运行 Docsify,方便部署和管理。
  • Git Webhook 集成:
    • 通过 listener.js 脚本监听来自 Gitea (或其他兼容 Git 服务) 的 Webhook push 事件。
    • 验证 Webhook 签名以确保安全性。
    • 仅处理指定分支的 push 事件。
    • 自动从指定的 Git 远程仓库拉取最新更改。
  • 自动侧边栏生成:
    • generate-sidebar.js 脚本在 Git 拉取成功后自动运行,根据 /docs 目录下的 Markdown 文件结构生成 _sidebar.md
    • 支持排除特定文件和目录。
  • 灵活的 Git 配置:
    • 可以通过环境变量 ENABLE_GIT (默认为 true) 控制是否启用 Git 相关功能(初始化、拉取、Webhook 监听)。
    • 首次启动时,如果启用了 Git 且 /docs 目录为空,会自动初始化 Git 仓库,添加远程源 (由 GIT_REMOTE_URL 指定),并拉取指定分支 (由 GIT_BRANCH 指定) 的内容。
  • Docsify 插件:
    • docsify-plugin-toc: 右侧目录导航。
    • docsify-count: 字数统计。
    • emoji.min.js: Emoji 支持。
    • zoom-image.min.js: 图片缩放。
    • docsify-copy-code: 代码块复制按钮。
  • 自定义 Logo 和标题: index.html 中的自定义脚本会美化侧边栏顶部的 Logo 和站点名称显示。
  • 默认文件填充: 容器启动时,如果 /docs 目录中缺少核心 Docsify 文件(如 index.html, _sidebar.md, README.md, generate-sidebar.js, .nojekyll),会从镜像中复制默认版本。
  • 详细信息查看Github:https://github.com/sqing33/Docker.Docsify

image

Dockerfile 项目结构

.
├── Dockerfile              # Docker 镜像构建文件
├── entrypoint.sh           # 容器入口脚本,处理初始化和启动服务
├── generate-sidebar.js     # Node.js 脚本,用于生成 _sidebar.md
├── listener.js             # Node.js 脚本,Webhook 监听服务
├── index.html              # Docsify 主 HTML 文件和配置
├── _sidebar.md             # Docsify 侧边栏文件 (由 generate-sidebar.js 生成)
├── README.md               # 本 README 文件
└── icon.svg                # 站点图标

构建与运行

1. 构建 Docker 镜像

因为本地网络问题无法获取到源镜像stilleshan/docsify的元数据,所以将dockerhub同步到github的ghcr仓库以继续进行(ghcr.io/sqing33/docsify-stilleshan)

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t sqing33/docsify:latest \
  -t ghcr.io/sqing33/docsify:latest \
  --push .
2. 运行 Docker 容器

你需要根据你的需求配置以下环境变量:

  • DOCSIFY_PORT: Docsify 服务监听的端口 (默认为 6158)。
  • ENABLE_GIT: 是否启用 Git 功能 (默认为 true)。
  • WEBHOOK_PORT: Webhook 监听器监听的端口 (默认为 6159)。
  • WEBHOOK_SECRET: 用于验证 Webhook 签名的密钥。
  • GIT_REMOTE_URL: 你的 Git 仓库的 URL (例如: https://gitea.example.com/user/repo.git)。
  • GIT_REMOTE: Git 远程仓库的名称 (默认为 origin)。
  • GIT_BRANCH: 你希望拉取和监听的分支 (默认为 main)。

挂载容器内的 /docs 目录,以便于持久化存储文档内容。

示例 docker run 命令:

docker run -d \
  --name docsify \
  -p 6158:6158 \
  -p 6159:6159 \
  -e DOCSIFY_PORT=6158 \
  -e ENABLE_GIT="true" \
  -e WEBHOOK_PORT=6159 \
  -e WEBHOOK_SECRET=YOUR_WEBHOOK_SECRET \
  -e GIT_REMOTE_URL=YOUR_GIT_REPO_URL \
  -e GIT_REMOTE=origin \
  -e GIT_BRANCH=main \
  -e DOCS_DIR=/docs \
  -v /vol1/1000/Docker/docsify/docs:/docs \
  --restart unless-stopped \
  ghcr.io/sqing33/docsify:latest

示例 docker-compose.yml 文件:

services:
  docsify:
    image: ghcr.io/sqing33/docsify:latest
    container_name: docsify
    ports:
      # Docsify 服务器端口映射
      - "6158:6158"
      # Webhook 监听器端口映射,listener.js 在容器内部监听 6159 端口
      - "6159:6159"

    environment:
      # Docsify 服务端口
      - DOCSIFY_PORT=6158
      # 是否启用 Git 更新
      - ENABLE_GIT="true"
      # WEBHOOK_PORT 监听端口
      - WEBHOOK_PORT=6159
      # Webhook 验证密钥
      - WEBHOOK_SECRET=YOUR_WEBHOOK_SECRET
      # Git 远程仓库的 URL,用于 entrypoint 中的 git remote add origin
      - GIT_REMOTE_URL=YOUR_GIT_REPO_URL
      # Git 远程源的名称,用于 listener.js 中的 git pull
      - GIT_REMOTE=origin # 通常是 origin,如果你的仓库不是则修改
      # Git 分支名称,用于 listener.js 中的 git pull 和事件判断
      - GIT_BRANCH=main
      - DOCS_DIR=/docs # 默认 /docs ,这应与卷挂载点匹配

    volumes:
      # 将宿主机目录挂载到容器内的 /docs
      - '/vol1/1000/Docker/docsify/docs:/docs'

    # 可选:重启策略
    restart: unless-stopped

Tag summary

Content type

Image

Digest

sha256:c7ca9f01d

Size

55 MB

Last updated

over 1 year ago

docker pull sqing33/docsify