Seafile 私有文件库:NAS 上 Docker 部署,按人共享、改坏能回退版本
作者
小编
发布时间

项目介绍
Seafile 是一个开源的私有文件库,面向的是「一家人、一个小团队的文件该放在哪」这件事:文档、表格、照片、合同按资料库分类存放,每个人一个账号,谁能看、谁能改按人和资料库分别设置,每次上传同名文件都会留下旧版本,改坏了可以翻回去。
它和普通网盘的区别在于数据位置:文件就在自己家的 NAS 上,权限、备份、留多久都自己说了算。网页端可以直接预览 Markdown、图片、PDF 和常见文档,分享可以按账号共享,也可以生成一个访客打开就能看的分享地址。
本文用的是开源社区版(CE),Docker 一条编排就能装起来。
项目地址:点我跳转
部署安装
只要能跑 Docker 的 NAS 都能装,下面用飞牛 NAS 演示:先用 帕斯内网穿透 拿到一个公网地址,再把 Seafile 用 Docker Compose 装起来。注意顺序:Seafile 启动时会把「服务器地址」写进配置,所以要先有隧道域名、再部署;装完直接用公网地址登录。
一、先用帕斯内网穿透拿到公网地址
飞牛的「应用中心」里搜 PassNAT,装上这个穿透插件,打开它,点「创建隧道」。隧道名字随便起(不超过 12 个字符),接入节点和传输协议留默认,本地 IP 留默认的 127.0.0.1,本地端口填 8088(就是下面编排里冒号左边那个端口)。
建好之后点开这条隧道,按一下电源,状态变成运行中,详情里就能看到分配好的公网地址。把其中的域名部分(不带 http:// 或 https://)记下来,下一步要填进编排的 SEAFILE_SERVER_HOSTNAME;如果分配的是 https 地址,编排里协议那一项也改成 https。
不是飞牛的系统,PassNAT 文档的「连接使用」里有其他系统的连接教程:点我跳转。
二、新建 Compose 项目
打开飞牛的「Docker」应用,切到「Compose」标签,点右上角的新增项目。项目名称填 seafile,路径在「我的文件」下面挑一个空文件夹,没有就当场新建一个。来源选「创建 docker-compose.yml」,把下面这段整个贴进去:
1services:2 db:3 image: mariadb:10.114 restart: unless-stopped5 environment:6 - MYSQL_ROOT_PASSWORD=change-me-db-root7 - MYSQL_LOG_CONSOLE=true8 - MARIADB_AUTO_UPGRADE=19 volumes:10 - seafile-mysql:/var/lib/mysql11 healthcheck:12 test: ["CMD", "/usr/local/bin/healthcheck.sh", "--connect", "--mariadbupgrade", "--innodb_initialized"]13 interval: 20s14 start_period: 30s15 timeout: 5s16 retries: 1017 networks:18 - seafile-net1920 redis:21 image: redis22 restart: unless-stopped23 command: ["/bin/sh", "-c", "exec redis-server --requirepass change-me-cache"]24 networks:25 - seafile-net2627 seafile:28 image: seafileltd/seafile-mc:13.0-latest29 restart: unless-stopped30 ports:31 - "8088:80"32 volumes:33 - seafile-data:/shared34 environment:35 - SEAFILE_MYSQL_DB_HOST=db36 - SEAFILE_MYSQL_DB_USER=seafile37 - SEAFILE_MYSQL_DB_PASSWORD=change-me-db38 - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=change-me-db-root39 - SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db40 - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db41 - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db42 - TIME_ZONE=Asia/Shanghai43 - INIT_SEAFILE_ADMIN_EMAIL=admin@example.com44 - INIT_SEAFILE_ADMIN_PASSWORD=change-me-admin45 - SEAFILE_SERVER_HOSTNAME=seafile.example.com46 - SEAFILE_SERVER_PROTOCOL=http47 - JWT_PRIVATE_KEY=change-me-to-a-random-32-char-string48 - CACHE_PROVIDER=redis49 - REDIS_HOST=redis50 - REDIS_PASSWORD=change-me-cache51 - ENABLE_SEADOC=false52 - ENABLE_NOTIFICATION_SERVER=false53 - ENABLE_SEAFILE_AI=false54 depends_on:55 db:56 condition: service_healthy57 redis:58 condition: service_started59 networks:60 - seafile-net6162networks:63 seafile-net:6465volumes:66 seafile-mysql:67 seafile-data:
编排里有几处要换成自己的:
数据库口令:SEAFILE_MYSQL_DB_PASSWORD 和 INIT_SEAFILE_MYSQL_ROOT_PASSWORD 换成自己的一长串,两处要能对得上。
管理员邮箱和密码:INIT_SEAFILE_ADMIN_EMAIL 和 INIT_SEAFILE_ADMIN_PASSWORD 是第一次启动时创建的管理员账号,只生效一次,记好。
服务器地址:服务器地址那一项填上一步拿到的隧道域名;协议按公网地址是 http 还是 https 改对应那一项。
JWT 密钥:JWT_PRIVATE_KEY 换成一串至少 32 位的随机字符,字母数字混着来,别用示例值。
端口 8088 被占用的话,把冒号左边的数字换一个,隧道里的本地端口也跟着改。勾上「创建项目后立即启动」,第一次启动会建库、初始化管理员,大约一两分钟;这段时间浏览器打不开是正常的,看容器日志出现 Seahub is started 就好了。
数据库放在 seafile-mysql 具名卷里,文件放在 seafile-data 具名卷里,备份这两个卷就够了。MariaDB 的数据目录不要改成 NAS 上的绑定挂载——部分 NAS 的目录权限会让数据库起不来,用具名卷最稳。
三、第一次登录和管理后台
用公网地址打开,输入编排里填的管理员邮箱和密码。进去是中文界面,左边是工作区,中间是文件列表,默认已经有一个私人资料库。
管理入口在右上角头像菜单里:点「系统管理」,能看到用户、群组、资料库、分享链接这些页面。以后加家人账号就在这里点「添加用户」,填邮箱、名称和初始密码;对方第一次登录会被要求改一次密码。
四、建资料库、上传和预览
点「我的资料库」旁边的新建按钮,给资料库起个名字,比如「项目资料」。进去以后点右上角的上传按钮,把文件拖进来,也可以选择整个目录上传。传完在文件列表里点文件名就能预览:Markdown 直接渲染成排版好的文档,图片、PDF 也能在网页里看。
文件列表里能看到大小和更新时间;同一个文件名再次上传时会问要不要替换,替换之后就多了一个版本。
五、按人共享:可读写 / 只读 / 分享地址
在资料库的「共享」里选「共享给用户」,搜家人的账号,选权限再提交:可读写可以查看、修改、上传、下载和同步;只读只能看和下载,改不了。列表里每个人一条,权限随时可以改。
临时给朋友看文件,不必给他建账号:同一页的「共享链接」里点生成链接,可以设权限(预览与下载 / 仅查看 / 下载和上传)和访问范围。生成后把地址发出去,对方不用登录就能打开资料库,看到的是同样的文件列表。
要收回权限,把共享列表里的人删掉、或者把分享链接删除即可;已经发出去的地址立刻失效。
六、版本历史:改坏了翻回去
打开一个文件,右上角「更多操作」里点「历史」,右边会列出这个文件的每个版本,谁在什么时候传的都记着。点旧版本可以预览当时的内容,需要的话下载回来;新版本一直都在,不会被旧版本覆盖掉。
这个功能对表格特别有用:一家人改同一份预算,改乱了不用互相问「你改了什么」,翻历史版本对一下就清楚。
几点说明
数据在哪。 数据库在 seafile-mysql 卷里,文件在 seafile-data 卷里,两个卷一起备份。搬家时把这两个卷导出来,带到新机器上再挂回去。
升级。 镜像用的是 13.0-latest,升级前先备份两个卷,再重新拉取镜像、重启项目;数据库结构会跟着镜像版本升级,别跨大版本直接跳。
在线 Office 和同步客户端。 本篇只验证了网页端的上传、预览、共享、版本历史。在线 Office(SeaDoc)需要额外服务,桌面和手机同步客户端也要单独安装配置,这两块本文没有验证,不在这里承诺;编排里已经把 SeaDoc 关掉,需要的人按官方文档再开。
明文 HTTP 访问。 内网穿透给的是 http 地址时,Seafile 本身能正常用;但它装的是自己家的文件,公网地址别到处发,不用的时候可以在插件里把隧道关掉。
忘记管理员密码。 没配邮件服务时网页端找不回密码,可以在 NAS 上执行容器里的 reset-admin 脚本重置,具体命令见官方文档。