为 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: Dockerfile
    environment:
      - COMPOSER_PROCESS_TIMEOUT=6000      
    ports:
      - 8290:80
    volumes:
      - /etc/hosts:/etc/hosts      
      - ../src:/var/www/html
    logging: # 可以使用loki将log采集,并在grafana中设置监控和告警 
      driver: loki
      options:
        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: Dockerfile
    environment:
      - COMPOSER_PROCESS_TIMEOUT=6000      
    command: php artisan horizon
    volumes:
      - /etc/hosts:/etc/hosts    
      - ../src:/var/www/html
    # laravel 的源代码我们可以放在上层文件夹中
    logging:
      driver: loki
      options:
        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/cache

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# RUN composer install --optimize-autoloader --no-dev

COPY nginx.conf /etc/nginx/sites-available/default

RUN 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 .env

update:
		docker compose run --rm app composer update

cache:
		docker compose run --rm app php artisan route:cache
		docker compose run --rm app php artisan config:cache
		docker compose run --rm app composer dump-autoload  -o

build: build-app build-work 

build-app:
		docker compose -f docker-compose.yml build app

build-work:
		docker compose -f docker-compose.yml build worker

start:
		docker compose -f docker-compose.yml up -d

stop:
		docker compose -f docker-compose.yml down

restart: 
		docker compose -f docker-compose.yml restart

exec:
		docker compose exec app /bin/bash

info:
		docker compose run --rm app php -i

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


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

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值