呼籁旅行 - 甄选酒店(独立部署版 · 带后台管理)

本目录是 Kimi 版「呼籁旅行 - 甄选酒店」页面的完整复刻 + 内容管理系统。 已移除 Kimi 的 sdk-seed.js(Kimi 外链脚本,即"风险提示"弹窗/水印的来源), 页面本身的功能、文字、图片与样式与原文一致。

功能

  • 访客:打开首页直接浏览,无需登录,无任何干扰
  • 管理:隐藏入口 + 密码登录,可在后台对以下内容增删改查,保存后所有访客立即看到更新
    • 产品线:线路(南线/北线/南北线·满)+ 天数标签(5天4晚/6天5晚/7天6晚…),可增删改排序
    • 行程:每天入住的酒店(名称、房型、星级、年份、位置、床型、设施、餐饮)
    • 图片:每家酒店 3 张图(房间/外观/设施)、顶部主图,可直接上传替换/删除
    • 备选酒店:统一资料库,改一处自动同步到所有线路
    • 文字:站点标题、页脚、温馨提示等
    • 安全:自动历史备份(50 份)、一键恢复、导入/导出 JSON

目录结构

hulai-travel-site/
├── server.js            # 站点服务(零依赖 Node.js,启动它即可)
├── data.json            # 全部内容数据(后台维护的就是这个文件)
├── data.seed.json       # 初始数据底稿(后台「恢复为初始数据」用)
├── index.html           # 访客页面(服务端会注入最新数据)
├── admin.html/admin.js/admin.css   # 管理后台
├── assets/              # 前端构建产物(勿改)
├── hotels/              # 154 张酒店图片 + 上传的图片
├── config.json          # 首次启动自动生成,保存管理密码(哈希)
├── data-backups/        # 自动生成的历史备份
├── nginx.conf.example   # Nginx 反向代理示例(可选)
└── README.md
(运行时还会自动创建 hotels/_trash 图片回收目录)

部署

要求:服务器已安装 Node.js(16 及以上,无任何 npm 依赖)。

  1. 把整个目录上传到服务器,例如 /www/hulai-travel-site

  2. 进入目录执行:

    node server.js          # 直接前台运行
    # 或后台常驻(推荐,配合 PM2 / pm2 管理器):
    pm2 start server.js --name hulai-travel
    # 或 nohup node server.js > server.log 2>&1 &
    
  3. 访问 http://服务器IP:3000/ 即可(端口可用环境变量修改:PORT=8080 node server.js)

  4. 有域名的话,用 Nginx 反向代理到 3000 端口并配置 HTTPS,参考 nginx.conf.example

宝塔面板:选择「Node 项目」或直接 SSH 用 pm2 运行 server.js 即可。

管理入口(隐式,不影响客人)

三种方式任选:

  1. 访客页面上,连续快速点击页脚文字 5 次 → 自动跳转管理后台
  2. 直接访问 http://你的域名/admin.html
  3. 初始密码: qscy2014@@ (登录后可在「站点设置 → 修改管理密码」中修改;密码存在服务器 config.json, 忘记时删除 config.json 并重启服务,密码恢复为初始密码)

日常维护

  • 登录后台 → 左侧选择要维护的模块 → 修改 → 点右上角「保存并发布」→ 前台立即生效
  • 图片:每个图片位都有「上传 / 移除 / 占位图」按钮,上传前最好压到 2MB 以内
  • 误操作:备份与恢复里可一键恢复任意历史版本或初始数据
  • 所有修改都会先自动备份,放心改

关于 5 张图片的说明

原 Kimi 服务器上以下图片缺失(404 或 0 字节):百年俄式酒店 3 张、 友谊宾馆 1 张、旺泉宾馆 1 张(原页面这些位置本来就是裂图)。 这里已放置同风格占位图(标有"图片待补充")。有真实照片后, 直接在后台对应酒店处上传替换即可。

本地预览

node server.js
# 打开 http://localhost:3000/ ;管理后台 http://localhost:3000/admin.html
S
描述
呼籁旅行-甄选酒店(访客页+后台管理,零依赖Node)
自述文档
197 MiB
语言
JavaScript 82.4%
CSS 10.5%
HTML 5.2%
Shell 1.9%