# 网页部署(Docker / 1Panel) 镜像:`crazyfigure/noteboard:latest`(`linux/amd64`、`linux/arm64`)。 - **多用户模式**(设置了管理员账号):访问需在登录页登录。管理员账号来自部署配置;普通用户由管理员在软件内创建,每人拥有独立的笔记、设置、收藏、草稿与历史记录,可把文件或文件夹共享给指定用户。 - **公开模式**(管理员账号留空):无需登录,所有访问者共用一份笔记;未保存草稿和恢复记录按浏览器区分。 ## Docker Compose ```bash # 下载仓库中的 compose.yaml 和 .env.example 到同一目录 cp .env.example .env # 可选:在 .env 中同时填写管理员账号 NOTEBOARD_USERNAME / NOTEBOARD_PASSWORD docker compose up -d # 浏览器访问 http://服务器IP:18427 ``` - 默认对外端口 `18427`,可在 `.env` 中修改 `NOTEBOARD_PORT`;容器内端口固定为 `3000`。直接通过 IP 访问时,放行防火墙 / 安全组的 `18427/TCP`。 - 更新:`docker compose pull && docker compose up -d`。 - 自行构建:`docker build -t noteboard:local .`。 - 不使用 Docker:`pnpm install --frozen-lockfile && pnpm build:web && npm ci --prefix server && pnpm start:web`;如需同步,还需构建 `server/native` 并设置 `NOTEBOARD_SYNC_BINARY` 为工作进程绝对路径。 ## 1Panel 在“容器 → 创建容器”按下表填写;也可在“容器 → 编排 → 创建编排”粘贴 [compose.yaml](../compose.yaml),按 `.env.example` 设置环境变量后部署。 **首次使用本机目录挂载,必须先准备可写目录**(镜像内用户为 `1000:1000`,挂载选“读写”不会自动修改属主): ```bash sudo mkdir -p /opt/noteboard/data sudo chown 1000:1000 /opt/noteboard/data ``` 也可在 1Panel“系统 → 文件”中将 `/opt/noteboard/data` 的用户 / 用户组均改为 `1000`。否则启动时会报 `EACCES: permission denied, mkdir '/data/workspace'`,修正后重启容器即可。 | 参数 | 填写值 | |---|---| | 名称 | `noteboard` | | 镜像 | 勾选“手动输入”,填 `docker.io/crazyfigure/noteboard:latest`;固定版本改为 `:x.y.z` | | 强制拉取镜像 | 勾选 | | 端口 | 暴露端口:服务器 `18427` → 容器 `3000`,`tcp` | | 网络 | `1panel-network`(或已有自定义桥接网络),IPv4 / IPv6 留空 | | 挂载 | 本机目录 `/opt/noteboard/data` → 容器目录 `/data`,读写 | | 重启规则 | 未手动停止则重启(`unless-stopped`) | | 其他 | Command / Entrypoint、标签留空;自动删除、特权模式、`-t` / `-i` 均不勾选;CPU / 内存保持默认 | | 环境变量 | 示例值 | 说明 | |---|---|---| | `NOTEBOARD_USERNAME` | `admin` | 管理员账号,不能含冒号;须与密码同时设置或同时留空。设置后启用登录与多用户 | | `NOTEBOARD_PASSWORD` | 自定义 | 管理员密码,只能在这里修改,重启容器后生效(已登录的管理员会话随之失效);**启用网页多端同步必须设置** | | `NOTEBOARD_PUBLIC_URL` | `https://notes.example.com` | 仅当反向代理未保留原始 `Host` 时填写浏览器实际访问的源地址(含非默认端口,不含末尾 `/`);直接 HTTP 访问留空 | `NOTEBOARD_PORT` 仅供 Compose 读取,1Panel 手动创建容器无需添加。 ### 反向代理 在“网站”中创建反向代理并开启 HTTPS: - 反代在宿主机或使用宿主机网络:上游填 `http://127.0.0.1:18427`。 - 反代在独立容器:与 NoteBoard 加入同一网络,上游填 `http://noteboard:3000`。 - 保留原始 `Host`,否则设置 `NOTEBOARD_PUBLIC_URL`;同步事件使用 SSE,需关闭响应缓冲。 - 传递 `X-Forwarded-Proto`(1Panel 默认已传递),登录 Cookie 会在 HTTPS 下自动加 `Secure`。 ## 多用户与共享 - **账号**:管理员用部署配置的账号密码登录,在“设置 → 用户管理”新建、停用、重置密码或删除普通用户(不开放注册)。普通用户在“设置 → 账号”修改自己的密码;管理员密码只能在 Docker / 1Panel 中修改。 - **数据隔离**:每个用户只能看到自己的 `/workspace`;所有读写、上传、附件、历史记录请求都在服务端逐一校验归属与权限。 - **共享**:在资源管理器右键文件或文件夹选择“共享…”,选择用户(或“所有用户”)并设置“只读 / 可编辑”。接收者在资源管理器顶部切到“共享给我”访问同一份源文件;同时编辑沿用现有的版本冲突检测,不提供实时协同。 - 可编辑者可在共享文件夹内新建、保存、改名、删除,但不能改名或删除共享项本身,也不能把文件移出到自己的空间。删除的文件进入所有者的回收目录。 - 共享内容不包含隐藏文件;所有者改名或移动后共享自动跟随,删除后共享随之移除。所有者被停用或删除时,其共享对他人不可见。 - **同步与插件**:多端同步与备份仅管理员可用(同步地址由服务器代为访问,避免普通用户借此探测内网)。插件和字体包按实例共享,由管理员安装、启用,普通用户直接使用。 - **删除用户**:账号与共享被删除,笔记数据整体移入 `/data/trash/users/`,不会永久删除。 ### 从旧版本升级 - 环境变量无需改动:原 `NOTEBOARD_USERNAME` / `NOTEBOARD_PASSWORD` 即为管理员账号,原有笔记、设置与同步配置仍归管理员。 - 登录方式由浏览器弹窗改为登录页,升级后需重新登录一次;登录状态保持 30 天,可在“设置 → 账号”退出登录。 - 普通用户数据位于 `/data/users/`,账号、会话与共享授权位于 `/data/auth/`,**备份时请备份整个 `/data`**。 ## 数据与同步 - 管理员(及公开模式)的笔记位于容器内 `/data/workspace`,普通用户位于 `/data/users/<用户标识>/workspace`,网页中都显示为 `/workspace`;配置、暂存、同步状态、账号与回收文件也在 `/data`。Compose 使用命名卷 `noteboard-data`,1Panel 示例对应宿主机 `/opt/noteboard/data`。**备份整个数据目录,更新 / 重建容器时复用原挂载。** - 网页同步:设置管理员账号密码后,管理员在“设置 → 同步与备份”选择 `/workspace` 下的同步文件夹及 WebDAV / S3 / GitHub / Gitee / GitCode / GitLab。与桌面、安卓共用同一同步协议,在服务器后台运行,关闭网页不停止。 - 网页可打开服务器文件或上传本机文件(单文件上限 50 MB),右键“下载到本机”导出。同时编辑同一文件会拦截过期保存,不提供实时协同。网页不执行桌面更新,字体包与插件下载到服务器数据目录。 - 不兼容 Windows 的文件名会在跨端同步前报错,请先改名;符号链接不参与同步。