# 呼籁旅行官网 · 部署步骤 部署到 `https://www.1814.love`。这是 **Nuxt 3 纯 SSR 应用**,要在服务器上重新构建。 > ⚠️ **访问/验收一律用 `www.1814.love`,别用裸域 `1814.love`**:裸域是双 A 记录(`1.182.108.58` + `47.105.95.198`),会漂移到 1.182 上的 Gitea;`www` 只解析到 47 的官网 nginx,才是正确入口。 ## 一键部署(推荐) 在 Git Bash 里: ```bash cd /d/work2/hulai-website/deployment bash deploy.sh # 部署 master 最新 bash deploy.sh <提交号> # 或部署指定提交 ``` 脚本自动做完:**备份数据库/.env → 服务器 `git pull` 最新代码 → `npm ci` + `npm run build` → 重启 PM2 → 验收**。 ## 线上形态(速查) | 项 | 值 | |---|---| | 应用所在服务器 | **`1.182.108.58`**(不是 47.105.95.198) | | 项目目录 | `/opt/gw/hulai-website`(是完整 git clone,分支 `master`) | | 框架 / 渲染 | Nuxt 3,**纯 SSR**(`nuxt build` 产物 `.output/server/index.mjs`) | | 运行 | PM2 `hulai-website`(fork,监听 `*:9005`,Node v20) | | 访问链路 | `1814.love`(47 nginx)→ `1.182.108.58:9002`(nginx)→ `127.0.0.1:9005`(PM2 node) | | Node 版本 | v20(`/usr/bin/node`,**不像筛选器要 v22**) | | nginx 配置 | 前端在 47 `hl-website.conf`;9002 在 1.182 `/etc/nginx/sites-available/gw` | ## ⚠️ 绝不覆盖的运行时数据(脚本已保护) | 数据 | 位置 | 说明 | |---|---|---| | SQLite 数据库 | `server/database/hulai.db*`(含 -wal/-shm) | 官网表单/内容数据,**在持续写入** | | 内容/上传图 | `public/images/` `public/uploads/` `public/旅拍照片/` | 用户上传与内容图,nginx 直接 alias 服务 | | 环境变量 | `.env`(可选) | 企业微信 webhook key,当前未配 | 部署用 `git pull` 更新代码,这些是 git 未跟踪或不受影响的运行时文件,不会被覆盖;脚本额外先备份数据库再动手。 ## 手动部署(不想用脚本时) ```bash ssh root@1.182.108.58 cd /opt/gw/hulai-website # 1. 备份数据库 cp -a server/database/ /root/hulai-db-bak-$(date +%s)/ # 2. 拉代码 + 构建 + 重启 git fetch origin && git checkout master && git pull --ff-only npm ci npm run build pm2 restart hulai-website && pm2 save # 3. 验收 curl http://127.0.0.1:9005/ curl https://www.1814.love/ ``` ## 回滚 ```bash ssh root@1.182.108.58 cd /opt/gw/hulai-website git checkout -q <旧提交号> npm run build pm2 restart hulai-website ``` ## 常见问题 - **官网打不开**:先 `ssh root@1.182.108.58 'pm2 status; curl 127.0.0.1:9005/'`;node 没起来或 9005 不通 → 重启 PM2。 - **改完没变化**:没重新 `npm run build` + `pm2 restart`。SSR 每次请求即时渲染,但必须 rebuild 才用新代码。 - **build 很慢/占内存**:Nuxt 全量 build 需几分钟,服务器内存够(31G),耐心等。 - **数据库相关功能异常**:确认 `server/database/hulai.db*` 没被部署动到(脚本已保护);异常时从 `.deploy-backups/<时间戳>/` 还原。 - **build 日志里 `/sitemap.xml` 报 `no such column: summary`**(已知既有问题,2026-08-18 确认与部署无关):`stories` 表的 drizzle schema 定义了 `summary` 列,但运行时数据库 `stories` 表**没有这一列**(用的是 `subtitle`/`seo_description`),sitemap 路由 `select()` 全列查询时撞错。只影响 `/sitemap.xml`(SEO),主站、表单、数据库都正常,对外 sitemap 有兜底返回 200。**属内容/开发侧要修的 schema 迁移问题,部署脚本不管、也不要手动去改生产库。**