随机
Enter 搜索 ↑↓ 切换 Esc 清空

fan-md

命令

fan-md 云文档服务器 部署运维

补充说明

本教程介绍 fan-md(Markdown + OpenAPI 云文档服务器)从部署、备份恢复到日常运维的完整流程。fan-md 基于 Docker 部署(镜像 mobufan/fan-md:latest,默认端口 9900,数据目录挂载 ./data:/fan-md/data)。

项目:fan-md|云文档(Markdown + OpenAPI 文档服务器) 仓库:https://github.com/meimolihan/fan-md 镜像:https://hub.docker.com/r/mobufan/fan-md

部署

Compose 一键部署(推荐)

bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/dc_inst_fan-md.sh)

传参部署(先目录后端口,顺序可互换)

bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/dc_inst_fan-md.sh) /vol1/1000/compose/fan-md 9900

Docker 手动运行

docker run -d --name fan-md --restart always \
  -p 9900:9900 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /home/docker/fan-md:/fan-md/data \
  -e reg=true \
  mobufan/fan-md:latest

卸载命令

docker rm -f fan-md && docker rmi -f mobufan/fan-md:latest && rm -rf /vol1/1000/compose/fan-md

首次使用

  1. 启动服务后访问 http://<IP>:9900
  2. 登录页点击注册,创建第一个用户账号(该功能由环境变量 reg=true 控制)
  3. 注册完成后,修改 docker-compose.yml 将 reg 改为 false 关闭注册(不影响已注册用户登录)

无用户时即使 reg=false 也允许注册第一个账号。

忘记密码

停止服务后用 SQLite 工具打开 ./data/md.db 重置:

SELECT id, name FROM t_user;
UPDATE t_user SET password = hex(sha256(id || '新密码')) WHERE name = '用户名';

改完重启容器即可。

备份与恢复

数据目录 ./data(含 SQLite 数据库 md.db 与 resource/ 图片/缩略图)可通过脚本快速备份与还原。脚本自动探测运行方式(systemd 服务 > docker 容器 > 离线),也可用 --mode docker 强制指定。

备份数据脚本

# 默认:备份到 <数据目录>/backup/,自动清理过期备份,保留最近 6 份
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_backup.sh)

# 指定备份目录 + 保留份数
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_backup.sh) "/vol1/1000/backup/fan-md" 10

# 指定数据目录(Docker 挂载的宿主路径)
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_backup.sh) --data /vol1/1000/compose/fan-md/data

将备份脚本添加到系统定时任务

# 1.下载脚本到 /usr/local/bin/fan-md_backup
curl -fsSL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_backup.sh -o /usr/local/bin/fan-md_backup

# 2.增加执行权限
chmod +x /usr/local/bin/fan-md_backup

# 3.测试运行一次
fan-md_backup

# 4.追加 crontab(root):每日凌晨2点30分执行,防重复追加
(crontab -l 2>/dev/null | grep -Fq '/usr/local/bin/fan-md_backup') || (crontab -l 2>/dev/null; echo '30 2 * * * /usr/local/bin/fan-md_backup >> /var/log/fan-md_backup.log 2>&1') | crontab -

# 5.验证定时任务是否写入成功
crontab -l

恢复数据脚本

# 默认:取备份目录下最新一份恢复
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_recover.sh)

# 指定备份目录,或指定具体文件
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_recover.sh) /vol1/1000/backup/fan-md
bash <(curl -sL https://raw.githubusercontent.com/meimolihan/fan-md/main/scripts/fan-md_recover.sh) --file FanMD-2026-09-15_10-00-00.tar.gz

还原会停止容器后将备份解压至数据目录(覆盖同名文件);离线模式(未检测到容器)会要求手动确认。 提示:还原后容器内仍缓存旧页面,建议重启容器 docker restart fan-md。

脚本命令

命令 说明
bash scripts/fan-md_backup.sh [目录] [保留份数] [--mode ...] [--data ...] [--container ...] 备份数据目录为 tar.gz
bash scripts/fan-md_recover.sh [目录] [--mode ...] [--data ...] [--file ...] 从备份恢复(默认最新一份)
./scripts/build-and-push.sh vX.Y.Z --yes -m "说明" 一键发布(更新版本号+打tag+推送,CI 自动构建)
./build.sh 本地编译(npm 构建前端 + go build)

日常管理命令

操作 命令
启动 docker start fan-md
关闭 docker stop fan-md
重启 docker restart fan-md
状态 docker ps -a --filter name=^/fan-md$
查看实时日志 docker logs -f fan-md
查看最近 100 行日志 docker logs -n 100 fan-md
端口映射 docker port fan-md
容器开机自启 docker update --restart always fan-md
端口放行 iptables -I INPUT -p tcp --dport 9900 -j ACCEPT

数据目录说明

相关命令