当前位置: 首页 > news >正文

为 Laravel 提供生产模式下的容器化环境:打造现代开发环境的终极指南

为 Laravel 提供生产模式下的容器化环境:打造现代开发环境的终极指南

在现代开发中,容器化已经成为一种趋势。使用 Docker 可以让我们轻松地管理和部署应用程序。本文将带你一步步构建一个高效的 Laravel 容器化环境,确保你的应用程序在开发和生产环境中都能顺畅运行。

功能:

  1. 拆分队列运行容器和web服务容器
  2. 开发环境和生产环境分离
  3. 日志监控
  4. 方便升级
  5. 可推送K8s环境,实现弹性伸缩.

最终文件结构,laravel 源代码在 src中.
在这里插入图片描述

一、Docker Compose 文件配置

首先,我们需要创建一个 docker-compose.yml 文件,这个文件定义了我们的服务及其配置。

version: '3'
services:      app:build:context: .dockerfile: Dockerfileenvironment:- COMPOSER_PROCESS_TIMEOUT=6000      ports:- 8290:80volumes:- /etc/hosts:/etc/hosts      - ../src:/var/www/htmllogging: # 可以使用loki将log采集,并在grafana中设置监控和告警 driver: lokioptions:loki-url: "http://localhost:3100/loki/api/v1/push"loki-retries: "5"loki-batch-size: "100"no-file: "true"command: bash -c "chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache && service nginx start && php-fpm"worker:build:context: .dockerfile: Dockerfileenvironment:- COMPOSER_PROCESS_TIMEOUT=6000      command: php artisan horizonvolumes:- /etc/hosts:/etc/hosts    - ../src:/var/www/html# laravel 的源代码我们可以放在上层文件夹中logging:driver: lokioptions:loki-url: "http://localhost:3100/loki/api/v1/push"loki-retries: "5"loki-batch-size: "100"no-file: "true"      links:- app
二、Dockerfile 配置

接下来,我们需要编写 Dockerfile 文件,定义应用程序的运行环境。这样可以很容易的拆分开开发和生产环境

# Use the base PHP image with the specified version
FROM php:8.2.14-fpm# Set the working directory inside the container
WORKDIR /var/www/html# Update package lists and install necessary dependencies
RUN apt-get update && apt-get install -y \curl \libpng-dev \libonig-dev \libxml2-dev \zip \unzip \libzip-dev \libjpeg-dev \libfreetype6-dev \libssl-dev \libcurl4-openssl-dev # Install Nginx
RUN apt-get install -y nginx# Install PHP extensions required by your application
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip 
RUN docker-php-ext-install soap
RUN docker-php-ext-install ctype 
RUN docker-php-ext-install curl
RUN docker-php-ext-install dom
RUN docker-php-ext-install fileinfo 
RUN docker-php-ext-install filter
RUN docker-php-ext-install session
RUN docker-php-ext-install xml
RUN docker-php-ext-install ftp# Install and enable the Redis extension
RUN pecl install redis && docker-php-ext-enable redis# Install Xdebug extension
# RUN pecl install xdebug && docker-php-ext-enable xdebug# Copy the application files into the container
# COPY . .# Change ownership of directories used by the application
# RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cacheRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# RUN composer install --optimize-autoloader --no-devCOPY nginx.conf /etc/nginx/sites-available/defaultRUN rm /var/www/html/index.nginx-debian.html# Expose ports 80 and 443 to the outside world
EXPOSE 80
EXPOSE 443# Set the default command to run when the container starts
CMD service nginx start && php-fpm
三、Nginx 配置

创建一个 nginx.conf 文件,配置 Nginx 以服务我们的 Laravel 应用程序。

server {listen 80;server_name localhost;root /var/www/html/public;index index.php index.html index.htm;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {include fastcgi_params;fastcgi_pass  127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_read_timeout 3000;fastcgi_connect_timeout 3000;fastcgi_send_timeout 3000;}location ~ /\.ht {deny all;}
}
四、Makefile 配置

为了更方便地管理 Docker 容器,我们可以使用 Makefile 定义常用的命令。

install: build docker compose run --rm app composer install docker compose run --rm app cp -f .env.prod .envupdate:docker compose run --rm app composer updatecache:docker compose run --rm app php artisan route:cachedocker compose run --rm app php artisan config:cachedocker compose run --rm app composer dump-autoload  -obuild: build-app build-work build-app:docker compose -f docker-compose.yml build appbuild-work:docker compose -f docker-compose.yml build workerstart:docker compose -f docker-compose.yml up -dstop:docker compose -f docker-compose.yml downrestart: docker compose -f docker-compose.yml restartexec:docker compose exec app /bin/bashinfo:docker compose run --rm app php -i

通过以上配置,我们可以轻松地为 Laravel 应用提供一个容器化环境。这不仅提高了开发效率,还确保了生产环境的稳定性。赶快试试吧!喜欢这篇文章的话,不要忘了点赞、收藏和分享哦!


希望这篇文章对你有帮助!如果有任何疑问或建议,欢迎在评论区留言。你的支持是我继续创作的动力!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • go语言怎么把字符串都转化为小写?
  • 睿考网:CPA考试各科难度分析
  • 【数据结构与算法】算法(Algorithm)的基本概念与特性
  • C++第二十八弹---进一步理解模板:特化和分离编译
  • [opencv]opencv源码编译cmake所需缓存文件cache文件下载地址汇总
  • c++初阶知识——string类详解
  • Java反射机制及其应用
  • 学习记录——day24 多进程编程
  • java远程调试
  • 转世重生之当程序员从零开始,不可错过的Jupyter Notebook的详细安装教程 ♪(^∇^*)
  • 【黑马java基础】网络通信
  • 远程连接工具连接不上虚拟机的解决方式(Xshell/Windterm...)
  • ECRS工时分析软件:工业工程精益生产的智慧引擎
  • 日本央行首次加息,同时缩减国债购买规模
  • 当服务器出现蓝屏时有哪些应对措施呢?
  • django开发-定时任务的使用
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux Process Manage
  • nginx 配置多 域名 + 多 https
  • 闭包--闭包之tab栏切换(四)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 用 Swift 编写面向协议的视图
  • 阿里云API、SDK和CLI应用实践方案
  • 容器镜像
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #ifdef 的技巧用法
  • #QT(串口助手-界面)
  • #stm32驱动外设模块总结w5500模块
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)php投票系统 毕业设计 121500
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (四)鸿鹄云架构一服务注册中心
  • (一)VirtualBox安装增强功能
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ******之网络***——物理***
  • .Net IE10 _doPostBack 未定义
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @Transactional 竟也能解决分布式事务?
  • @Value读取properties中文乱码解决方案
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [20171106]配置客户端连接注意.txt
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告