Laravel应用容器化部署完整指南:从开发到生产的实战教程
【免费下载链接】docsSource repo for Docker's Documentation项目地址: https://gitcode.com/gh_mirrors/docs3/docs
本文将手把手教你使用Docker容器化部署Laravel应用到生产环境。就像把商品装进标准化货柜一样,容器化让我们的应用可以轻松地在不同环境中迁移和运行,确保开发、测试和生产环境的一致性。
基础准备:搭建容器化开发环境
在我们开始容器化之旅前,让我们先准备好必要的工具和环境。
Docker环境配置
首先确保你的系统已经安装了Docker和Docker Compose。就像准备厨房里的厨具一样,我们需要这些基础工具来"烹饪"我们的应用。
💡专家建议:使用Docker Desktop可以获得更友好的图形界面体验,特别适合初学者。
项目结构规划
一个合理的项目结构是成功部署的关键。让我们一起创建一个清晰的项目目录:
my-laravel-app/ ├── app/ ├── bootstrap/ ├── config/ ├── docker/ │ ├── common/ # 共享配置 │ └── production/ # 生产环境专用 ├── compose.prod.yaml # 生产环境编排文件 └── .env # 环境变量配置这种结构就像把不同类型的工具分类存放,让我们能够快速找到需要的配置。
核心配置:构建生产级容器服务
现在我们一起配置各个核心服务,就像组装一台精密的机器。
PHP-FPM服务配置
PHP-FPM是Laravel应用的处理引擎,就像汽车的马达一样重要。
最佳实践示例:
# 多阶段构建:先构建再运行 FROM php:8.4-fpm AS builder # 安装必要的PHP扩展 RUN docker-php-ext-install pdo_mysql zip intl WORKDIR /var/www COPY . . RUN composer install --no-dev --optimize-autoloader # 生产阶段镜像 FROM php:8.4-fpm COPY --from=builder /var/www /var/www RUN chown -R www-data:www-data /var/www USER www-data🚀快速上手:多阶段构建就像先在大工厂组装零件,再到小车间打包成品,能显著减小镜像体积。
Nginx反向代理配置
Nginx就像是餐厅的前台,负责接待客人并把订单传递给后厨(PHP-FPM)。
最佳实践示例:
server { listen 80; root /var/www/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php-fpm:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }数据库服务配置
数据库就像应用的记忆库,需要妥善保存和备份。
⚠️注意:生产环境务必使用强密码,并定期备份数据。
最佳实践示例:
postgres: image: postgres:16 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready"] interval: 10s部署实战:一键启动生产环境
现在我们已经配置好了所有服务,让我们一起把它们启动起来。
完整的Docker Compose配置
让我们把所有服务整合到一个文件中,就像编写一份完整的菜谱。
最佳实践示例:
services: web: build: ./docker/production/nginx ports: - "80:80" depends_on: php-fpm: condition: service_healthy php-fpm: build: context: . dockerfile: ./docker/common/php-fpm/Dockerfile healthcheck: test: ["CMD-SHELL", "php-fpm-healthcheck"] interval: 10s postgres: image: postgres:16 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data volumes: postgres-data:启动生产服务
现在只需一个命令就能启动整个生产环境:
docker compose -f compose.prod.yaml up -d --build💡专家建议:使用-d参数让服务在后台运行,就像把餐厅交给专业团队管理一样。
数据库迁移与初始化
应用启动后,我们需要执行数据库迁移:
docker compose -f compose.prod.yaml exec php-fpm php artisan migrate --force⚠️注意:生产环境使用--force参数跳过确认提示。
运维进阶:保障服务稳定运行
部署完成只是开始,让我们一起学习如何维护和优化这个环境。
监控与日志管理
就像餐厅需要监控客流和订单一样,我们需要关注服务的运行状态。
# 查看实时日志 docker compose -f compose.prod.yaml logs -f # 检查服务状态 docker compose -f compose.prod.yaml ps性能优化技巧
🚀快速上手:启用OPcache可以显著提升PHP性能,就像给餐厅加了更多的厨师一样。
最佳实践示例:
; php.ini 生产优化 opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000安全最佳实践
💡专家建议:遵循这些安全原则,让你的应用像银行金库一样安全:
- 使用非root用户运行容器
- 定期更新基础镜像和安全补丁
- 配置资源限制防止单点故障
- 使用Docker Secret管理敏感信息
常见问题排查
当遇到问题时,我们一起按步骤排查:
权限问题:确保storage目录可写
docker compose exec php-fpm chmod -R 775 storage bootstrap/cache服务连接问题:验证服务间通信
docker compose exec php-fpm ping postgres性能瓶颈:检查服务资源使用情况
docker stats
结语
通过这篇完整的Laravel容器化部署指南,我们一起构建了一个稳定、高效且易于维护的生产环境。容器化部署就像把传统的手工制作变成了现代化的流水线生产,不仅提高了效率,还确保了质量的一致性。
记住,好的部署策略就像好的投资策略一样,需要持续优化和调整。现在你已经掌握了Laravel Docker部署的核心技能,接下来就是不断实践和完善。让我们一起在容器化的道路上越走越远!
【免费下载链接】docsSource repo for Docker's Documentation项目地址: https://gitcode.com/gh_mirrors/docs3/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考