# 海河创意周总控台服务器部署说明

本目录提供可部署到普通 Linux 服务器的独立版本。页面与线上版本共用同一套 React 源码；结构化数据改为 SQLite，上传文件保存到服务器磁盘，不依赖 D1、R2 或特定托管平台。

## 一、建议配置

- Ubuntu 22.04 / 24.04；
- 2 核 CPU、4 GB 内存、40 GB 以上磁盘；
- Docker Engine 与 Docker Compose；
- 域名 `adw.top` 已解析到服务器公网 IP；
- 防火墙开放 80、443 端口，应用端口 3000 只监听本机。

## 二、Docker 部署（推荐）

1. 将完整源码上传到服务器，例如 `/opt/haihe-creative-week`。
2. 进入 `self-hosted` 目录，复制环境变量模板：

   ```bash
   cp .env.example .env
   ```

3. 修改 `.env`，至少替换登录账号和强密码：

   ```dotenv
   NODE_ENV=production
   APP_USERNAME=admin
   APP_PASSWORD=至少16位且不与其他系统重复的强密码
   ```

4. 构建并启动：

   ```bash
   docker compose up -d --build
   docker compose ps
   ```

5. 本机验证：

   ```bash
   curl http://127.0.0.1:3000/healthz
   ```

运行数据保存在 `self-hosted/data`，重建容器不会丢失。该目录须纳入服务器备份，但不得放入公开代码仓库。

## 三、Nginx 与域名

1. 安装 Nginx，将 `nginx-adw.top.conf.example` 复制到 `/etc/nginx/sites-available/adw.top`。
2. 启用配置并检查：

   ```bash
   sudo ln -s /etc/nginx/sites-available/adw.top /etc/nginx/sites-enabled/adw.top
   sudo nginx -t
   sudo systemctl reload nginx
   ```

3. 使用 Certbot 签发 HTTPS 证书：

   ```bash
   sudo certbot --nginx -d adw.top -d www.adw.top
   ```

## 四、不使用 Docker

服务器需安装 Node.js 22.13 或更高版本：

```bash
npm ci
npm run build:selfhosted
cp self-hosted/.env.example .env
set -a
. ./.env
set +a
npm run start:selfhosted
```

生产环境可参考 `haihe-creative-week.service.example` 配置 systemd。请确保运行用户对 `DATA_DIR` 具有读写权限。

## 五、数据与备份

- 数据库：`data/haihe-control.sqlite`；
- SQLite 日志：`data/haihe-control.sqlite-wal`、`data/haihe-control.sqlite-shm`；
- 上传文件：`data/uploads/`；
- 建议每天备份整个 `data` 目录，保留至少 30 天；
- 恢复时停止应用，用备份目录整体替换 `data` 后再启动。

## 六、上线检查

- 使用强密码访问首页；
- 五个工作包与 16 项首批任务正常显示；
- 新建任务并刷新页面，记录仍然存在；
- 切换任务状态并刷新，状态仍然存在；
- 上传一个测试文件，数据库与 `data/uploads` 均有记录；
- `https://adw.top` 证书有效，HTTP 自动跳转 HTTPS；
- 3000 端口未直接暴露到公网；
- 建立数据库和上传目录的定时备份。

## 七、两种版本的关系

根目录的原始版本继续使用 Sites / Cloudflare D1 / R2；`self-hosted` 是普通服务器部署层。二者共用 `app/page.tsx` 与 `app/globals.css`，页面改动只需维护一份。数据库数据不会自动在两套环境之间同步，如需迁移线上已有数据，应在切换域名前另行执行一次导出、导入和文件搬迁。
