一个用 Git 仓库充当数据库,Markdown 作为格式化语言的极简 Wiki 系统。
Wiki 的本质是版本控制和开源协作,使用成熟的 Git 可更好的管理恶意破坏问题,而 Markdown 也更易于编辑。
内容仓库就是 Wiki 的页面仓库,提供给用户任意修改,请使用 ModernWikiTemplate 仓库为模板。仓库为 Hugo 项目格式,你可以在其中任意修改网站样式。
直接 Fork ModernWikiTemplate 另支持 码云、GitLab。
先跳过,启动完系统后,回来设置:
访问 http://localhost/git ,直接点Install Gitea(立即安装),注册一个 Admin 账号,点右上角 ➕,选 migrate(迁移外部仓库), 克隆 https://github.com/Heerozh/ModernWikiTemplate.git ,改名为Wiki。
注意仓库权限需打开所有人可 Push,否则要通过 RP 审核。如果只希望 Content 目录可 Push,而站点配置和样式文件需 PR,可以使用 Git 子模块,用 2 个不同的仓库完成。
复制环境变量模板:
cp .env.example .env编辑 .env 文件,设置你的 Git 仓库:
GIT_REPO=https:/domain.com/your-username/your-wiki-content.git
GIT_BRANCH=master
LISTEN_DOMAIN=:80 # 本地测试只能使用:80,不然会无法访问Note
每次修改 .env 后,需重新构建镜像:docker compose build
先安装 Docker Engine 和 docker-compose-plugin,然后:
# 启动服务(第三方Git托管)
docker compose up -d --build
# 启动服务(本地自建Gitea托管)
docker compose --profile with-gitea up -d --build- 主站点:http://localhost
- Webhook 端点:http://localhost/webhook
- Gitea本地仓库(如果启用):http://localhost/git/
以GitHub为例,设置 Push 时触发 Webhook:
- 进入你的 GitHub 仓库设置
- 点击 "Webhooks" 选项
- 点击 "Add Webhook"
- 填写配置:
- Payload URL:
http://your-domain.com/webhook - Content type:
application/json - Secret: 输入你的随机密码
- Which events: 选择 "Just the push event"
- Payload URL:
当你的 Git 仓库内容更新时,此 Webhook 会触发 Hugo 重新构建网站。
另支持 Gitea, 码云(仅WebHook 密码模式) 和 GitLab,配置类似。
ModernWiki 由多个 Docker 容器合并组成,选用轻量级系统,仅150M内存 + Gitea(100M):
- 拉取公共 Git 仓库并使用 Hugo 生成静态网页
- 输出到共享的
site目录 - 一次性容器,执行完退出。
- 持续服务
site目录中的静态文件
- 持续接收 git push 时的 webhook 请求
- 收到后通过 Docker API,重启 hugo-builder
- 提供页面底部的轻量级评论
- 数据储存在
data/artalk目录下,需要备份 - 执行
docker exec -it modernwiki-artalk-1 artalk admin创建管理员账号 - .env设置参考 Artalk环境变量
- 可选容器,用于自建 Git 网页托管
- Gitea 的数据储存在
data/gitea目录下,需要备份
- 监听 80 端口作为入口
- 路由规则:
/→ 静态站点容器/webhook→ Webhook 容器- 支持导入额外的 Caddyfile 站点配置
首先更新本仓库,然后执行 docker 重建,所有镜像和软件即会升级到最新版。
git pull
docker compose build --pull# 查看所有服务日志
docker compose logs -f
# 查看特定服务日志
docker compose logs -f hugo-builder
docker compose logs -f static-site
docker compose logs -f webhook
docker compose logs -f proxydocker compose restart hugo-builder本 Wiki 系统只在仓库更新时进行构建,平时为静态文件服务,性能开销极低。所以突发性能实例就足够(价格-50%)。
修改 .evn,将 DOMAIN= 设置为你的域名。
无需配置,系统会自动且定期为你的域名申请 Let's Encrypt 或 ZeroSSL 免费证书。确保:
- 域名 DNS 指向你的服务器
- 防火墙端口 80 和 443 对外开放
这是一种价格最低的部署方式,只需购买带宽和存储,但部署麻烦,功能少,不推荐仅供参考。
- 使用第三方托管仓库
- 利用函数计算FC,通过Http触发器接收Webhook,启动hugo-builder容器,输出到OSS储存
- 对OSS开启静态网站托管,设置域名
- 再设一个函数计算FC,每个月定时触发,更新并上传SSL证书到OSS
MIT License