# 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编写,其他版本可能需要适当调整。在生产环境部署前,请务必在测试环境中验证所有步骤。