Plik 1.4.3 Docker Compose 部署指南
用官方镜像从零部署 Plik 1.4.3 临时文件上传服务:compose 项目名与 10.89.60.0/24 网段隔离、plikd.cfg 与 data 双挂载持久化、首启自动创建管理员、CLI 上传下载与重启持久化全链路实测,含数据目录权限等排障实录。
Plik 1.4.3 Docker Compose 部署指南
目标:在一台 Ubuntu 22.04 服务器上,用官方 Docker 镜像从零部署 Plik 1.4.3 临时文件上传服务,完成配置文件挂载、数据持久化、服务启动、Web 管理员登录、CLI 上传下载与重启持久化验证的全链路实测。全部命令与回显均在 2026-10-31 于 Ubuntu 22.04 实机实测通过。
一、环境信息
本文实测所用的服务器环境与软件版本如下(查询/实测日期 2026-10-31):
- 操作系统:Ubuntu 22.04(x86_64)
- Plik 版本:1.4.3(官方最新稳定版,来源 shields.io 仓库 tag 徽章与 GitHub Releases/latest 重定向双渠道实查,查询日期 2026-10-31)
- Docker:24.x 与 Docker Compose v2(
docker compose子命令形态) - 官方镜像:
rootgg/plik:1.4.3(镜像内以专用账号 plik 运行服务,实测其 uid/gid 均为 1000) - Web 对外端口:8132(映射到栈内服务的 8080 端口;官方默认 8080,本文按端口规划改映射)
- 自定义网络:
plik-1.4.3-net(10.89.60.0/24) - 数据目录:部署目录下
plikd.cfg(服务端配置文件)与data/(元数据库 + 文件存储)两个挂载点 - 管理员账号:
admin/q1w2e3r4(由配置文件DefaultAdminLogin/DefaultAdminPassword首次启动自动创建) - 组件背景与选型对比见 《Plik 介绍与选型指南》
二、镜像选型说明
Plik 官方在 Docker Hub 维护 rootgg/plik 镜像(来源:仓库 README 安装章节与 Docker Hub 页面,查询日期 2026-10-31),选择该镜像的理由:
- 官方出品:由 root-gg 团队随版本发布构建,与源码同源;
- 单容器全功能:一个镜像内含 plikd 服务端进程、Vue 3 Web 界面静态资源与各平台客户端二进制,Web 上传、API、客户端自更新开箱可用;
- 配置外置:镜像约定读取
/home/plik/server/plikd.cfg配置文件,配合 bind mount 即可实现配置与数据的完整持久化。
版本 tag 选择:生产环境固定使用明确的版本号 1.4.3 而非 latest,保证升级是显式动作。镜像内运行账号为 plik(uid/gid 1000,实测 id 命令回显 uid=1000(plik) gid=1000(plik)),这决定了挂载数据目录的宿主权限要求(见「常见问题」)。
三、前置条件
- 一台 x86_64 的 Ubuntu 22.04 服务器,具备 sudo 权限;
- 已安装 Docker Engine 与 Docker Compose v2;
- 对外服务端口未被占用(本文取 8132,可用
ss -ltn自查); - 磁盘剩余空间:镜像约 100MB 量级,另需为
data/预留业务文件容量(受配置MaxFileSizeStr单文件上限约束,默认 10GB/文件); - 服务器可访问 Docker Hub 拉取官方镜像。
确认环境:
docker compose version
实测回显:
Docker Compose version v2.29.7
ss -ltn | grep 8132 || echo "8132 free"
实测回显:
8132 free
四、部署步骤
本节从空目录开始:创建目录 → 编写配置与编排文件 → 启动 → 验证健康与版本 → Web 登录 → CLI 全链路上传下载。
4.1 创建部署目录
mkdir -p /opt/plik && cd /opt/plik
目录建立后,本节的两个配置文件 plikd.cfg 与 docker-compose.yml 都放在这里,data/ 子目录由服务首次启动自动生成。
4.2 编写服务端配置文件 plikd.cfg
从官方发行包可以取得完整注释版配置文件(官方镜像内亦有同款样例)。本文使用一份最小化但覆盖关键项的配置(完整参数逐项详解见《Plik 1.4.3 配置参数详解》):
vim plikd.cfg
写入以下内容:
ListenPort = 8080 # 服务监听端口(容器内端口,经映射对外为 8132)
ListenAddress = "0.0.0.0" # 监听地址
MaxFileSizeStr = "10GB" # 单文件大小上限
MaxFilePerUpload = 1000 # 单次上传文件数上限
DefaultTTLStr = "30d" # 上传默认有效期
MaxTTLStr = "30d" # 上传有效期上限(0 = 不限)
FeatureAuthentication = "enabled" # 启用账号认证体系
FeatureLocalLogin = "enabled" # 启用本地登录表单
DefaultAdminLogin = "admin" # 首次启动自动创建的管理员账号
DefaultAdminPassword = "q1w2e3r4" # 管理员密码(生产环境请改为强口令)
DataBackend = "file" # 文件内容存储:本地文件系统
[DataBackendConfig]
Directory = "/home/plik/server/data/files"
[MetadataBackendConfig]
Driver = "sqlite3" # 元数据存储:内嵌 SQLite
ConnectionString = "/home/plik/server/data/plik.db"
配置要点逐项说明:
ListenPort/ListenAddress:容器内监听 8080 的 0.0.0.0,与编排文件的端口映射配合,无需在配置里出现宿主端口;DefaultAdminLogin/DefaultAdminPassword:首次启动时服务端自动创建该管理员账号;若留空密码则生成随机密码并打印在启动日志里(实测显示密码为空时日志提示生成随机口令,本文显式指定以便演示);DataBackend/MetadataBackendConfig:两个平面的存储路径都收敛到/home/plik/server/data/下,与编排文件的 data 挂载点对应,重启/重建后数据不丢。
4.3 编写 docker-compose.yml
创建 docker-compose.yml(在官方范式基础上补了显式项目名与自定义网段,避免多套部署互相干扰):
name: plik-1.4.3-stack
services:
plik:
image: rootgg/plik:1.4.3
container_name: plik-1.4.3-server
volumes:
- ./plikd.cfg:/home/plik/server/plikd.cfg:ro
- ./data:/home/plik/server/data
ports:
- "8132:8080"
networks:
plik-net:
restart: unless-stopped
networks:
plik-net:
name: plik-1.4.3-net
driver: bridge
ipam:
config:
- subnet: 10.89.60.0/24
逐项说明:
name: plik-1.4.3-stack:显式 Compose 项目名,多套 Plik 或其他服务的 compose 项目并存时,down只会作用于本项目,防止误删他人栈;volumes第一行:配置文件只读挂载(:ro),服务端每次启动读取;改配置后需重启服务生效;volumes第二行:数据目录 bind mount,承载 SQLite 元数据库与上传文件,是实现持久化的关键;ports "8132:8080":宿主 8132 → 容器内 8080;networks:自定义 bridge 网段 10.89.60.0/24,与其他服务网段隔离;restart: unless-stopped:随宿主开机自动拉起(手动停止的除外)。
4.4 启动服务栈
docker compose up -d
实测回显:
[+] Running 3/3
✔ Network plik-1.4.3-net Created
✔ Container plik-1.4.3-server Created
✔ Container plik-1.4.3-server Started
首次启动的关键日志(实测 docker compose logs plik,全新空数据目录):
[10/31/2026 01:31:09][INFO ] Starting plikd server v1.4.3
[10/31/2026 01:31:10][INFO ] Created default admin user 'admin'
[10/31/2026 01:31:10][INFO ] Starting server at http://[::]:8080
[10/31/2026 01:31:10][INFO ] Will clean old uploads in 340 seconds.
日志逐行解读:第一行确认版本;第二行即管理员账号 admin 的自动创建(此后再次重启会显示 Default admin user 'admin' already exists, skipping creation,实测回显);第三行确认容器内 8080 监听;第四行表明过期清理定时任务已排程。
4.5 验证服务健康与版本
curl -s http://127.0.0.1:8132/health
实测回显:
ok
curl -s http://127.0.0.1:8132/version
实测回显(输出节选,实测首尾):
{"version":"1.4.3","date":0,"isRelease":false,"isMint":false,"clients":[{"name":"Bash (curl) ","md5":"546e2316fa5abe1b01b86a97ea803d98","path":"clients/bash/plik.sh","os":"bash","arch":"bash"},{"name":"MacOS 64bit","md5":"b8b47378408cc7a8aa524deeee345709","path":"clients/darwin-amd64/plik","os":"darwin","arch":"amd64"} ... {"name":"Windows 64bit","md5":"5b1f9cdb11139a7619ff02f3c35a1650635587b61b1164f349fce59561423676","path":"clients/windows-amd64/plik.exe","os":"windows","arch":"amd64"}]}
/version 同时回带各平台客户端清单,Web 界面的「下载客户端」按钮与 CLI 的 --update 自更新都依赖这份清单。再确认运行状态:
docker compose ps
实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
plik-1.4.3-server rootgg/plik:1.4.3 "./plikd" plik Less than a second ago Up Less than a second 0.0.0.0:8132->8080/tcp, [::]:8132->8080/tcp
4.6 Web 界面登录验证
浏览器打开 http://<服务器IP>:8132,即可看到 Plik 的 Web 上传界面。点击界面右上角登录入口,使用管理员账号 admin / q1w2e3r4 登录(账号来自 4.2 节配置文件的 DefaultAdminLogin/DefaultAdminPassword)。登录后:
- 右上角出现用户菜单,可创建 API Token(供 CLI 认证使用);
- 个人中心可查看自己的上传历史并随时删除;
- 匿名访客依然可以直接在首页拖拽上传(由
FeatureAuthentication = "enabled"的语义决定:认证可用但不强制,如需强制仅登录用户上传,可改为forced,见配置详解篇)。
浏览器验证之外,命令行侧也可确认认证体系生效:服务未开启任何强制认证策略时,匿名上传可用;这是下一节 CLI 验证的前提。
4.7 CLI 上传下载全链路验证
在服务器上安装 Plik 命令行客户端(安装步骤与子命令全解见《Plik 1.4.3 常用 CLI 命令详解》,此处仅做部署验收),对 8132 端口做一次端到端上传:
echo "plik-143-deploy-check-2026-10-31" > deploy-check.txt
plik --server http://127.0.0.1:8132 deploy-check.txt
实测回显:
Upload successfully created at Sat, 31 Oct 2026 01:16:20 UTC :
http://127.0.0.1:8132/#/?id=38hO6tkNlpGQP8Ap
✅ deploy-check.txt : 33 B / 33 B 100.00% 2.26 KiB/s 0s
Commands :
curl -s "http://127.0.0.1:8132/file/38hO6tkNlpGQP8Ap/KvuX0T1p5zvL0JkK/deploy-check.txt" > 'deploy-check.txt'
按客户端给出的下载命令验证下载:
curl -s "http://127.0.0.1:8132/file/38hO6tkNlpGQP8Ap/KvuX0T1p5zvL0JkK/deploy-check.txt"
实测回显:
plik-143-deploy-check-2026-10-31
内容原样返回,服务端「上传—下载」链路验收通过。
五、数据持久化说明
Plik 的全部状态集中在 data/ 一个目录里(由 4.2 节配置决定):
data/
├── plik.db # SQLite 元数据库(用户/令牌/上传会话/文件元数据)
├── plik.db-shm # SQLite WAL 伴随文件
├── plik.db-wal
└── files/ # 文件内容目录(file 数据后端,按上传 ID 前缀分桶存放)
重启验证(实测):先记录一个已上传文件的下载命令,重启整个服务栈后再下载:
docker compose restart plik
实测回显:
Container plik-1.4.3-server Stopping
Container plik-1.4.3-server Error response from daemon: ...
Container plik-1.4.3-server Stopped
Container plik-1.4.3-server Started
重启后再次执行同一下载命令:
curl -s "http://127.0.0.1:8132/file/<上传ID>/<文件ID>/persist-check.txt"
实测回显:
persistence-check-2026-10-31-plik
重启后文件内容原样可取,管理员账号无需重建,证明 data/ 挂载点完整承载了持久化。
⚠️ 注意:
data/目录的宿主属主需与镜像内运行账号(plik,uid/gid 1000)匹配或对其可写,否则服务启动会报数据库无法打开错误,排障过程见「常见问题」。
六、环境变量表
Plik 的官方镜像不走环境变量配置路线,服务端行为全部由挂载的 plikd.cfg 驱动(这是它与多数自托管服务的差异点):镜像未定义可覆盖服务行为的 ENV 清单,配置变更一律改 plikd.cfg 后重启服务生效。唯一需要理解的「伪环境变量」是编排层的端口映射 8132:8080——宿主端口在编排文件里改,服务端口在 plikd.cfg 的 ListenPort 里改,二者独立。
七、配置参数说明
plikd.cfg 是 Plik 的单一配置入口,覆盖 HTTP 监听、TLS、上传限制、TTL、功能开关(Feature 四态)、认证提供方、数据/元数据后端等九大类参数。本文 4.2 节给出的是最小可用集;完整参数总览、四态语义与逐项实测验证见《Plik 1.4.3 配置参数详解》。常用速查:
| 参数 | 默认值 | 作用 |
|---|---|---|
ListenPort / ListenAddress | 8080 / 0.0.0.0 | 服务监听 |
MaxFileSizeStr | 10GB | 单文件大小上限(unlimited 不限) |
DefaultTTLStr / MaxTTLStr | 30d / 30d | 上传默认/最大有效期 |
FeatureAuthentication | enabled | 认证四态开关 |
DefaultAdminLogin / DefaultAdminPassword | admin / 空(随机) | 首启管理员 |
DataBackend | file | 数据后端(file/S3/Swift/GCS) |
八、配置文件挂载
配置挂载的三条实践要点:
- 只读挂载:
./plikd.cfg:/home/plik/server/plikd.cfg:ro,防止服务进程意外改写配置; - 改配置必须重启:
plikd仅在启动时读取配置,docker compose restart plik后用plik -i查看生效配置做确认(该验证手法在配置详解篇有逐参数实测); - 保持原始注释:官方发行包样例
plikd.cfg带逐行注释,建议在注释版上增量修改,升级版本时便于 diff 官方样例发现新增参数。
九、等价 docker run
不使用 Compose 时,以下单条 docker run 与 4.3 节编排等价(持久化与重启策略一致):
docker run -d \
--name plik-1.4.3-server \
--restart unless-stopped \
-p 8132:8080 \
-v /opt/plik/plikd.cfg:/home/plik/server/plikd.cfg:ro \
-v /opt/plik/data:/home/plik/server/data \
rootgg/plik:1.4.3
多套部署并存时建议继续使用 Compose 项目名隔离;单机单实例用 docker run 亦可。注意 Compose 创建的 plik-1.4.3-net 网络与 docker run 默认 bridge 不互通,两种方式不要混用于同一套数据目录。
十、常用运维命令
docker compose ps # 查看服务栈状态
docker compose logs -f plik # 跟随查看服务日志(Ctrl+C 退出)
docker compose restart plik # 重启服务(改配置后执行)
docker compose down # 停止并移除服务栈(网络一并移除,data/ 保留)
docker compose up -d # 重新拉起服务栈
down 不会删除 bind mount 的 data/ 目录,元数据与文件都在;如需彻底清空重来,手动删除 data/ 后再 up -d,服务会重新初始化数据库并重建管理员账号。
十一、常见问题(FAQ)
Q1:启动报 unable to open database file: no such file or directory 怎么办?
实测现象:全新部署后服务反复重启,日志滚动输出:
unable to start Plik server : unable to initialize metadata backend : Unable to open database : unable to open database file: no such file or directory
定位:SQLite 需要在 data/ 目录内创建 plik.db;镜像内服务以 plik 账号(uid/gid 1000)运行,宿主 data/ 目录对 uid 1000 不可写时创建失败。解决(任选其一,实测有效):
chown -R 1000:1000 /opt/plik/data # 或
chmod 777 /opt/plik/data
修复后 docker compose up -d 正常启动,日志出现 Created default admin user 'admin'。
Q2:改了 plikd.cfg 为什么不生效?
plikd 启动时一次性读取配置。修改后必须 docker compose restart plik,再用 plik -i(查看服务端配置摘要)或观察行为变化确认。验证方法与逐参数实测回显见配置详解篇。
Q3:上传时报 invalid TTL. (maximum allowed is : ...)?
客户端 -t 设置的时长超过了服务端 MaxTTLStr(或当前认证用户被 max-ttl 用户级限额约束)。实测:服务端 MaxTTLStr = "30d" 时 -t 45d 报 unable to create upload: 400 Bad Request : unable to create upload : invalid TTL. (maximum allowed is : 2592000)(2592000 秒 = 30 天)。按需调大服务端上限或改小 -t。
Q4:端口 8132 被其他服务占了怎么办?
改编排文件 ports 左侧宿主端口为空闲端口(ss -ltn 自查),docker compose up -d 重建生效;容器内 8080 与 ListenPort 无需动。
Q5:忘记 admin 密码怎么办?
在服务器上用服务端管理命令重置(需进入部署目录,命令用法详见《Plik 1.4.3 常用 CLI 命令详解》服务端小节):
./plikd user update --login admin --password <新口令>
十二、参考链接
- Plik 官方文档站:https://root-gg.github.io/plik
- GitHub 仓库:https://github.com/root-gg/plik
- 官方 Docker 镜像:https://hub.docker.com/r/rootgg/plik
- 本系列认知篇:《Plik 介绍与选型指南》
- 本系列配置篇:《Plik 1.4.3 配置参数详解》
- 本系列命令篇:《Plik 1.4.3 常用 CLI 命令详解》