# Ether 项目部署指南

## 环境变量配置

### 开发/测试环境

开发环境使用 `.env.development` 文件，已预配置测试环境变量：

```bash
# ether-ui-admin/.env.development
VITE_API_BASE_URL=http://localhost:8080
VITE_ENCRYPT_SECRET_KEY=ether-test-2024-secret-key-32ch

# ether-app-owner/.env.development
# ether-app-employee/.env.development
VITE_API_BASE_URL=http://localhost:8080
```

### 生产环境

生产环境使用占位符，在部署时动态替换：

```bash
# .env.production 中的占位符
__VITE_API_BASE_URL__
__VITE_ENCRYPT_SECRET_KEY__
```

## 部署方式

### 方式一：使用部署脚本（推荐）

```bash
# 设置环境变量
export API_BASE_URL="https://api.your-domain.com"
export ENCRYPT_SECRET_KEY="your-32-char-secret-key"

# 执行构建（会自动替换环境变量）
./scripts/build.sh
```

### 方式二：Docker 部署

```dockerfile
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .

# 通过 build-arg 传入环境变量
ARG API_BASE_URL
ARG ENCRYPT_SECRET_KEY
ENV API_BASE_URL=${API_BASE_URL}
ENV ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY}

RUN chmod +x scripts/*.sh && ./scripts/build.sh

# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/ether-ui-admin/dist /usr/share/nginx/html
```

构建命令：
```bash
docker build \
  --build-arg API_BASE_URL="https://api.your-domain.com" \
  --build-arg ENCRYPT_SECRET_KEY="your-secret-key" \
  -t ether-admin .
```

### 方式三：Jenkins Pipeline

```groovy
pipeline {
    agent any
    environment {
        API_BASE_URL = credentials('prod-api-base-url')
        ENCRYPT_SECRET_KEY = credentials('prod-encrypt-secret-key')
    }
    stages {
        stage('Build') {
            steps {
                sh 'chmod +x scripts/*.sh'
                sh './scripts/build.sh'
            }
        }
        stage('Deploy') {
            steps {
                // 部署到服务器
            }
        }
    }
}
```

### 方式四：手动部署

```bash
# 1. 替换环境变量
./scripts/deploy-env.sh "https://api.your-domain.com" "your-secret-key"

# 2. 分别构建各项目
cd ether-ui-admin && npm ci && npm run build
cd ../ether-app-owner && npm ci && npm run build:h5
cd ../ether-app-employee && npm ci && npm run build:h5
```

## 安全注意事项

1. **切勿**将生产环境密钥提交到代码仓库
2. 使用 CI/CD 系统的 Secrets 管理敏感信息
3. `ENCRYPT_SECRET_KEY` 建议使用 32 位以上随机字符串
4. 定期轮换密钥
