Files
KnowledgeBase/docker/DEPLOYMENT_GUIDE.md
lizhuoran 3c206e9e06 feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境)
- 集成 Laravel Octane (Swoole) 提升性能
- 新增健康检查、监控脚本及部署文档
- 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch)
- 优化文档转换、预览服务及队列任务
- 添加 CreateAdminUser 命令与路由健康检查接口
- 新增 Swoole 队列兼容性测试套件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:51:19 +08:00

608 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Laravel知识库系统 - OpenEuler部署指南
## 概述
本指南详细说明如何在OpenEuler服务器上部署Laravel知识库系统。系统采用Docker容器化技术支持完整的生产环境运行。
## 系统要求
### 硬件要求
- **CPU**: 2核心或以上 (推荐4核心)
- **内存**: 4GB或以上 (推荐8GB)
- **存储**: 20GB可用空间 (推荐50GB)
- **网络**: 稳定的网络连接
### 软件要求
- **操作系统**: OpenEuler 20.03 LTS或更高版本
- **架构**: x86_64 (amd64)
- **Docker**: 20.10或更高版本
- **Docker Compose**: 2.0或更高版本
## 部署架构
```
┌─────────────────────────────────────────────────────────────┐
│ OpenEuler服务器 │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Swoole │ │ Laravel │ │ Queue │ │
│ │ (Web服务) │ │ (应用) │ │ (队列) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MySQL │ │ Redis │ │ Meilisearch │ │
│ │ (数据库) │ │ (缓存) │ │ (搜索) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 持久化存储 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 数据库数据 │ │ 应用文件 │ │ 日志 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## 部署步骤
### 1. 环境准备
#### 1.1 系统更新
```bash
# 更新系统包
sudo dnf update -y
# 安装必要工具
sudo dnf install -y curl wget git unzip
```
#### 1.2 创建部署用户
```bash
# 创建部署用户
sudo useradd -m -s /bin/bash deploy
sudo usermod -aG wheel deploy
# 切换到部署用户
sudo su - deploy
```
### 2. Docker安装
#### 2.1 自动安装 (推荐)
使用提供的部署脚本自动安装Docker
```bash
# 下载部署脚本
wget https://your-server.com/deploy-to-openeuler.sh
chmod +x deploy-to-openeuler.sh
# 运行部署脚本 (会自动安装Docker)
sudo ./deploy-to-openeuler.sh /path/to/docker-images
```
#### 2.2 手动安装
```bash
# 添加Docker仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 将用户添加到docker组
sudo usermod -aG docker $USER
# 重新登录以使组权限生效
exit
sudo su - deploy
# 验证安装
docker --version
docker compose version
```
### 3. 镜像准备
#### 3.1 镜像导出 (在开发环境)
在有网络连接的开发环境中导出镜像:
```bash
# 使用导出脚本
./docker/export-images.sh -c -v
# 或手动导出
docker save -o knowledge-base-app.tar knowledge-base-app:latest
docker save -o mysql.tar mysql:8.0
docker save -o redis.tar redis:7-alpine
docker save -o meilisearch.tar getmeili/meilisearch:v1.5
# 压缩镜像文件
gzip *.tar
```
#### 3.2 镜像传输
将镜像文件传输到OpenEuler服务器
```bash
# 使用scp传输
scp docker-images/*.tar.gz deploy@openeuler-server:/tmp/
# 或使用rsync
rsync -avz docker-images/ deploy@openeuler-server:/tmp/docker-images/
```
#### 3.3 镜像导入
在OpenEuler服务器上导入镜像
```bash
# 使用导入脚本
./docker/import-and-verify.sh -f --test-run /tmp/docker-images
# 或手动导入
cd /tmp/docker-images
for file in *.tar.gz; do
gunzip -c "$file" | docker load
done
# 验证导入的镜像
docker images
```
### 4. 应用部署
#### 4.1 创建部署目录
```bash
# 创建部署目录
sudo mkdir -p /opt/knowledge-base
sudo chown deploy:deploy /opt/knowledge-base
cd /opt/knowledge-base
```
#### 4.2 准备配置文件
创建docker-compose.yml文件
```bash
# 复制配置文件模板
cp /path/to/source/docker-compose.yml .
cp /path/to/source/.env.production .env
# 或下载配置文件
wget https://your-server.com/docker-compose.yml
wget https://your-server.com/.env.production -O .env
```
#### 4.3 配置环境变量
编辑.env文件
```bash
nano .env
```
重要配置项:
```env
# 应用配置
APP_NAME="知识库系统"
APP_ENV=production
APP_KEY=base64:your-generated-key-here
APP_DEBUG=false
APP_URL=http://your-server-ip
# 数据库配置
DB_PASSWORD=your-secure-password
# 搜索配置
MEILISEARCH_KEY=your-master-key-here
```
#### 4.4 创建存储目录
```bash
# 创建持久化存储目录
mkdir -p storage/{mysql,redis,meilisearch,app,logs}
mkdir -p storage/logs/{app,queue}
# 设置权限
sudo chown -R 1000:1000 storage/
chmod -R 755 storage/
```
### 5. 启动服务
#### 5.1 启动所有服务
```bash
# 启动服务
docker compose up -d
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
```
#### 5.2 初始化应用
```bash
# 运行数据库迁移
docker compose exec app php artisan migrate --force
# 创建存储链接
docker compose exec app php artisan storage:link
# 清除缓存
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:cache
docker compose exec app php artisan route:cache
docker compose exec app php artisan view:cache
```
### 6. 验证部署
#### 6.1 健康检查
```bash
# 检查所有容器状态
docker compose ps
# 检查健康状态
docker compose exec app curl -f http://localhost/health
# 检查数据库连接
docker compose exec app php artisan tinker --execute="DB::connection()->getPdo();"
```
#### 6.2 功能测试
1. **Web访问测试**
```bash
curl -I http://your-server-ip
```
2. **数据库测试**
```bash
docker compose exec mysql mysql -u root -p -e "SHOW DATABASES;"
```
3. **搜索服务测试**
```bash
curl http://your-server-ip:7700/health
```
4. **队列测试**
```bash
docker compose exec app php artisan queue:work --once
```
## 运维管理
### 日常操作
#### 查看日志
```bash
# 查看所有服务日志
docker compose logs -f
# 查看特定服务日志
docker compose logs -f app
docker compose logs -f mysql
docker compose logs -f redis
docker compose logs -f meilisearch
docker compose logs -f queue
# 查看Laravel日志
docker compose exec app tail -f storage/logs/laravel.log
```
#### 重启服务
```bash
# 重启所有服务
docker compose restart
# 重启特定服务
docker compose restart app
docker compose restart mysql
```
#### 停止和启动
```bash
# 停止所有服务
docker compose down
# 启动所有服务
docker compose up -d
# 停止并删除所有容器和网络
docker compose down --volumes --remove-orphans
```
### 备份和恢复
#### 数据备份
```bash
# 创建备份脚本
cat > backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/opt/backups/knowledge-base"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 备份数据库
docker compose exec -T mysql mysqldump -u root -p$DB_PASSWORD knowledge_base > "$BACKUP_DIR/database_$DATE.sql"
# 备份应用文件
tar -czf "$BACKUP_DIR/storage_$DATE.tar.gz" storage/
# 备份配置文件
cp .env "$BACKUP_DIR/env_$DATE"
cp docker-compose.yml "$BACKUP_DIR/docker-compose_$DATE.yml"
echo "备份完成: $BACKUP_DIR"
EOF
chmod +x backup.sh
```
#### 数据恢复
```bash
# 恢复数据库
docker compose exec -T mysql mysql -u root -p$DB_PASSWORD knowledge_base < /path/to/database_backup.sql
# 恢复应用文件
tar -xzf /path/to/storage_backup.tar.gz
```
### 更新和升级
#### 应用更新
```bash
# 拉取新镜像
docker compose pull
# 重新启动服务
docker compose up -d
# 运行迁移
docker compose exec app php artisan migrate --force
# 清除缓存
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:cache
```
#### 系统更新
```bash
# 更新系统包
sudo dnf update -y
# 更新Docker
sudo dnf update docker-ce docker-ce-cli containerd.io
# 重启Docker服务
sudo systemctl restart docker
```
### 监控和告警
#### 系统监控
```bash
# 查看系统资源使用
htop
df -h
free -h
# 查看Docker资源使用
docker stats
# 查看容器资源使用
docker compose exec app ps aux
```
#### 日志监控
```bash
# 监控错误日志
tail -f storage/logs/laravel.log | grep ERROR
# 监控访问日志
docker compose logs -f app | grep "GET\|POST"
```
## 故障排除
### 常见问题
#### 1. 容器启动失败
**症状**: 容器无法启动或立即退出
**解决方案**:
```bash
# 查看容器日志
docker compose logs container_name
# 检查配置文件
docker compose config
# 检查端口占用
netstat -tlnp | grep :8000
```
#### 2. 数据库连接失败
**症状**: 应用无法连接到数据库
**解决方案**:
```bash
# 检查数据库容器状态
docker compose ps mysql
# 测试数据库连接
docker compose exec mysql mysql -u root -p
# 检查网络连接
docker compose exec app ping mysql
```
#### 3. 权限问题
**症状**: 文件写入失败或权限错误
**解决方案**:
```bash
# 修复存储目录权限
sudo chown -R 1000:1000 storage/
chmod -R 775 storage/
# 检查SELinux状态
getenforce
sudo setsebool -P container_manage_cgroup on
```
#### 4. 内存不足
**症状**: 容器被OOM Killer终止
**解决方案**:
```bash
# 检查内存使用
free -h
docker stats
# 调整容器内存限制
# 编辑docker-compose.yml中的deploy.resources.limits.memory
```
#### 5. 磁盘空间不足
**症状**: 容器无法写入文件
**解决方案**:
```bash
# 检查磁盘使用
df -h
# 清理Docker资源
docker system prune -a
# 清理日志文件
sudo journalctl --vacuum-time=7d
```
### 性能优化
#### 1. 数据库优化
```bash
# 调整MySQL配置
# 编辑docker/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
```
#### 2. Redis优化
```bash
# 调整Redis配置
# 编辑docker/redis/redis.conf
maxmemory 512mb
maxmemory-policy allkeys-lru
```
#### 3. PHP优化
```bash
# 调整PHP配置
# 编辑docker/php/php.ini
memory_limit = 512M
max_execution_time = 300
upload_max_filesize = 100M
```
#### 4. Swoole优化
```bash
# 调整Swoole配置
# 编辑.env文件
OCTANE_WORKERS=4
OCTANE_TASK_WORKERS=2
OCTANE_MAX_REQUESTS=500
```
## 安全配置
### 防火墙设置
```bash
# 配置防火墙
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# 限制数据库端口访问
sudo firewall-cmd --permanent --remove-port=3306/tcp
sudo firewall-cmd --permanent --remove-port=6379/tcp
sudo firewall-cmd --permanent --remove-port=7700/tcp
sudo firewall-cmd --reload
```
### SSL/TLS配置
```bash
# 安装Certbot
sudo dnf install -y certbot
# 获取SSL证书
sudo certbot certonly --standalone -d your-domain.com
# 配置Nginx SSL
# 编辑docker/nginx/default.conf添加SSL配置
```
### 访问控制
```bash
# 配置IP白名单
# 在docker-compose.yml中添加网络限制
# 配置用户认证
# 在应用中启用认证中间件
```
## 联系支持
如果遇到问题,请:
1. 查看日志文件获取详细错误信息
2. 检查系统资源使用情况
3. 参考故障排除章节
4. 联系技术支持团队
---
**注意**: 本指南基于OpenEuler 20.03 LTS编写其他版本可能需要适当调整。在生产环境部署前请务必在测试环境中验证所有步骤。