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

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

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

功能:

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

最终文件结构,laravel 源代码在 src中.

一、Docker Compose 文件配置

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

yaml 复制代码
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 文件,定义应用程序的运行环境。这样可以很容易的拆分开开发和生产环境

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 应用程序。

nginx 复制代码
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 定义常用的命令。

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


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

相关推荐
chen_note3 小时前
Dockerfile及其部署镜像步骤
docker·容器·镜像·dockerfile
大孜然9 小时前
Macao资料生成程序,全新的UI 三端自适应PHP空间
php
杨浦老苏9 小时前
开源云文件存储服务器MyDrive
docker·群晖·网盘
PellyKoo9 小时前
Docker容器中中文文件名显示乱码问题完美解决方案
运维·docker·容器
无妄无望10 小时前
在没有网络的环境下安装包pymysql
学习·docker
奥尔特星云大使10 小时前
Docker 拉取 MySQL 5.7 镜像、启动容器并进入 MySQL
数据库·mysql·docker·容器
big男孩11 小时前
Docker使用环境变量的整理
docker
安卓开发者11 小时前
Docker与Nginx:现代Web部署的完美二重奏
前端·nginx·docker
挨踢攻城11 小时前
网络安全 | 如何防御勒索软件?
安全·web安全·网络安全·php·厦门微思网络·防疫勒索软件
低音钢琴12 小时前
【从零开始构建性能测试体系-08】如何诊断性能瓶颈:从服务器到数据库的全方位分析
服务器·数据库·php