# 部署指南

## 环境要求

服务器需安装 JDK 17+。无需安装 Node、Maven 或数据库。

## 首次部署

### 1. 在开发机上构建

```bash
./scripts/build.sh
```

产物为单个 JAR 文件：`backend/target/okr-performance-1.0.0.jar`

### 2. 上传到服务器

```bash
# 替换 your-server 为实际地址
scp backend/target/okr-performance-1.0.0.jar user@your-server:/opt/okr/
scp scripts/start.sh user@your-server:/opt/okr/
```

### 3. 启动

```bash
ssh user@your-server
cd /opt/okr
chmod +x start.sh
./start.sh
```

首次启动后自动在 `/opt/okr/data/` 下创建 `okr-performance.db`。

系统访问：`http://<服务器IP>:18080`  
默认账号：`admin` / `emoon123456`

### 4. 后台运行（推荐）

```bash
nohup java -jar okr-performance-1.0.0.jar > app.log 2>&1 &
```

---

## 代码升级

数据库文件 `data/okr-performance.db` 在 JAR 外部，升级只需替换 JAR，数据不受影响。

### 步骤

```bash
# 1. 在开发机重新构建
./scripts/build.sh

# 2. 上传新 JAR 到服务器
scp backend/target/okr-performance-1.0.0.jar user@your-server:/opt/okr/okr-performance-new.jar

# 3. 替换并重启
ssh user@your-server
cd /opt/okr

# 停止旧进程
pkill -f okr-performance

# 替换 JAR
mv okr-performance-new.jar okr-performance-1.0.0.jar

# 重新启动
nohup java -jar okr-performance-1.0.0.jar > app.log 2>&1 &
```

---

## 目录结构（服务器上）

```
/opt/okr/
├── okr-performance-1.0.0.jar   ← 唯一需要替换的文件
├── start.sh
├── app.log
└── data/
    └── okr-performance.db      ← 持久化数据，升级不会丢失
```

---

## 端口与反向代理

默认端口 18080。如需 80 端口，用 Nginx 反代：

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

    location / {
        proxy_pass http://127.0.0.1:18080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
```

---

## 备份数据库

```bash
# 定期备份 SQLite 文件即可
cp /opt/okr/data/okr-performance.db /opt/okr/data/okr-performance.db.$(date +%Y%m%d)
```

SQLite 使用 WAL 模式，直接复制文件是安全的。
