# Docker Compose配置编辑指南

## 🎯 功能概述
安全地编辑和管理三台服务器（ubuntu1, ubuntu2, NAS）上的Docker Compose配置文件。

## 📁 目录结构
```
~/.openclaw/workspace/
├── docker-apps.yaml          # 应用映射配置
├── docker-config-editor.sh   # 配置编辑工具
└── DOCKER_CONFIG_EDITOR_GUIDE.md  # 本指南
```

## 🛠️ 工具功能

### 1. 查看当前配置
```bash
./docker-config-editor.sh <服务器> <应用> show
示例: ./docker-config-editor.sh ubuntu1 portainer show
```

### 2. 创建备份
```bash
./docker-config-editor.sh <服务器> <应用> backup
示例: ./docker-config-editor.sh ubuntu1 portainer backup
```

### 3. 验证配置格式
```bash
./docker-config-editor.sh <服务器> <应用> validate
示例: ./docker-config-editor.sh ubuntu1 portainer validate
```

### 4. 重启应用
```bash
./docker-config-editor.sh <服务器> <应用> restart
示例: ./docker-config-editor.sh ubuntu1 portainer restart
```

## 🔄 安全编辑工作流程

### 步骤1：查看当前配置
```bash
./docker-config-editor.sh ubuntu1 portainer show
```

### 步骤2：创建备份
```bash
./docker-config-editor.sh ubuntu1 portainer backup
```

### 步骤3：下载配置文件到本地
```bash
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/portainer-docker-compose.yml
```

### 步骤4：编辑本地文件
```bash
# 使用你喜欢的编辑器编辑文件
vim /tmp/portainer-docker-compose.yml
# 或
nano /tmp/portainer-docker-compose.yml
```

### 步骤5：显示修改差异
```bash
# 获取原文件
ssh ubuntu1 "cat /home/shenwei/Docker/portainer/docker-compose.yml" > /tmp/original.yml
# 比较差异
diff -u /tmp/original.yml /tmp/portainer-docker-compose.yml
```

### 步骤6：上传并验证
```bash
# 上传修改后的文件
scp /tmp/portainer-docker-compose.yml ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml
# 验证配置格式
./docker-config-editor.sh ubuntu1 portainer validate
```

### 步骤7：重启应用
```bash
./docker-config-editor.sh ubuntu1 portainer restart
```

## 📋 支持的修改类型

### 1. 修改端口映射
```yaml
# 修改前
ports:
  - "9000:9000"

# 修改后
ports:
  - "9001:9000"
```

### 2. 修改数据卷挂载
```yaml
# 修改前
volumes:
  - ./data:/data

# 修改后
volumes:
  - /volume1/docker/portainer/data:/data
```

### 3. 修改环境变量
```yaml
# 修改前
environment:
  - DB_HOST=localhost

# 修改后
environment:
  - DB_HOST=mysql
  - DB_PORT=3306
```

### 4. 更新镜像版本
```yaml
# 修改前
image: portainer/portainer-ce:2.19

# 修改后
image: portainer/portainer-ce:latest
```

## ⚠️ 安全注意事项

### 备份策略
- 每次修改前自动创建备份
- 保留最近5个备份文件
- 备份文件名格式：`docker-compose.yml.backup.YYYYMMDDHHMMSS`

### 验证机制
1. **语法验证**：使用 `docker compose config` 验证YAML语法
2. **差异对比**：修改前后显示差异
3. **应用验证**：重启后检查应用状态

### 回滚机制
如果修改后验证失败：
1. 自动回滚到最新备份
2. 报告回滚状态
3. 保留错误日志

## 🚀 快速开始示例

### 示例1：修改portainer端口
```bash
# 1. 查看当前配置
./docker-config-editor.sh ubuntu1 portainer show

# 2. 创建备份
./docker-config-editor.sh ubuntu1 portainer backup

# 3. 下载并编辑
scp ubuntu1:/home/shenwei/Docker/portainer/docker-compose.yml /tmp/
# 编辑文件，修改端口

# 4. 显示差异并确认
# 5. 上传并验证
# 6. 重启应用
```

### 示例2：更新rsshub镜像版本
```bash
# 类似流程，修改image标签
```

## 📊 服务器路径映射

| 服务器 | Docker应用路径 | 示例应用 |
|--------|----------------|----------|
| ubuntu1 | `/home/shenwei/Docker/` | portainer, rsshub, it-tools |
| ubuntu2 | `/home/shenwei/docker/` | cloudflared, uptime-kuma |
| NAS | `/volume1/docker/` | navidrome, mysql80 |

## 🔍 故障排除

### 常见问题
1. **连接失败**：检查SSH配置和网络连接
2. **权限问题**：确保有文件读写权限
3. **配置语法错误**：使用 `docker compose config` 验证
4. **应用启动失败**：检查Docker日志

### 调试命令
```bash
# 查看Docker日志
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose logs"

# 查看容器状态
ssh ubuntu1 "cd /home/shenwei/Docker/portainer && docker compose ps"

# 查看备份文件
ssh ubuntu1 "ls -la /home/shenwei/Docker/portainer/docker-compose.yml.backup.*"
```

## 📝 最后更新
- 创建时间：2026-03-13
- 最后更新：2026-03-13
- 版本：1.0.0