## 起因
前阵子网上看到一篇帖子,作者做了个 Flash 游戏站,还分享了 20 多 G 的游戏资源(百度网盘链接)。
我对 Flash 游戏谈不上多狂热,但好奇心驱使下还是把资源下下来了。按教程拉了作者的 Docker 镜像,确实能用。
问题出在**游戏太多了**——那个项目没有搜索功能,几千个游戏全靠下拉滚动条翻。想找某个特定游戏,纯靠运气。
我试了好几次,手指滚累了也没找到想玩的那个。
---
## 于是自己写一个
**做了一个能搜的 Flash 游戏站。**
我本身是写 Java 后端的,前端不太熟练。但最近用 Codebuddy 写代码挺方便的,对话式开发,说需求它出代码。花了两天,凑合搞定了。
**核心就解决一个问题:搜索。**
其他顺手加的功能:
- 自动扫描:容器启动后自动扫描映射目录下的 SWF 文件,入库、分类,不用手动操作
- 首次安装引导:第一次打开网页设置管理员账号密码
- 前端锁:这个功能是我自己需要的——我把服务部署在家里 NAS 上,开了公网访问方便自己和朋友玩。但不想被爬虫或者别人扫到网址直接进来,所以加了密码锁,开启后访客必须输入密码才能看到内容
- 管理后台:改分类、重新扫描、编辑标签
---
## 首次启动
镜像拉起来之后浏览器打开对应端口,会自动跳到初始化页面。设好管理员账号和密码就行。
> 
同时这里可以决定要不要开"前端锁"——如果你也是部署在 NAS 上并且有公网访问需求,建议开着。
设完之后就能用了。游戏文件放进去会被自动扫描入库。
---
## 实际效果
我放了那篇帖子作者分享的 20G 资源,一共扫描进来了 **16882 个游戏**,自动分成了 16 个类别。
> 
首页长这样,支持按名字搜索、按分类筛选、按文件大小排序:
> 
16882 个游戏,以前得滚几百页才能看完的量,现在搜一下就出来了。
---
## 部署方式
我在 1Panel 里配的容器编排,挂载两个目录:一个放 SWF 游戏文件,一个存 SQLite 数据库。端口映射看你自己需要,我这里用的是 8035。
> 
Docker Compose 参考:
`yaml
services:
flash-games:
image: lookfuna666/flash-games:latest
container_name: flash-games
ports:
- "8035:3000"
volumes:
- /你的路径/game:/app/game
- /你的路径/data:/app/data
restart: unless-stopped
# 创建目录,放入 SWF 文件
mkdir -p game data
cp /你下载的游戏/*.swf ./game/
# 启动
docker compose up -d
游戏资源来源说明:我使用的 SWF 文件来自之前提到的那篇文章作者分享的百度网盘资源包,具体链接可以在原文中找到。
技术栈简单说下
| 部分 |
用了什么 |
| 前端 |
Vue 3 + Vite + Element Plus |
| Flash 引擎 |
Ruffle(自托管 WASM) |
| 后端 |
Express.js |
| 数据库 |
SQLite(sql.js,纯 WASM 无需编译) |
| 部署 |
Docker 单容器 |
没什么花哨的东西,就是实用。
相关链接
如果觉得有用,去 GitHub 点个 Star 就是对独立开发者最好的鼓励。