# 🚀 WorkTime 服务器部署指南

## 📋 概述

WorkTime应用现在支持服务器存储，让您可以在多台设备上同步数据。本指南将帮助您部署后端服务器。

## 🛠️ 服务器要求

- **Node.js**: 版本 14.0.0 或更高
- **内存**: 至少 512MB RAM
- **存储**: 至少 100MB 可用空间
- **网络**: 支持 HTTP/HTTPS 访问

## 📦 安装步骤

### 1. 安装依赖

```bash
# 安装服务器依赖
npm install express cors

# 或者使用提供的package.json
cp package-server.json package.json
npm install
```

### 2. 启动服务器

```bash
# 开发模式（自动重启）
npm run dev

# 生产模式
npm start
```

### 3. 验证安装

访问 `http://localhost:3001/api/health` 应该返回：
```json
{
  "status": "ok",
  "timestamp": "2024-01-01T00:00:00.000Z"
}
```

## 🌐 生产环境部署

### 使用 PM2（推荐）

```bash
# 安装PM2
npm install -g pm2

# 启动应用
pm2 start server.js --name worktime-server

# 设置开机自启
pm2 startup
pm2 save

# 查看状态
pm2 status
pm2 logs worktime-server
```

### 使用 Docker

```dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY server.js ./
EXPOSE 3001
CMD ["node", "server.js"]
```

```bash
# 构建镜像
docker build -t worktime-server .

# 运行容器
docker run -d -p 3001:3001 --name worktime-server worktime-server
```

### 使用 Nginx 反向代理

```nginx
server {
    listen 80;
    server_name your-domain.com;

    location /api/ {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
```

## 🔧 配置选项

### 环境变量

```bash
# 端口配置
PORT=3001

# 数据文件路径
DATA_FILE=/path/to/user-data.json

# CORS配置
CORS_ORIGIN=http://localhost:3000
```

### 数据文件位置

默认情况下，数据文件保存在 `user-data.json`。您可以修改 `DATA_FILE` 环境变量来更改位置。

## 🔒 安全考虑

### 1. 身份验证（可选）

如果需要多用户支持，可以添加简单的API密钥验证：

```javascript
// 在server.js中添加
const API_KEY = process.env.API_KEY || 'your-secret-key';

app.use('/api', (req, res, next) => {
  const key = req.headers['x-api-key'];
  if (key !== API_KEY) {
    return res.status(401).json({ error: '未授权访问' });
  }
  next();
});
```

### 2. HTTPS

在生产环境中，建议使用HTTPS：

```bash
# 使用Let's Encrypt
sudo certbot --nginx -d your-domain.com
```

### 3. 数据备份

定期备份 `user-data.json` 文件：

```bash
# 创建备份脚本
#!/bin/bash
cp user-data.json backup/user-data-$(date +%Y%m%d-%H%M%S).json
```

## 📊 监控和维护

### 日志监控

```bash
# 查看应用日志
pm2 logs worktime-server

# 查看错误日志
pm2 logs worktime-server --err
```

### 性能监控

```bash
# 查看资源使用情况
pm2 monit

# 查看详细统计
pm2 show worktime-server
```

### 数据备份

```bash
# 自动备份脚本
#!/bin/bash
BACKUP_DIR="/backup/worktime"
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p $BACKUP_DIR
cp user-data.json $BACKUP_DIR/user-data-$DATE.json

# 保留最近30天的备份
find $BACKUP_DIR -name "user-data-*.json" -mtime +30 -delete
```

## 🔄 更新和维护

### 更新应用

```bash
# 停止应用
pm2 stop worktime-server

# 更新代码
git pull origin main

# 安装新依赖
npm install

# 重启应用
pm2 restart worktime-server
```

### 数据迁移

如果需要迁移到新服务器：

1. 停止旧服务器
2. 复制 `user-data.json` 到新服务器
3. 启动新服务器
4. 更新前端配置中的服务器地址

## 🆘 故障排除

### 常见问题

1. **端口被占用**
   ```bash
   # 查看端口使用情况
   lsof -i :3001
   
   # 杀死占用进程
   kill -9 <PID>
   ```

2. **权限问题**
   ```bash
   # 确保有写入权限
   chmod 755 /path/to/data/directory
   ```

3. **内存不足**
   ```bash
   # 增加Node.js内存限制
   pm2 start server.js --name worktime-server --node-args="--max-old-space-size=1024"
   ```

### 联系支持

如果遇到问题，请检查：
- 服务器日志
- 网络连接
- 文件权限
- 磁盘空间

## 📝 许可证

本项目采用 MIT 许可证。 