PassNAT LogoPassNAT

年会抽奖自己搭:飞牛 NAS 用一个容器装 log-lottery,3D 球抽奖、Excel 导名单,配内网穿透在会场直接打开

作者

小编

发布时间

Curving abstract shapes with an orange and blue gradient

项目介绍

log-lottery 是一个开源的抽奖页面,专门冲着年会去的:参与的人变成一张张名字卡片,贴满一个会转的 3D 球,按下开始球就飞速转起来,再点一下,中奖的人从球里弹出来,满屏撒彩带。投到会场大屏上,气氛一下就有了。

它能配的东西很全:参与名单用 Excel 导入,奖项可以自己定名字和人数,主标题、背景、卡片颜色都能改,现场还能临时加一个奖项;抽完之后,中奖名单可以导出成一张 Excel 表留档。

项目地址:LOG1997/log-lottery(MIT 协议)

🔴 先说一件决定怎么用它的事:名单存在浏览器里

log-lottery 没有后端,容器里跑的只是一个发静态页面的 nginx。你导入的名单、设好的奖项、改过的标题、抽出来的结果,全都存在打开它的那个浏览器里(IndexedDB 和 localStorage),不在 NAS 上。

这带来两个直接的结果:换一台电脑、换一个浏览器、或者清了浏览器缓存,打开看到的都是空的;反过来,别人就算拿到了你的地址,打开也只是他自己浏览器里的一份空页面,看不到你的名单。

所以用法很简单:在哪台电脑上导入名单,就在哪台电脑上抽。年会前一两天,直接在会场要接投影的那台电脑上把名单、奖项、标题配好,当天打开就能用;抽完记得点「导出结果」把中奖名单存一份。

部署安装

装好之后它默认只有家里的网络能打开,可年会一般是在公司或者酒店开的,会场的电脑连不到你家的局域网。家里没有公网 IP 的话,可以用 帕斯内网穿透 把它开放到公网,飞牛的应用中心里就能直接装到插件。具体操作可以参考 这份全平台上手指南。下面这套流程在飞牛 NAS 上从头到尾走一遍。

第一步:准备编排文件

下面这份编排可以直接用,只有一处需要按自己的情况改:冒号左边的宿主端口。

1services:
2 log-lottery:
3 image: log1997/log-lottery:latest
4 container_name: log-lottery
5 ports:
6 - "3426:80"
7 restart: unless-stopped
8

端口:冒号左边的 3426 是待会儿在浏览器里输的宿主端口,也是建隧道时要填的那个;右边的 80 是容器里 nginx 监听的端口,不要动。3426 如果被别的容器占了,换一个没用过的即可。

这份编排没有挂载任何目录,也没有环境变量 —— 这不是漏写了。前面说过,它的数据全在浏览器里,服务端没有任何要保存的东西,删了容器重建也不会丢名单(名单本来就不在这儿)。

第二步:在飞牛上建 Compose 项目

打开飞牛的 Docker 应用,切到 Compose,点右上角的新增项目。项目名称填 lottery。

路径这一栏点开,在「我的文件」下面挑一个空文件夹选中。

来源选「创建 docker-compose.yml」,把上面那份编排整段贴进去。

「创建项目后立即启动」勾上,再点「确认」。镜像八十来兆,拉完它自己就跑起来,状态会变成正在运行。

⚠ 第三步:打开的时候地址后面要带上 /log-lottery/

在家里的网络上打开 http://你的NAS地址:3426/log-lottery/ —— 注意最后这一段不能省。

原因在镜像本身:应用放在 /log-lottery/ 这个子路径下,访问根路径时 nginx 会跳转过去,但它拼跳转地址时用的是容器里自己监听的 80 端口,经过 3426 映射之后,跳过去的地址就把端口弄丢了,打不开。直接带上 /log-lottery/ 就绕开了这个跳转,一次到位。

第一次打开是空的,页面中间有「暂无人员信息,前往导入」和「使用默认数据」两个按钮。默认数据是作者放的一份演示名单,看看效果可以,正式用还是导入自己的。

第四步:用内网穿透开放到公网

在飞牛的应用中心里搜 PassNAT,装上,账号登一次。打开插件点创建隧道:名字随便起;传输协议选 HTTP;本地 IP 留空就好,默认就是 127.0.0.1;本地端口填上面那个 3426。

选 HTTP 是因为选了它之后表单上会多出「子域名」和一个顶级域名的下拉 —— 填一个没人用过的子域名、在下拉里挑一个顶级域名,拿到的公网地址就是一个网址,在会场电脑上敲起来方便。子域名是全平台唯一的,填一个太常见的词多半会提示已存在,换一个就行。

表单上的「网页访问用户名 / 密码」这一期可以留空:log-lottery 没有服务端数据,谁打开都只是他自己浏览器里的一份空页面。

建好之后点开详情按一下电源,转成运行中,面板上那个网址就是公网地址。在会场电脑上打开它的时候,同样在后面加上 /log-lottery/。

怎么用

导入名单

右侧齿轮进配置,或者直接点首页的「前往导入」,到人员配置。

先点「下载模板」拿到一张 Excel,表头是 uid、name、avatar、department、identity 五列,分别是编号、姓名、头像、部门、身份。模板里写明了表头不能改,照着往下填就行。

头像那一列可以留空(模板示例里那一列是网络图片地址,留空卡片上就只显示名字)。编号随便编,别重复就好。

填好之后点「导入数据」,选这张表,名单立刻出现在下面的列表里,右上角「中奖人数 0 / N」的 N 就是总人数。

改标题

全局配置下的「界面设置」,第一项「主标题」改成你们年会的名字,首页顶上那行大字就变了。同一页还能改卡片的列数、尺寸、颜色、主题和背景图。

设奖项

到「奖品配置」。出厂自带五个奖项,可以直接改,也可以「删除全部」之后自己一个个「添加」。

⚠ 「删除全部」点下去是没有确认框的,直接就删了,点之前想清楚。

每个奖项能设的:名称;抽奖人数(这一项一共抽几个人);可重复(已经中过奖的人还能不能再抽到);单次抽取个数(人数多的奖项可以分几次抽,比如 10 个人每次抽 5 个);图片。左边的点点图标可以拖动调整顺序,抽奖是从列表第一个往下抽的,所以一般把小奖放前面、大奖放最后。

关于奖项图片:出厂那几个奖项的图片是从作者的网站加载的,网络不通的时候会显示成一个破图标。建议在「图片管理」里上传自己的奖品照片,再回奖品配置里给每个奖项选上;新添加的奖项默认不指图片,首页上显示的是它自带的一个小图标。

开抽

回首页,点「进入抽奖」,卡片墙会合成一个球。按「开始」球就转起来,再点「抽取幸运儿」,这一轮中奖的人就从球里弹出来。🔴 弹出来之后要点「继续」,这一轮才算数:中奖的人记进中奖名单,左边奖项列表上的计数跟着变(比如 0/3 变成 3/3)。点「取消」则整轮作废,谁都不记,可以重抽。

抽奖页面里左边奖项列表旁边有个「+」,可以现场临时加一项抽奖,适合老板临时加码的场面。

看结果、导出

抽过的人都在「中奖人员」里,每个人中了什么奖一目了然;需要的话可以把某个人移回未中奖名单。回到「人员列表」点「导出结果」,就能导出一张带中奖信息的 Excel。

一点使用上的提醒

作者建议用电脑上的最新版 Chrome 或 Edge 打开,3D 球在这两个浏览器上最顺。投到大屏上的时候按 F11 让浏览器全屏,效果更好。

再强调一次:名单存在浏览器里。年会当天别临时换电脑,也别在那台电脑上清浏览器缓存;真要换,就在新电脑上重新导入一遍名单、配一遍奖项,几分钟的事。

写在最后

一个容器、一条隧道,年会抽奖就不用再求人做页面了。年会快到了,先装好,提前在会场电脑上配一遍,当天打开就能抽。