乐于分享
好东西不私藏

密码锁进 NAS——PasswWord-XL 本地密码库部署教程

密码锁进 NAS——PasswWord-XL 本地密码库部署教程

把密码锁进 NAS:password-XL 本地密码库部署教程

一句话总结: 这是一个可以部署在 NAS 上的本地密码管理服务。用 Docker 跑起来之后,你的后台密码、路由器密码、各种服务账号,就不用继续在微信收藏、备忘录、截图相册里“全国巡演”了。

你是不是也有这种祖传操作:

  • NAS 后台密码:记在备忘录里
  • 路由器密码:藏在微信收藏里
  • 某个 Docker 应用的管理员密码:存在截图里
  • 最离谱的是:文件名叫:
重要密码别删.txt

这已经不是密码管理了,这是给黑客准备自助餐。

今天介绍一个适合 NAS 玩家折腾的小工具:password-XL

它是一个开源免费的密码管理项目,可以部署在自己的 NAS 上,数据放在自己的机器里。简单说就是:

密码不再四处流浪,统一关进 NAS 这个“小黑屋”。

项目信息

项目
地址
开源地址
见下方代码块
官方在线服务
见下方代码块
https://github.com/peng0105/password-xlhttps://password-xl.cn

| 部署方式 | Docker / Jar / NAS | | 推荐玩法 | NAS 私有部署 |


password-XL 是什么?

password-XL 是一款开源密码管理工具,主打几个关键词:

特点
说明
私有部署
可以部署在自己的 NAS / 服务器上
界面美观
不是那种“上古后台管理系统”画风
功能丰富
支持密码、笔记、个人与团队常见场景
部署简单
最新后端镜像已经包含前端页面
存储灵活
支持私有存储、阿里云 OSS、腾讯云 COS 等

对 NAS 用户来说,最重要的是:

只需要跑一个 Docker 容器,就能在局域网里拥有自己的密码管理服务。

不用额外装数据库,不用前后端分开部署,也不用半夜研究 Nginx 配置研究到怀疑人生。


适合谁用?

1. NAS 用户

NAS 都买了,不拿来管密码,多少有点浪费这块硬盘。

2. Docker 爱好者

看到下面这种配置文件就手痒的人,懂的都懂。

docker-compose.yml

3. 不想把密码全部交给第三方服务的人

不是说云服务不好,只是有些东西放自己手里,睡觉确实更踏实。

4. 家里服务太多的人

Jellyfin、qBittorrent、Alist、Home Assistant、青龙面板、OpenWrt、Portainer……

密码多到像 NAS 版《百家姓》。


部署前准备

开始之前,你需要准备好这些东西:

准备项
说明
NAS 一台
群晖、威联通、极空间、绿联、飞牛、Unraid 都可以
Docker 环境
NAS 自带 Docker / Container Manager 即可
数据目录
用来保存 password-XL 配置和密码数据
访问端口
本文使用 9080,也可以自行修改

本文采用通用 Docker Compose 方式。

不同 NAS 的界面可能不一样,但核心逻辑都是:

创建项目填写 compose映射数据目录启动容器查看日志拿初始密码登录使用

推荐 Docker Compose 文件

下面是适合大多数 NAS 的 compose 配置。

注意: 下面这个路径需要改成你自己 NAS 上真实存在的目录。

/volume1/docker/password-xl
services:password-xl-service:image: ccr.ccs.tencentyun.com/password-xl/password-xl-service:latestcontainer_name: password-xl-servicerestart: unless-stoppedports:"9080:8080"volumes:/volume1/docker/password-xl:/password-xl-service

compose 配置解释

镜像地址

image: ccr.ccs.tencentyun.com/password-xl/password-xl-service:latest

这是 password-XL 的后端整合镜像。

重点来了:

现在这个镜像已经包含前端页面,所以不需要再单独部署前端。

也就是说,一个容器就能跑完整服务。


端口映射

ports:"9080:8080"

这里的意思是:

位置
端口说明
NAS 外部访问端口
浏览器访问用这个
容器内部端口
不建议改

NAS 外部访问端口:

9080

容器内部端口:

8080

如果下面这个端口已经被别的服务占用了:

9080

可以改成:

ports:"9180:8080"

那访问地址就变成:

http://NAS_IP:9180

数据目录映射

volumes:/volume1/docker/password-xl:/password-xl-service

这一行非常重要。

左边是 NAS 上的真实目录,右边是容器内部目录。

NAS 真实目录示例:

/volume1/docker/password-xl

容器内部目录:

/password-xl-service

password-XL 的配置文件和密码数据会保存在容器内部这个目录里:

/password-xl-service

如果你不挂载这个目录,容器一删,数据也跟着“肉身成圣”,直接飞升。


常见 NAS 路径示例

不同 NAS 的目录结构不完全一样,可以参考下面这些写法:

NAS / 系统
推荐数据目录
群晖 DSM
见下方代码块
Unraid
见下方代码块
飞牛 / 绿联等
见下方代码块
自定义 Linux 服务器
见下方代码块

群晖 DSM:

/volume1/docker/password-xl

Unraid:

/mnt/user/appdata/password-xl

飞牛 / 绿联等:

/DATA/AppData/password-xl

自定义 Linux 服务器:

/opt/password-xl

原则只有一个:

左边路径必须是宿主机真实存在、并且你愿意长期保存数据的目录。


如果启动失败:换 JVM 镜像

官方文档里提到,如果启动后遇到 CPU 指令不支持的问题,可以把镜像换成 JVM 版本。

services:password-xl-service:image: ccr.ccs.tencentyun.com/password-xl/password-xl-service-jvm:latestcontainer_name: password-xl-servicerestart: unless-stoppedports:"9080:8080"volumes:/volume1/docker/password-xl:/password-xl-service

简单理解:

镜像
特点
普通镜像
更轻,资源占用低
JVM 镜像
兼容性更好,适合部分 NAS

普通镜像:

password-xl-service:latest

JVM 兼容镜像:

password-xl-service-jvm:latest

如果普通镜像能跑,就优先用普通镜像。

如果启动报错,先别急着骂 NAS。很多时候不是机器不努力,是镜像和 CPU 八字不合。


在 NAS 里创建项目

不同 NAS 的入口名称不一样,大概会叫这些:

  • 群晖:Container Manager
  • 威联通:Container Station
  • 极空间:Docker
  • 绿联:Docker
  • 飞牛:Docker / 应用容器

大致步骤如下:

  1. 打开 NAS 的 Docker 管理界面
  2. 找到“项目”或“Compose”
  3. 新建项目
  4. 项目名称填写:
password-xl
  1. 粘贴上面的 compose 内容
  2. 修改数据目录路径
  3. 点击部署 / 创建 / 启动

如果你的 NAS 支持上传 compose 文件,也可以直接把配置保存成下面这个文件名再上传。

docker-compose.yml

SSH 命令行部署方式

如果你喜欢 SSH 到 NAS 上操作,也可以这样。

先创建目录:

mkdir -p /volume1/docker/password-xlcd /volume1/docker/password-xl

创建 compose 文件:

docker-compose.yml
```yamlservices:  password-xl-service:    image: ccr.ccs.tencentyun.com/password-xl/password-xl-service:latest    container_name: password-xl-service    restart: unless-stopped    ports:      - "9080:8080"    volumes:      - /volume1/docker/password-xl:/password-xl-service
启动服务:```bashdocker compose up -d

查看容器状态:

docker ps

查看日志:

docker logs password-xl-service

如果你的系统还是老版本 Docker Compose,命令可能是:

docker-compose up -d

第一次启动:去日志里找初始密码

password-XL 首次启动时,会自动生成一个随机登录密码。

这个密码会输出在容器日志里。

查看日志:

docker logs password-xl-service

在 NAS 图形界面里,也可以进入容器详情,找到“日志”。

同时,这个密码也会保存在你挂载目录里的配置文件中:

password-xl.toml

比如:

/volume1/docker/password-xl/password-xl.toml

小提醒: 如果你修改了下面这个配置文件里的登录密码,需要重启容器才会生效。

password-xl.toml

重启命令:

docker restart password-xl-service

或者:

docker compose restart

访问 password-XL

假设你的 NAS IP 是:

192.168.31.3

compose 里端口写的是:

ports:"9080:8080"

那么浏览器访问:

http://192.168.31.3:9080

如果页面正常打开,说明服务已经跑起来了。

到这里,NAS 又多了一个新应用。恭喜,你的 Docker 列表又长了一截,离“我也不知道这些容器都是干嘛的”更进一步。


登录方式选择

进入页面后,可以看到 password-XL 支持多种存储方式:

  • 阿里云 OSS
  • 腾讯云 COS
  • 私有存储

我们是部署在自己 NAS 上,所以这里选择:

私有存储

然后输入刚才在日志里看到的初始密码,就可以登录。


首次使用:设置主密码

第一次进入系统后,需要设置主密码。

这里一定要认真点。

主密码就像你家保险柜的钥匙,不是互联网服务里那种“忘记密码点这里发验证码”的温柔剧情。

官方文档也强调了:

主密码无法找回。

如果忘了,之前保存的密码就无法解密恢复。

所以建议:

  • 主密码要足够复杂
  • 但也要你自己真的能记住
  • 不要用下面这种弱密码:
123456adminpassword
  • 不要用生日
  • 不要用手机号

如果你设置成下面这种密码,那就不是密码管理器,是密码展示柜。

123456

添加第一条密码

进入系统后,就可以新建密码记录了。

一般可以保存这些信息:

字段
用途
网站名称
比如群晖后台、OpenWrt、Jellyfin
登录账号
管理员账号或普通账号
登录密码
对应服务的密码
网址
服务访问地址
备注
端口、用途、注意事项等
分类
NAS、网络、影音、下载、自动化等

你可以先把 NAS 相关服务整理进去:

群晖后台OpenWrtJellyfinqBittorrentAlist青龙面板Home AssistantPortainer

以前这些密码散落在浏览器、备忘录、微信收藏、截图相册里。

现在统一放进 password-XL,至少不用每次登录后台都上演一出《我密码呢》。


数据备份很重要

重点来了。

password-XL 部署在 NAS 上,不代表万无一失。

NAS 也是机器,机器就可能:

  • 硬盘坏
  • 系统崩
  • 手滑删目录
  • Docker 项目被你“清理空间”时误删
  • 半夜折腾反向代理把自己绕晕

所以一定要备份这个目录:

/volume1/docker/password-xl

尤其是里面的:

password-xl.toml

以及 password-XL 生成的数据文件。

建议你这样做:

  1. 定期备份到另一块硬盘
  2. 使用 NAS 自带快照
  3. 同步到另一台设备
  4. 重要数据再加一份离线备份

记住一句 NAS 圈老话:

没备份的数据,就是还没丢的数据。


更新 password-XL

如果后续要更新镜像,可以用下面流程。

进入 compose 所在目录:

cd /volume1/docker/password-xl

拉取最新镜像:

docker compose pull

重建容器:

docker compose up -d

清理旧镜像:

docker image prune

如果是 NAS 图形界面,一般操作是:

  1. 停止项目
  2. 拉取最新镜像
  3. 重新创建 / 更新项目
  4. 保持原来的挂载目录不变

最重要的是:

更新前先备份数据目录。

别嫌麻烦。你现在嫌备份麻烦,数据丢了以后就会觉得人生麻烦。


反向代理建议

如果你只在局域网使用,直接访问:

http://NAS_IP:9080

就可以。

如果你打算外网访问,我个人建议谨慎一点。

密码管理服务这种东西,不建议直接裸奔到公网。实在需要外网访问,建议:

  • 使用 VPN,比如 WireGuard / Tailscale / ZeroTier
  • 或者套 HTTPS 反向代理
  • 设置强密码
  • NAS 防火墙限制访问来源
  • 定期更新镜像
  • 不要随便暴露管理端口

公网暴露密码服务这件事,就像把保险柜放小区门口,再贴个纸条:欢迎测试。

不是不能做,但得有安全意识。


常见问题

页面打不开怎么办?

先检查容器是否运行:

docker ps

再看日志:

docker logs password-xl-service

确认端口是否写对。

如果 compose 里是:

ports:"9080:8080"

那访问地址就是:

http://NAS_IP:9080

不是下面这两个端口:

808080

容器启动失败怎么办?

先看日志:

docker logs password-xl-service

如果怀疑是 CPU 兼容性问题,换 JVM 镜像:

image: ccr.ccs.tencentyun.com/password-xl/password-xl-service-jvm:latest

重建容器后数据没了?

大概率是挂载目录没配对。

一定要有:

volumes:/volume1/docker/password-xl:/password-xl-service

并且左边路径要是 NAS 上真实存在的目录。


修改密码后不生效?

修改下面这个配置文件后,需要重启容器:

password-xl.toml
docker restart password-xl-service

需要单独部署前端吗?

不需要。

官方文档说明,如果使用私有后端服务,最新后端镜像已经包含前端页面服务。

所以 NAS 部署时,只需要一个后端整合容器即可。

也就是说,本篇这个 compose 就够了。


完整 compose 汇总

推荐版本

services:  password-xl-service:    image: ccr.ccs.tencentyun.com/password-xl/password-xl-service:latest    container_name: password-xl-service    restart: unless-stopped    ports:      - "9080:8080"    volumes:      - /volume1/docker/password-xl:/password-xl-service
### JVM 兼容版本
services:  password-xl-service:    image: ccr.ccs.tencentyun.com/password-xl/password-xl-service-jvm:latest    container_name: password-xl-service    restart: unless-stopped    ports:      - "9080:8080"    volumes:      - /volume1/docker/password-xl:/password-xl-service
如果你的 NAS 路径不是下面这个,记得改成自己的实际路径。```text/volume1/docker/password-xl

总结

password-XL 的部署难度不高,尤其是现在后端镜像已经整合了前端页面,只需要一个容器就能跑起来。

整个流程可以概括为:

准备数据目录写 compose启动容器查看日志拿初始密码浏览器访问选择私有存储设置主密码开始管理密码

它不一定适合所有人,但对于 NAS 玩家来说,password-XL 是一个挺值得尝试的小工具。

尤其是你已经在 NAS 上部署了一堆服务,每个服务都有账号密码。与其继续靠脑子、截图、备忘录和玄学记忆力硬撑,不如把它们统一收纳起来。

毕竟,人类的大脑是用来思考人生的,不是用来记下面这串东西到底哪个感叹号有没有大写的。

Admin@123456!

最后提醒一句:

密码管理器能帮你管密码,但救不了乱设密码的人。

主密码请认真设置,数据目录请认真备份。

不然哪天真丢了,就只能对着 NAS 深情吟唱:

“你把我的密码,带去了哪里……”