当前位置: 首页 > 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 应用提供一个容器化环境。这不仅提高了开发效率,还确保了生产环境的稳定性。赶快试试吧!喜欢这篇文章的话,不要忘了点赞、收藏和分享哦!


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

http://www.lryc.cn/news/414701.html

相关文章:

  • Visual Studio 和 VSCode 哪个好?
  • 百款精选的HTML5小游戏源码,你可以下载并直接运行在你的小程序或者自己的网站上
  • 01 LVS负载均衡群集
  • Redis结合Lua脚本的简单使用
  • Java使用zip4j加密压缩和解压文件与文件夹
  • 一款好用的开源网站内容管理系统
  • Qt Modbus 寄存器读写实例
  • centos安装es、kibana、ik
  • 调试工具之GDB的基本使用
  • C++ //练习 16.14 编写Screen类模板,用非类型参数定义Screen的高和宽。
  • 【Java】深度解析监视器的组成原理
  • Day14-Servlet后端验证码的实现
  • MySQL:数据库权限与角色
  • 等保测评练习卷25
  • 《python语言程序设计》2018第6章第28题 掷骰子 两个色子,分别是1到6
  • Java方法递归
  • 目标跟踪那些事
  • 【Git】 如何将一个分支的某个提交合并到另一个分支
  • 【嵌入式之RTOS】什么是消息队列
  • 9-springCloud集成nacos config
  • 市场主流 AI 视频生成技术的迭代路径
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——1.c++入门(2)
  • 【Python系列】深入理解 Python 中的 `nonlocal` 关键字
  • Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架
  • 破解PyCharm插件更新难题:让IDE焕发新生
  • cmake常用命令学习
  • K8S可视化管理平台KubeSphere
  • Bugku-CTF-聪明的php
  • 【MySQL进阶】MySQL主从复制
  • 本地部署文生图模型 Flux