# Cloudpods 后端部署指南

## 一、环境要求

### 1. 系统要求
- **操作系统**: Linux (CentOS 7/8, Ubuntu 18.04/20.04/22.04)
- **CPU**: 4核及以上
- **内存**: 8GB及以上
- **磁盘**: 50GB及以上可用空间

### 2. 软件依赖
- **MySQL**: 5.7 或 8.0
- **Go**: 1.21 或更高版本（如需编译）

## 二、部署前准备

### 1. 安装 MySQL
```bash
# CentOS/RHEL
sudo yum install -y mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
```

### 2. 创建数据库
```bash
# 登录 MySQL
mysql -u root -p

# 创建数据库
CREATE DATABASE yunioncloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 创建用户（可选，也可以使用 root）
CREATE USER 'yunion'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON yunioncloud.* TO 'yunion'@'%';
FLUSH PRIVILEGES;
EXIT;
```

### 3. 配置环境变量
创建 `.env` 文件：
```bash
cd /opt/cloudpods/backend
cat > .env << 'EOF'
# 数据库配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=yunion
DB_PASSWORD=your_password
DB_NAME=yunioncloud

# 管理员配置
ADMIN_USER=sysadmin
ADMIN_PASSWORD=admin@123
ADMIN_PROJECT=system
ADMIN_DOMAIN=Default
REGION_NAME=region0
EOF
```

## 三、部署方式

### 方式一：使用预编译二进制（推荐）

#### 1. 下载二进制包
```bash
# 创建部署目录
mkdir -p /opt/cloudpods
cd /opt/cloudpods

# 下载二进制包（从 CI/CD 或 Release 页面）
wget https://your-ci-server/cloudpods-backend-linux-amd64.tar.gz
tar -xzf cloudpods-backend-linux-amd64.tar.gz
```

#### 2. 执行部署脚本
```bash
cd /opt/cloudpods/backend

# 执行初始化（首次部署）
./init-cloudpods.sh

# 或跳过确认直接部署
./init-cloudpods.sh --skip-confirm
```

### 方式二：源码编译部署

#### 1. 安装 Go
```bash
# 下载 Go
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz

# 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
```

#### 2. 克隆代码并编译
```bash
cd /opt
git clone https://github.com/your-org/cloudpods.git
cd cloudpods/backend

# 编译所有服务
make all

# 或只编译特定服务
make cmd/keystone cmd/region cmd/glance cmd/yunionconf cmd/scheduledtask cmd/apigateway
```

#### 3. 执行部署
```bash
./init-cloudpods.sh
```

## 四、服务管理

### 查看服务状态
```bash
cd /opt/cloudpods/backend

# 查看所有服务进程
ps aux | grep -E 'keystone|region|glance|yunionconf|scheduledtask|apigateway'

# 查看服务端口
netstat -tlnp | grep -E '30500|30889|9292|30888|30950|3000'
```

### 启动/停止服务
```bash
# 停止所有服务
./stop-backend.sh

# 启动服务（开发模式，不重置数据）
./start-dev.sh

# 完全重置并重新初始化（会删除数据库）
./init-cloudpods.sh
```

### 查看日志
```bash
# 实时查看所有日志
tail -f logs/*.log

# 查看特定服务日志
tail -f logs/keystone.log
tail -f logs/region.log
```

## 五、配置文件说明

### init-config.env（可选）
如需自定义配置，创建此文件：
```bash
cat > init-config.env << 'EOF'
# 数据库配置
DB_HOST=192.168.1.100
DB_PORT=3306
DB_USER=cloudpods
DB_PASSWORD=SecurePass123!
DB_NAME=yunioncloud

# 服务端口（如有端口冲突可修改）
KEYSTONE_PORT=30500
REGION_PORT=30889
GLANCE_PORT=9292
YUNIONCONF_PORT=30888
SCHEDULEDTASK_PORT=30950
APIGATEWAY_PORT=3000

# 管理员账号
ADMIN_USER=admin
ADMIN_PASSWORD=YourSecurePassword
ADMIN_PROJECT=system
ADMIN_DOMAIN=Default
REGION_NAME=region0
EOF
```

然后执行：
```bash
./init-cloudpods.sh --config init-config.env
```

## 六、健康检查

### 1. 检查服务是否正常运行
```bash
# Keystone
curl http://localhost:30500/v3

# APIGateway
curl http://localhost:3000/api/v1/rpc/parameters/global-settings

# Region
curl http://localhost:30889/regions
```

### 2. 使用 climc 检查
```bash
export OS_AUTH_URL=http://127.0.0.1:30500/v3
export OS_USERNAME=sysadmin
export OS_PASSWORD=admin@123
export OS_DOMAIN_NAME=Default
export OS_PROJECT_NAME=system

# 查看 region 列表
./_output/bin/climc region-list

# 查看服务列表
./_output/bin/climc service-list

# 查看 endpoint 列表
./_output/bin/climc endpoint-list
```

## 七、常见问题

### 1. 端口冲突
如果提示端口被占用，修改 `init-config.env` 中的端口配置。

### 2. 数据库连接失败
检查：
- MySQL 服务是否运行：`systemctl status mysql`
- 数据库用户权限是否正确
- 防火墙是否放行 MySQL 端口

### 3. 服务启动失败
查看对应服务的日志：
```bash
tail -f logs/keystone.log
```

## 八、系统服务化（可选）

如需将服务注册为 systemd 服务，创建 `/etc/systemd/system/cloudpods-backend.service`：

```ini
[Unit]
Description=Cloudpods Backend Services
After=network.target mysql.service

[Service]
Type=forking
User=cloudpods
Group=cloudpods
WorkingDirectory=/opt/cloudpods/backend
ExecStart=/opt/cloudpods/backend/start-dev.sh
ExecStop=/opt/cloudpods/backend/stop-backend.sh
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
```

启用服务：
```bash
sudo systemctl daemon-reload
sudo systemctl enable cloudpods-backend
sudo systemctl start cloudpods-backend
sudo systemctl status cloudpods-backend
```

## 九、前端配置

前端需要配置 API 地址，修改前端项目的 `.env` 文件：
```bash
# 前端项目根目录
cat > .env << 'EOF'
VUE_APP_API_URL=http://your-server-ip:3000
EOF
```

然后构建并部署前端。

## 十、安全建议

1. **修改默认密码**: 部署后立即修改 sysadmin 密码
2. **使用 HTTPS**: 生产环境配置 SSL/TLS
3. **防火墙配置**: 只开放必要的端口（3000, 8080）
4. **数据库安全**: 使用强密码，限制数据库访问 IP
5. **定期备份**: 备份数据库和配置文件

---

**部署完成后访问**: http://your-server-ip:8080

**默认账号**: sysadmin / admin@123
