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>
This commit is contained in:
608
docker/DEPLOYMENT_GUIDE.md
Normal file
608
docker/DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,608 @@
|
||||
# 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编写,其他版本可能需要适当调整。在生产环境部署前,请务必在测试环境中验证所有步骤。
|
||||
Reference in New Issue
Block a user