Pingvin Share 临时文件分享站本地跑通上传下载后用 cpolar 给客户一次性验收文件包有些交付文件不适合丢到公开网盘也没必要为了两三个同事临时验收去搭一套长期文件系统。我的做法很简单本地用 Pingvin Share 跑一个临时分享站上传一份脱敏演示包设置过期时间和访问密码再用 cpolar 开一个短时入口让对方把上传、下载、解压这条链路验完。这篇不做长期文件交换账号也不讲点对点快传更不拿它当文本粘贴板。重点就一个一次性链接、到期失效、带密码访问适合客户或同事临时验收文件包。先说清楚适用场景Pingvin Share 是一个开源的 Web 文件分享工具适合做“临时分享空间”。你可以通过浏览器上传 PDF、图片、压缩包然后生成分享链接给链接设置过期时间、访问密码、下载限制等策略。我会把它用在这类场景给客户验收一份脱敏安装包和截图集让测试同事下载某个演示压缩包让产品同事从外网检查上传、下载、密码访问是否顺畅临时确认交付目录结构而不是沉淀长期资料库。安全边界也要提前画好本文只使用示例 PDF、示例图片和示例 zip 包不上传真实合同、身份证、客户资料、生产日志、数据库备份。这个边界别含糊临时工具最怕被顺手拿去传敏感文件。准备目录和演示文件先在本机建一个干净目录只放 Pingvin Share 的数据不挂载宿主机的大目录不挂 NAS 后台目录也不挂任何包含真实资料的文件夹。mkdir -p ~/demo/pingvin-share cd ~/demo/pingvin-share mkdir -p data再准备三个演示文件。文件内容随便写名字要一眼看出是 demo避免后面误传真实材料。mkdir -p demo-files printf This is a demo PDF placeholder.\n demo-files/demo-readme.pdf printf fake image content for upload test\n demo-files/demo-screenshot.png zip -j demo-files/demo-delivery-package.zip demo-files/demo-readme.pdf demo-files/demo-screenshot.png这里的demo-screenshot.png只是演示占位文件。如果你要做更像真的验收包可以换成公开样例图片但不要放客户截图、合同扫描件、身份证照片、业务报表。用 Docker Compose 本地启动新建docker-compose.ymlservices: pingvin-share: image: stonith404/pingvin-share:latest container_name: pingvin-share-demo restart: unless-stopped ports: - 127.0.0.1:3000:3000 volumes: - ./data:/opt/app/backend/data注意这里端口写的是只绑定本机回环地址的形式。这代表 Web 服务只绑定本机回环地址。局域网其他机器不能直接扫到这个端口公网也不能直接访问。后面需要外部验收时再用 cpolar 单独开临时隧道。也不要为了省事挂载宿主机根目录、用户主目录、NAS 共享目录、Docker 控制接口或数据库目录。Pingvin Share 这里只需要自己的数据目录不需要碰宿主机文件系统里的其他东西。启动服务docker compose up -d看一下容器状态docker compose ps确认本地端口有响应curl -I http://127.0.0.1:3000浏览器打开http://127.0.0.1:3000首次进入后台时按页面提示创建演示管理员账号。这里不要写真实 admin 凭据也不要使用弱演示口令。建议用密码管理器生成一串强密码验收结束后再改掉。配置上传大小和过期时间进入后台后先把规则调成“临时验收”模式。不同版本的菜单名称会有细微差别核心配置关注这几项上传大小限制按演示包大小设置例如 200 MB分享过期时间例如 1 天或 2 小时是否允许访客上传只在验收需要时打开分享访问密码要求每个链接单独设置注册入口验收期间关闭公开注册管理员密码使用强密码不在聊天群里明文发送。我的习惯是先把演示包压到 50 MB 以内这样客户网络一般都能顺利下载也不会让临时隧道跑太久。文件大到几个 GB 时应该走正式交付流程不要硬塞给临时分享站。配置好后回到首页上传刚才准备的三个文件demo-readme.pdf demo-screenshot.png demo-delivery-package.zip创建分享时建议这样填分享名称demo-delivery-review过期时间当天验收结束后自动失效访问密码生成一串临时密码单独发给对方文件说明写清楚“仅用于上传下载链路验收文件均为脱敏示例”。这一步的目标不是让客户看到真实资料而是让对方确认链接能打开、密码能通过、文件能下载、zip 能解压、浏览器兼容性没问题。本地先完整跑一遍上传下载在开放外网前我建议先自己当一次客户把流程走完。打开分享链接输入访问密码下载demo-delivery-package.zip解压后确认里面只有演示 PDF 和演示图片。再测试一次上传入口如果你开启了访客上传就上传一个新的示例文件例如printf customer upload demo only\n demo-files/customer-upload-demo.txt上传完成后回到管理后台确认文件记录、下载次数和过期时间显示正常。这一步很关键。不要把没测过的链接直接发给客户不然对方点开报错你再临时排查容器、端口、密码、浏览器缓存会显得很狼狈。用 cpolar 临时开放 Web 入口本地确认没问题后再开 cpolar。由于 Pingvin Share 的 Web 端口只绑定在127.0.0.1:3000cpolar 只需要转发这个本地 Web 入口不涉及数据库端口也不涉及 Docker 控制接口。启动临时 HTTP 隧道cpolar http 3000命令启动后终端会显示一个公网访问地址形如https://xxxx.cpolar.top把这个地址和访问密码分开发给客户或同事。比如链接走工作群密码走单独私聊或者链接发邮件密码用即时消息发。不要把管理员账号、后台入口说明、服务器目录结构一起发出去。如果你需要固定域名可以在 cpolar 后台配置保留域名再把隧道指向127.0.0.1:3000。但本文这个场景是一次性验收临时随机地址更符合“短时开放”的定位。给客户的验收说明可以这样写为了减少沟通成本我一般会附一段很短的说明这是本次文件上传/下载链路验收地址 https://xxxx.cpolar.top 访问密码已单独发送。 请下载 demo-delivery-package.zip确认 1. 页面可以打开 2. 密码可以通过 3. zip 可以下载并解压 4. 如需测试上传请上传 demo 文件不要上传真实合同、身份证、客户资料。 该链接只在本次验收期间开放验收结束后会关闭。这段话看着啰嗦但它能挡住很多误操作。尤其是“不要上传真实合同、身份证、客户资料”要写出来不能只靠口头提醒。几个不要踩的坑第一个坑让服务监听所有网卡。临时验收没有必要让服务在局域网裸奔本机绑定127.0.0.1外部访问交给 cpolar 控制边界更清楚。第二个坑把演示目录挂到宿主机大目录。Compose 里只挂./data不要挂 NAS 根目录不要挂项目源码总目录不要挂数据库备份目录。第三个坑把数据库端口一起开放。这个教程没有公开数据库也不需要你开放 Redis、PostgreSQL、MySQL 等端口。客户只看 Web 页面其他端口都不该出现在验收链路里。第四个坑把 Docker 控制接口挂进容器。临时文件分享站不需要控制 Docker绝对不要把宿主机 Docker 管理能力交给 Web 服务。第五个坑验收结束忘记收尾。临时入口的价值在“开得快关得也快”。如果你让它开一整周那就不是临时验收了。验收结束后怎么关闭客户确认上传下载链路正常后先停掉 cpolar 隧道。前台运行时直接在终端按Ctrl C如果你用后台方式启动了 cpolar就按你的启动方式停止对应进程。然后回到 Pingvin Share 后台把演示分享删除确认文件列表里没有真实资料。容器也可以保留在本机等下次继续演示如果这次只是一次性测试直接停掉docker compose down如果要连演示数据一起清理再删除本地目录cd ~ rm -rf ~/demo/pingvin-share执行删除前看清路径别把自己的工作目录删了。临时开放后的收尾清单关闭 cpolar 隧道确认外部链接已经无法访问修改演示管理员账号密码不复用验收期间发过的密码删除 Pingvin Share 中的演示分享和演示文件确认上传区没有真实合同、身份证、客户资料、生产日志确认 Compose 仍然只绑定本机回环地址确认没有公开数据库端口没有公开 Docker 控制接口确认本次验收文件包已经脱敏后续正式交付走正式渠道。写在最后Pingvin Share 适合解决一个很具体的问题临时把一组文件通过 Web 链接交给别人验收并且能控制密码和过期时间。它不是长期账号体系也不是内部网盘替代品。我喜欢这种方案的原因也在这里本地 Docker 跑起来Web 端口锁在127.0.0.1需要外部访问时才用 cpolar 短时打开。验收完关隧道、删文件、改密码整个链路干净利落。只要你守住脱敏和短时开放这两条线它就是一个很顺手的客户验收小工具。