提交 313f1a32 authored 作者: 陈泽健's avatar 陈泽健

feat(onlyoffice): 添加 OnlyOffice 自动化部署脚本及相关文档

- 实现 OnlyOffice Document Server 自动化部署脚本
- 添加 CPU 架构检查、内核参数配置、Docker 服务检查等功能
- 实现镜像加载、端口冲突检查、数据目录准备等部署流程
- 添加容器启动和实时日志监控功能
- 创建详细的 PRD 需求文档和计划执行文档
- 提供完整的配置参数说明和故障处理指南
- 实现彩色日志输出和错误处理机制
上级 1dd466fc
# _PRD_Onlyoffice_自动化部署需求文档
> 版本:V1.0
> 更新日期:2026-02-26
> 适用范围:OnlyOffice 自动化部署脚本
> 来源:OnlyOffice Document Server 自动化安装脚本
> 部署脚本:`自动化部署脚本/x86架构/onlyoffice/auto_install_onlyoffice.sh`
> 支持架构:x86_64 (amd64)
## 1. 背景与目标
### 1.1 背景
OnlyOffice Document Server 是一个开源的在线文档协作服务,部署过程涉及多个配置步骤和环境检查,手动部署容易出错且效率低下。需要开发一套自动化部署脚本,实现一键部署。
### 1.2 目标
提供 OnlyOffice Document Server 的自动化部署能力,实现环境检查、镜像加载、容器启动、日志监控等全流程自动化,确保部署过程标准化、可重复、易维护。
### 1.3 约束条件
- **架构限制**:当前仅支持 x86_64 (amd64) 架构
- **依赖服务**:需要 Docker 环境支持
- **镜像文件**:需要预准备 OnlyOffice 镜像 tar.gz 文件
---
## 2. 功能需求
### 2.1 核心功能模块
| 序号 | 功能模块 | 描述 | 优先级 |
|-----|---------|------|-------|
| 1 | CPU 架构检查 | 验证服务器架构为 x86_64,不支持 ARM 架构 | P0 |
| 2 | 内核参数配置 | 配置 vm.max_map_count 和内核参数 | P0 |
| 3 | Swap 空间检查 | 检查 Swap 状态,未配置时给出警告提示 | P1 |
| 4 | Docker 服务检查 | 验证 Docker 服务运行状态 | P0 |
| 5 | 镜像加载 | 从本地文件加载 Docker 镜像 | P0 |
| 6 | 端口冲突检查 | 检查默认端口 18080 是否被占用 | P0 |
| 7 | 数据目录准备 | 创建容器所需的数据挂载目录 | P0 |
| 8 | 容器启动 | 启动 OnlyOffice 容器并配置相关参数 | P0 |
| 9 | 日志实时监控 | 启动后进入实时日志查看模式 | P1 |
---
### 2.2 详细功能说明
#### 2.2.1 CPU 架构检查
**目标**:确保服务器 CPU 架构与 OnlyOffice 镜像兼容。
| 检测项 | 说明 |
|--------|------|
| 支持架构 | x86_64 / amd64 |
| 不支持架构 | ARM (鲲鹏、飞腾、树莓派等) |
| 失败处理 | 脚本退出,提示用户寻找 ARM 版镜像或重新构建 |
**错误提示信息**
```
当前服务器架构为 [ARM],不支持运行此 OnlyOffice 镜像!
当前 OnlyOffice 镜像仅支持 x86_64 (amd64) 架构。
如需在 ARM 架构 (如鲲鹏、飞腾、树莓派) 上运行,请寻找专门的 ARM 版镜像或重新构建。
```
#### 2.2.2 内核参数配置
**目标**:配置 OnlyOffice 运行所需的内核参数。
| 参数 | 值 | 说明 |
|------|-----|------|
| vm.max_map_count | 262144 | Elasticsearch 所需参数 |
| kernel.unprivileged_userns_clone | 1 | 非特权用户命名空间克隆 |
**处理方式**
- 静默执行,不输出配置结果
- 参数设置失败不影响后续流程(kernel.unprivileged_userns_clone 使用 `|| true` 容错)
#### 2.2.3 Swap 空间检查
**目标**:检查系统 Swap 配置,防止内存不足导致服务崩溃。
| 检测项 | 说明 |
|--------|------|
| 检测命令 | `free -m` |
| 判断标准 | Swap Total = 0MB 时警告 |
| 处理方式 | 仅警告提示,不中断部署 |
**输出示例**
```
[WARN] 未检测到 Swap!建议手动配置以防内存不足。
```
#### 2.2.4 Docker 服务检查
**目标**:确保 Docker 服务正常运行。
| 检测项 | 说明 |
|--------|------|
| 检测命令 | `docker info` |
| 失败处理 | 脚本退出,提示用户启动 Docker |
**错误提示信息**
```
[ERROR] Docker 未运行,请启动 Docker 后重试。
```
#### 2.2.5 镜像加载
**目标**:从本地文件加载 OnlyOffice Docker 镜像。
| 配置项 | 默认值 |
|--------|--------|
| 镜像文件路径 | `./onlyoffice-documentserver-9.2.1.tar.gz` |
| 镜像标签 | `onlyoffice/documentserver:9.2.1` |
| 支持格式 | 处理方式 |
|---------|---------|
| .tar.gz | `gunzip -c` 解压后 `docker load` |
| .tar | 直接 `docker load -i` |
**失败处理**
- 文件不存在:脚本退出
- 加载失败:脚本退出
#### 2.2.6 端口冲突检查
**目标**:确保配置的端口未被其他服务占用。
| 配置项 | 默认值 |
|--------|--------|
| 监听端口 | 18080 |
| 容器内部端口 | 80 |
| 检测工具 | 优先级 |
|---------|--------|
| ss | 高 |
| netstat | 低 |
**失败处理**
- 端口被占用:脚本退出,提示修改 PORT 变量或关闭占用程序
#### 2.2.7 数据目录准备
**目标**:创建容器数据持久化所需的目录结构。
| 挂载目录 | 容器内路径 | 用途 |
|---------|-----------|------|
| /app/onlyoffice/logs | /var/log/onlyoffice | OnlyOffice 日志 |
| /app/onlyoffice/log4j | /var/log/onlyoffice/documentserver/log4js | Log4JS 日志 |
| /app/onlyoffice/mysql | /var/lib/mysql | MySQL 数据 |
| /app/onlyoffice/rabbitmq | /var/lib/rabbitmq | RabbitMQ 数据 |
| /app/onlyoffice/redis | /var/lib/redis | Redis 数据 |
| /app/onlyoffice/documentserver-data | /var/www/onlyoffice/Data | 文档服务器数据 |
#### 2.2.8 容器启动
**目标**:启动 OnlyOffice Document Server 容器。
| 配置项 | 值 | 说明 |
|--------|-----|------|
| 容器名称 | onlyoffice-document-server | 容器标识 |
| 重启策略 | --restart=always | 自动重启 |
| 端口映射 | 18080:80 | 宿主机:容器 |
| 共享内存 | 1g | --shm-size |
| 内存限制 | 4g | --memory |
| 文件描述符限制 | 65536:65536 | --ulimit nofile |
| 安全选项 | seccomp=unconfined | --security-opt |
| JWT 配置 | 值 |
|---------|-----|
| JWT_ENABLED | false |
| JWT_SECRET | dNrprU&2S |
| JWT_HEADER | Authorization |
**失败处理**
- 容器启动失败:脚本退出
#### 2.2.9 日志实时监控
**目标**:部署完成后进入实时日志查看模式,便于确认服务启动状态。
| 功能 | 说明 |
|------|------|
| 命令 | `docker logs -f $CONTAINER_NAME` |
| 退出方式 | Ctrl+C |
---
## 3. 日志输出规范
### 3.1 日志级别
| 级别 | 颜色 | 函数 | 使用场景 |
|------|------|------|---------|
| INFO | 蓝色 | log_info() | 正常流程信息 |
| SUCCESS | 绿色 | log_success() | 操作成功提示 |
| WARN | 黄色 | log_warn() | 警告信息(不中断流程) |
| ERROR | 红色 | log_error() | 错误信息(中断流程) |
### 3.2 日志格式
```
[级别] 消息内容
```
**示例**
```
[INFO] 检查服务器 CPU 架构...
[SUCCESS] 当前架构为 x86_64,符合要求。
[WARN] 未检测到 Swap!建议手动配置以防内存不足。
[ERROR] 镜像文件不存在:./onlyoffice-documentserver-9.2.1.tar.gz
```
---
## 4. 配置参数
### 4.1 可配置变量
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| PORT | 18080 | 服务监听端口 |
| IMAGE_FILE | ./onlyoffice-documentserver-9.2.1.tar.gz | 镜像文件路径 |
| CONTAINER_NAME | onlyoffice-document-server | 容器名称 |
| JWT_SECRET | dNrprU&2S | JWT 密钥 |
---
## 5. 执行流程
```
开始
1. CPU 架构检查 ────────→ [架构不符] → 结束(报错)
↓ [x86_64]
2. 内核参数配置
3. Swap 空间检查(警告提示)
4. Docker 服务检查 ───────→ [Docker未运行] → 结束(报错)
↓ [Docker运行中]
5. 镜像文件检查 ──────────→ [文件不存在] → 结束(报错)
↓ [文件存在]
6. 加载镜像 ──────────────→ [加载失败] → 结束(报错)
↓ [镜像加载成功]
7. 端口冲突检查 ──────────→ [端口被占用] → 结束(报错)
↓ [端口可用]
8. 创建数据目录
9. 启动容器 ──────────────→ [启动失败] → 结束(报错)
↓ [容器启动成功]
10. 实时日志监控
结束(Ctrl+C 退出日志监控)
```
---
## 6. 依赖清单
### 6.1 系统依赖
| 依赖 | 版本要求 | 说明 |
|------|---------|------|
| Bash | 任意 | 脚本解释器 |
| Docker | 任意 | 容器运行时 |
| ss/netstat | 任意 | 端口检测工具(至少一个) |
### 6.2 文件依赖
| 文件 | 说明 |
|------|------|
| onlyoffice-documentserver-9.2.1.tar.gz | OnlyOffice 镜像文件 |
---
## 7. 故障处理
### 7.1 常见问题
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 脚本提示架构不兼容 | 服务器为 ARM 架构 | 寻找 ARM 版镜像或使用 x86 服务器 |
| Docker 未运行 | Docker 服务未启动 | 执行 `systemctl start docker` |
| 端口被占用 | 18080 端口已有服务 | 修改 PORT 变量或停止占用服务 |
| 镜像加载失败 | 镜像文件损坏或路径错误 | 检查文件路径和完整性 |
| 容器启动失败 | 参数配置错误 | 查看 Docker 错误日志 |
---
## 8. 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
*文档结束*
# _PRD_Onlyoffice_自动化部署需求文档_计划执行
> 版本:V1.0
> 创建日期:2026-02-26
> 更新日期:2026-02-26
> 适用范围:OnlyOffice 自动化部署脚本
> 来源:基于《Onlyoffice_自动化部署需求文档.md》
> 状态:待执行
---
## 1. 项目概述
### 1.1 背景
OnlyOffice Document Server 自动化部署脚本用于简化部署流程,减少人工操作错误。当前脚本约 **130 行**,代码量适中,功能完整,但需要验证各项功能是否正常工作。
### 1.2 目标
- 验证脚本各功能模块的可用性
- 确保部署流程的完整性和稳定性
- 收集实际部署过程中的问题和改进建议
- 完善文档和错误处理机制
### 1.3 涉及文件
**主部署脚本:**
- `自动化部署脚本/x86架构/onlyoffice/auto_install_onlyoffice.sh` (130行)
**相关文档:**
- `Docs/PRD/自动化部署脚本/_PRD_Onlyoffice_自动化部署需求文档.md`
- `Docs/PRD/自动化部署脚本/_PRD_Onlyoffice_自动化部署需求文档_计划执行.md` (本文档)
---
## 2. 当前脚本结构分析
### 2.1 脚本执行流程
```
开始
├── 1) CPU 架构检查 (uname -m)
│ └── [架构不符] → 结束(报错)
├── 2) 内核参数配置 (sysctl)
├── 3) Swap 空间检查 (free -m)
├── 4) Docker 服务检查 (docker info)
│ └── [Docker未运行] → 结束(报错)
├── 5) 镜像文件检查
│ └── [文件不存在] → 结束(报错)
├── 6) 镜像加载 (docker load)
│ └── [加载失败] → 结束(报错)
├── 7) 端口冲突检查 (ss/netstat)
│ └── [端口被占用] → 结束(报错)
├── 8) 数据目录准备 (mkdir -p)
├── 9) 容器启动 (docker run)
│ └── [启动失败] → 结束(报错)
└── 10) 实时日志监控 (docker logs -f)
```
### 2.2 代码结构分析
| 行号范围 | 功能模块 | 代码量 | 复杂度 |
|---------|---------|--------|--------|
| 3-8 | 颜色定义 | 6行 | 低 |
| 10-14 | 配置参数 | 5行 | 低 |
| 16-20 | 辅助函数 | 5行 | 低 |
| 22-35 | CPU 架构检查 | 14行 | 低 |
| 39-52 | 内核参数 + Swap 检查 | 14行 | 低 |
| 54-59 | Docker 服务检查 | 6行 | 低 |
| 61-78 | 镜像加载 | 18行 | 中 |
| 80-95 | 端口冲突检查 | 16行 | 中 |
| 97-99 | 数据目录准备 | 3行 | 低 |
| 101-124 | 容器启动 | 24行 | 中 |
| 126-130 | 日志监控 | 5行 | 低 |
**总结:** 脚本结构清晰,各模块职责单一,代码量适中,暂不需要模块化拆分。
---
## 3. 功能验证计划
### 3.1 环境准备验证
| 验证项 | 说明 | 预期结果 |
|--------|------|---------|
| 镜像文件准备 | 确认 `onlyoffice-documentserver-9.2.1.tar.gz` 存在 | 文件存在且完整 |
| Docker 环境 | Docker 服务正常运行 | `docker info` 命令正常输出 |
| 权限检查 | 脚本有执行权限 | `chmod +x` 后可执行 |
### 3.2 功能模块验证
#### 3.2.1 CPU 架构检查
| 测试场景 | 操作 | 预期结果 |
|---------|------|---------|
| x86_64 架构 | 在 x86_64 服务器上运行 | 检查通过,继续执行 |
| ARM 架构 | 在 ARM 服务器上运行 | 脚本退出,提示架构不兼容 |
**验证命令:**
```bash
# 检查当前架构
uname -m
# 模拟 ARM 架构测试(可临时修改脚本)
```
#### 3.2.2 内核参数配置
| 参数 | 验证方法 | 预期结果 |
|------|---------|---------|
| vm.max_map_count | `sysctl vm.max_map_count` | 值为 262144 |
| kernel.unprivileged_userns_clone | `sysctl kernel.unprivileged_userns_clone` | 值为 1 |
**验证命令:**
```bash
sysctl vm.max_map_count
sysctl kernel.unprivileged_userns_clone
```
#### 3.2.3 Swap 空间检查
| 测试场景 | Swap 状态 | 预期输出 |
|---------|-----------|---------|
| 有 Swap | Swap > 0MB | `[SUCCESS] Swap 空间正常` |
| 无 Swap | Swap = 0MB | `[WARN] 未检测到 Swap!` |
**验证命令:**
```bash
free -m
```
#### 3.2.4 Docker 服务检查
| 测试场景 | Docker 状态 | 预期结果 |
|---------|------------|---------|
| Docker 运行中 | 服务正常 | 检查通过 |
| Docker 未运行 | 服务停止 | 脚本退出并提示 |
**验证命令:**
```bash
# 停止 Docker 测试异常场景
systemctl stop docker
# 运行脚本应报错
# 启动 Docker
systemctl start docker
```
#### 3.2.5 镜像加载
| 测试场景 | 镜像状态 | 预期结果 |
|---------|---------|---------|
| 镜像文件存在 | 文件完整 | 镜像加载成功 |
| 镜像文件不存在 | 文件缺失 | 脚本退出并提示 |
| 镜像文件损坏 | 文件损坏 | 镜像加载失败 |
**验证命令:**
```bash
# 检查镜像是否加载
docker images | grep onlyoffice/documentserver
```
#### 3.2.6 端口冲突检查
| 测试场景 | 端口状态 | 预期结果 |
|---------|---------|---------|
| 端口空闲 | 18080 未被占用 | 检查通过 |
| 端口被占用 | 18080 已被占用 | 脚本退出并提示 |
**验证命令:**
```bash
# 检查端口占用
ss -tulpn | grep 18080
# 或
netstat -tulpn | grep 18080
```
#### 3.2.7 数据目录准备
| 目录 | 容器内路径 | 验证方法 |
|------|-----------|---------|
| /app/onlyoffice/logs | /var/log/onlyoffice | `ls -la /app/onlyoffice/logs` |
| /app/onlyoffice/mysql | /var/lib/mysql | `ls -la /app/onlyoffice/mysql` |
| /app/onlyoffice/redis | /var/lib/redis | `ls -la /app/onlyoffice/redis` |
**验证命令:**
```bash
ls -la /app/onlyoffice/
```
#### 3.2.8 容器启动
| 检查项 | 验证方法 | 预期结果 |
|--------|---------|---------|
| 容器运行状态 | `docker ps` | 容器状态为 Up |
| 端口映射 | `docker port` | 18080→80 |
| 日志输出 | `docker logs` | 无严重错误 |
**验证命令:**
```bash
# 检查容器状态
docker ps | grep onlyoffice-document-server
# 检查容器详情
docker inspect onlyoffice-document-server
# 查看启动日志
docker logs --tail 50 onlyoffice-document-server
```
#### 3.2.9 日志实时监控
| 检查项 | 验证方法 | 预期结果 |
|--------|---------|---------|
| 日志输出 | 脚本执行后自动显示日志 | 实时显示容器日志 |
| 退出方式 | Ctrl+C | 退出日志监控,容器继续运行 |
---
## 4. 配置参数说明
### 4.1 可配置变量
| 变量名 | 默认值 | 修改建议 |
|--------|--------|---------|
| PORT | 18080 | 根据实际情况修改,避免端口冲突 |
| IMAGE_FILE | ./onlyoffice-documentserver-9.2.1.tar.gz | 使用绝对路径或相对路径 |
| CONTAINER_NAME | onlyoffice-document-server | 建议保持默认,便于管理 |
| JWT_SECRET | dNrprU&2S | 生产环境建议修改为复杂密钥 |
### 4.2 容器资源限制
| 资源 | 配置值 | 说明 |
|------|--------|------|
| 共享内存 | 1g | 用于进程间通信 |
| 内存限制 | 4g | 容器最大可用内存 |
| 文件描述符 | 65536:65536 | 最大打开文件数 |
---
## 5. 执行计划
### 5.1 阶段划分
| 阶段 | 任务 | 预计工作量 | 状态 |
|-----|------|----------|------|
| **阶段1** | 环境准备 | 0.5天 | ⏳ 待执行 |
| **阶段2** | 功能验证(正常场景) | 1天 | ⏳ 待执行 |
| **阶段3** | 异常场景测试 | 0.5天 | ⏳ 待执行 |
| **阶段4** | 文档完善 | 0.5天 | ⏳ 待执行 |
| **阶段5** | 问题总结与优化 | 0.5天 | ⏳ 待执行 |
### 5.2 详细任务
#### 阶段1:环境准备
- [ ] 准备 x86_64 测试服务器
- [ ] 安装 Docker 环境
- [ ] 下载 OnlyOffice 镜像文件
- [ ] 确认脚本执行权限
#### 阶段2:功能验证(正常场景)
- [ ] 在 x86_64 服务器上执行脚本
- [ ] 验证各功能模块输出
- [ ] 确认容器正常启动
- [ ] 验证服务访问(http://服务器IP:18080)
#### 阶段3:异常场景测试
- [ ] 模拟 Docker 未启动场景
- [ ] 模拟端口冲突场景
- [ ] 模拟镜像文件缺失场景
- [ ] 验证错误提示是否清晰
#### 阶段4:文档完善
- [ ] 补充使用说明
- [ ] 补充常见问题处理
- [ ] 更新配置说明
#### 阶段5:问题总结与优化
- [ ] 收集测试过程中的问题
- [ ] 评估是否需要功能增强
- [ ] 记录经验总结
### 5.3 里程碑
| 里程碑 | 完成标准 | 状态 |
|-------|---------|------|
| M1: 环境就绪 | Docker 环境正常,镜像文件准备好 | ⏳ 待达成 |
| M2: 功能验证通过 | 脚本正常执行,容器成功启动 | ⏳ 待达成 |
| M3: 测试完成 | 所有测试场景执行完毕 | ⏳ 待达成 |
| M4: 文档完成 | 文档更新完毕 | ⏳ 待达成 |
---
## 6. 测试计划
### 6.1 单元测试
| 测试项 | 测试方法 | 预期结果 |
|--------|---------|---------|
| CPU 架构检测 | `uname -m` | 正确识别 x86_64/ARM |
| 内核参数设置 | `sysctl -w` | 参数设置成功 |
| 端口检测 | `ss` / `netstat` | 正确检测端口占用 |
### 6.2 集成测试
| 测试场景 | 操作步骤 | 验证点 |
|---------|---------|--------|
| 完整部署流程 | 执行完整脚本 | 所有步骤无报错 |
| 容器访问 | 访问 http://IP:18080 | OnlyOffice 页面正常显示 |
| 数据持久化 | 重启容器 | 数据不丢失 |
### 6.3 回归测试
| 测试项 | 说明 |
|--------|------|
| 重复执行 | 多次执行脚本,验证幂等性 |
| 配置修改 | 修改配置参数后验证功能 |
---
## 7. 风险与应对
| 风险 | 影响 | 概率 | 应对措施 |
|-----|------|------|---------|
| 镜像文件损坏 | 高 | 中 | 提供文件校验方法(MD5/SHA256) |
| 端口冲突 | 中 | 高 | 提供端口检测和修改指引 |
| 资源不足 | 中 | 中 | 提供资源检查和优化建议 |
| Docker 版本兼容 | 低 | 低 | 文档说明最低 Docker 版本要求 |
| ARM 架构需求 | 中 | 低 | 文档明确说明仅支持 x86_64 |
---
## 8. 验收标准
### 8.1 功能验收
- [ ] 脚本在 x86_64 服务器上正常执行 ⏳ 待验证
- [ ] 所有检测功能正常工作 ⏳ 待验证
- [ ] 容器成功启动并可访问 ⏳ 待验证
- [ ] 错误提示清晰明确 ⏳ 待验证
### 8.2 代码质量验收
- [x] 代码结构清晰
- [x] 日志输出规范(INFO/SUCCESS/WARN/ERROR)
- [x] 错误处理完善
- [x] 配置参数易于修改
- [ ] 注释完整 ⏳ 待补充
### 8.3 文档验收
- [x] PRD 需求文档已编写
- [ ] 使用说明文档 ⏳ 待编写
- [ ] 常见问题文档 ⏳ 待编写
- [ ] 测试报告 ⏳ 待编写
---
## 9. 潜在改进方向
### 9.1 功能增强
| 优先级 | 改进项 | 说明 |
|--------|--------|------|
| P1 | 配置文件支持 | 支持从配置文件读取参数 |
| P2 | 交互式配置 | 运行时交互式修改配置 |
| P2 | 日志输出到文件 | 同时输出日志到文件 |
| P3 | 容器健康检查 | 启动后自动检查容器健康状态 |
| P3 | 卸载功能 | 提供容器卸载清理功能 |
| P3 | ARM 架构支持 | 支持 ARM64 架构镜像 |
### 9.2 代码优化
| 优先级 | 改进项 | 说明 |
|--------|--------|------|
| P2 | 参数校验 | 添加配置参数合法性校验 |
| P2 | 幂等性处理 | 支持重复执行而不报错 |
| P3 | 模块化拆分 | 将功能拆分为独立函数/脚本 |
| P3 | 日志级别控制 | 支持控制日志详细程度 |
---
## 10. 执行结果记录
### 10.1 测试记录
| 日期 | 测试项 | 结果 | 备注 |
|------|--------|------|------|
| - | - | - | - |
### 10.2 问题记录
| 日期 | 问题描述 | 解决方案 | 状态 |
|------|---------|---------|------|
| - | - | - | - |
### 10.3 改进记录
| 日期 | 改进内容 | 版本 | 状态 |
|------|---------|------|------|
| - | - | - | - |
---
## 11. 参考文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
- OnlyOffice 官方文档: https://docs.onlyoffice.com/
---
*文档结束*
#!/bin/bash
# --- 颜色定义 ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色
# --- 配置 ---
PORT=18080
IMAGE_FILE="./onlyoffice-documentserver-9.2.1.tar.gz"
CONTAINER_NAME="onlyoffice-document-server"
JWT_SECRET="dNrprU&2S"
# --- 辅助函数 ---
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# ==========================================
# 【新增】0. 检查 CPU 架构
# ==========================================
log_info "检查服务器 CPU 架构..."
ARCH=$(uname -m)
if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then
log_success "当前架构为 x86_64,符合要求。"
else
log_error "当前服务器架构为 [$ARCH],不支持运行此 OnlyOffice 镜像!"
log_error "当前OnlyOffice 镜像仅支持 x86_64 (amd64) 架构。"
log_error "如需在 ARM 架构 (如鲲鹏、飞腾、树莓派) 上运行,请寻找专门的 ARM 版镜像或重新构建。"
exit 1
fi
log_info "开始部署 OnlyOffice..."
# 1. 设置内核参数
log_info "正在配置内核参数..."
sysctl -w vm.max_map_count=262144 >/dev/null 2>&1
sysctl -w kernel.unprivileged_userns_clone=1 >/dev/null 2>&1 || true
# 2. 检查 Swap (仅提示)
log_info "检查 Swap 空间..."
free -h
SWAP_TOTAL=$(free -m | awk '/^Swap:/{print $2}')
if [ "$SWAP_TOTAL" -eq 0 ]; then
log_warn "未检测到 Swap!建议手动配置以防内存不足。"
else
log_success "Swap 空间正常 (${SWAP_TOTAL}MB)"
fi
# 3. 检查 Docker
log_info "检查 Docker 服务..."
if ! docker info >/dev/null 2>&1; then
log_error "Docker 未运行,请启动 Docker 后重试。"
exit 1
fi
# 4. 加载镜像
log_info "正在加载镜像文件:$IMAGE_FILE"
if [ ! -f "$IMAGE_FILE" ]; then
log_error "镜像文件不存在:$IMAGE_FILE"
exit 1
fi
if [[ "$IMAGE_FILE" == *.gz ]]; then
gunzip -c "$IMAGE_FILE" | docker load
else
docker load -i "$IMAGE_FILE"
fi
if [ $? -ne 0 ]; then
log_error "镜像加载失败!"
exit 1
fi
log_success "镜像加载成功"
# 5. 检查端口冲突
log_info "检查端口 $PORT 是否被占用..."
if command -v ss >/dev/null 2>&1; then
CHECK_CMD="ss -tulpn"
elif command -v netstat >/dev/null 2>&1; then
CHECK_CMD="netstat -tulpn"
else
CHECK_CMD=""
fi
if [ -n "$CHECK_CMD" ] && $CHECK_CMD 2>/dev/null | grep -q ":$PORT "; then
log_error "端口 $PORT 已被占用!请修改 PORT 变量或关闭占用程序。"
exit 1
else
log_success "端口 $PORT 可用"
fi
# 6. 准备数据目录
log_info "创建数据目录..."
mkdir -p /app/onlyoffice/{logs,log4j,mysql,rabbitmq,redis,documentserver-data}
# 7. 启动容器
log_info "正在启动容器..."
docker run -d --restart=always \
--name $CONTAINER_NAME \
-p $PORT:80 \
-v /app/onlyoffice/logs:/var/log/onlyoffice \
-v /app/onlyoffice/log4j:/var/log/onlyoffice/documentserver/log4js \
-v /app/onlyoffice/mysql:/var/lib/mysql \
-v /app/onlyoffice/rabbitmq:/var/lib/rabbitmq \
-v /app/onlyoffice/redis:/var/lib/redis \
-v /app/onlyoffice/documentserver-data:/var/www/onlyoffice/Data \
-e JWT_ENABLED=false \
-e JWT_SECRET=$JWT_SECRET \
-e JWT_HEADER=Authorization \
--shm-size="1g" \
--memory="4g" \
--ulimit nofile=65536:65536 \
--security-opt seccomp=unconfined \
onlyoffice/documentserver:9.2.1
if [ $? -ne 0 ]; then
log_error "容器启动失败!"
exit 1
fi
log_success "✅ 容器已启动,正在进入实时日志监控 (按 Ctrl+C 退出日志)..."
echo ""
# 8. 【核心修改】直接实时打印日志
docker logs -f $CONTAINER_NAME
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论