shixian64/jm-web · 上手攻略

  • 仓库:shixian64/jm-web
  • 链接:https://github.com/shixian64/jm-web
  • 分类:工具 · 漫画阅读 · 自部署
  • 作者:Jay
  • 更新:2026-09-06

这是什么

JM Web 是一个自部署的网页版漫画阅读站,参照 jmcomic-next(安卓客户端)与 jm-mobile 的通信协议实现,兼容电脑与手机浏览器(响应式布局)。核心价值在于:你不需要依赖任何第三方服务器,自己搭一套就能在任意设备上用浏览器阅读漫画,支持离线下载、离线阅读、PWA 安装、中文翻译(繁体→简体)等完整功能。

⚠️ NSFW 警告:本项目内容可能包含成人向内容,仅限成年人在私人环境下使用;请自行遵守当地法律法规。

解决什么问题

  • 数据主权:不依赖任何第三方服务,所有数据(账号、会话、下载)都在你自己的服务器上
  • 完整阅读体验:连续滚动、单页、点击翻页四种模式;预解码加速;章节跳转;进度恢复
  • 离线可用:IndexedDB 离线资料库,批量下载到本地,下载任务可暂停/续传/重试
  • 图片还原:与安卓客户端相同的扰乱规则,在浏览器 Web Worker / OffscreenCanvas 中解码
  • AI 辅助:可选接入 OpenAI-compatible API,对章节内容做 AI 分析(生成标题、剧情摘要)
  • 中文翻译:可选部署翻译容器(繁体→简体),随主服务统一管理
  • 隐私保护:支持 PIN、图案锁、WebAuthn 设备验证,失焦时自动伪装界面

快速安装

前置要求

  • Node.js 20.0.0 或更高(零运行时依赖,无需 npm install
  • 生产环境建议使用 LTS 版本;Docker 构建基线固定为 node:22.23.2-alpine3.24
  • 推荐系统:Linux / macOS / Windows(PowerShell)

方式一:直接运行(最简)

git clone https://github.com/shixian64/jm-web.git
cd jm-web
node server.js        # 默认监听 127.0.0.1:3210

带口令启动(生产环境必设):

# Linux / macOS
ACCESS_PASSWORD='你的长随机口令' node server.js

# Windows PowerShell
$env:ACCESS_PASSWORD = '你的长随机口令'; node server.js

用 pm2 守护(生产推荐):

npm install -g pm2
pm2 start server.js --name jm-web
pm2 save
pm2 startup

方式二:Docker Compose(推荐生产部署)

cd jm-web
cp .env.example .env          # 复制环境变量模板
# 编辑 .env,设置高强度 ACCESS_PASSWORD

mkdir -p data
sudo chown -R 1000:1000 data # Linux 上需要授权
chmod 700 data

docker compose --env-file .env config --quiet  # 校验配置
docker compose up -d

访问 http://localhost:3210,首次打开会引导你设置访问口令。

翻译服务(可选)

翻译容器随主服务统一管理,一行命令启动:

# 在 .env 中设置 ACCESS_PASSWORD 和 TRANSLATION_SERVICE_TOKEN
docker compose up -d --build

翻译服务覆盖繁体→简体中文,容器内部网络通信,不对外暴露端口。翻译结果保存在 Docker 命名卷 translation-cache

使用预构建镜像(无需在本地构建)

仓库的 GitHub Actions 在测试通过后会自动构建 linux/amd64linux/arm64 镜像并发布到 GHCR:

# 推送 v1.2.3 标签时自动生成 latest、1.2.3、1.2、1 标签
# main 分支生成 latest 和 edge 标签
docker pull ghcr.io/shixian64/jm-web:latest

核心用法

基础操作

操作 说明
访问地址 http://服务器IP:3210(直连)或通过 Nginx/Caddy 反向代理
登录账号 在 Web 界面输入上游 JM 账号密码,支持自动登录
搜索 关键词/作者/标签/JM 编号;支持 -标签 排除语法
阅读器模式 连续滚动 / 正序单页 / RTL 单页 / 点击翻页,四种热切换
下载 漫画详情页 → 下载按钮,任务进入离线队列

环境变量配置

变量 默认值 说明
ACCESS_PASSWORD (无) 访问口令,生产环境必须设置
HOST 127.0.0.1 监听地址;公网访问设为 0.0.0.0 需配合 HTTPS
PORT 3210 监听端口
AI_API_KEY (无) 启用 AI 分析功能(OpenAI-compatible)
AI_MODEL grok-4.6 AI 模型,可更换为其他 OpenAI-compatible 模型
JMW_PUBLISH_HOST 127.0.0.1 Docker 模式对外发布地址
JMW_PUBLISH_PORT PORT 宿主机端口

AI 章节分析

配置 AI_API_KEY 后,系统按热门/访问记录自动排队分析章节:

AI_API_KEY=sk-xxx AI_MODEL=gpt-4o node server.js
  • 分析结果保存在服务端,可通过 GET /api/chapter-ai?aid=<漫画ID>&photoId=<章节ID> 查询
  • 详细剧情和简洁总结暂不直接显示,仅标题显示在章节列表

图片线路与缓存

  • 封面/缩略图会进入有界 LRU 缓存(默认 64 MiB,单张 2 MiB,24 小时)
  • 章节正文流式转发,不在服务端缓存完整图片
  • 上游超时或 5xx 时,前端以退避方式有限重试

典型适用场景

  1. 隐私阅读:不想用第三方阅读站,数据留存在自己的服务器上
  2. 内网/离线环境:在内网部署,团队成员共享离线漫画库
  3. 多设备同步:登录账号后,阅读历史、收藏跨设备一致
  4. 自建翻译流程:用翻译容器将繁体内容自动翻译为简体
  5. PWA 安装:在手机/桌面安装为本地 App,离线阅读

坑与注意

  1. 必须设 ACCESS_PASSWORD:直接运行默认不设口令,只有直连 TCP 回环请求才免口令。公网暴露 0.0.0.0 + 无口令 = 任何人可访问运维功能。
  2. 不要迁移 data/ 目录:包含服务器密钥、登录会话和设置,迁移时需要单独处理。
  3. Docker 模式数据目录必须预先创建JMW_HOST_DATA_DIR 目录必须存在且可由 uid 1000:1000 写入,否则 Docker 会用 root 身份静默创建。
  4. 翻译服务是独立 Python 容器:OCR 依赖首次构建耗时长,需要预留时间。
  5. 图片解扰在浏览器端进行:依赖 OffscreenCanvas,不支持的旧 Safari/WebView 会回退主线程 Canvas,可能更卡。
  6. 单实例资源上限:默认 1.0 CPU / 512 MB 内存 / 256 进程,多人共用时注意 .env 调高限制。
  7. 不要让代理删除来源标识:无口令运维模式校验来源 IP,代理删除 X-Forwarded-For 等头后会把远端伪装成本机。
  8. ⚠️ Docker 镜像摘要核验:生产发布前应 docker buildx imagetools inspect 核验节点镜像摘要,防止供应链攻击。

与同类对比

方案 优点 缺点
JM Web(自部署) 完全自控、离线可用、AI 分析、PWA、多语言翻译 需要自己有服务器、NSFW 内容限制
官方网页版 即开即用 依赖第三方、有广告、数据不在自己手上
jmcomic-next(安卓) 成熟、功能全 需要安卓设备,无法浏览器访问
自建漫画站(如 Komga) 通用漫画管理、支持多种漫画源 需要自己找漫画资源、不是 JM 专用客户端

JM Web 的核心差异是零依赖直连上游协议、无需抓取/导入,登录即用,与官方安卓客户端体验一致。

一句话推荐结论

如果你有 Node.js 或 Docker 运行环境、想完全掌控自己的阅读数据、同时需要离线可用和 PWA 体验,JM Web 是目前最完整的自部署方案。