返回

用 Docker 容器部署 Laravel 应用程序:图文详解

php

用 Docker 容器部署 Laravel 应用程序:一步一步指南

在现代软件开发中,容器技术已经成为一种主流实践,它允许您将应用程序与所有依赖项打包在一个独立且可移植的容器中。Docker 是一个流行的容器化平台,可帮助您轻松地部署和管理 Laravel 应用程序。本文将引导您完成使用 Docker 容器部署 Laravel 应用程序的分步过程。

步骤 1:构建 Dockerfile

Dockerfile 是一个用于定义如何构建 Docker 镜像的文件。对于 Laravel 应用程序,我们需要一个 Dockerfile 来安装 PHP、Composer、Node.js 以及其他必要的依赖项。以下是一个示例 Dockerfile:

FROM php:8.1-fpm

RUN curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
RUN ["sh", "./nodesource_setup.sh"]

RUN apt-get update && apt-get install -y \
  build-essential \
  openssl \
  nginx \
  libfreetype6-dev \
  libjpeg-dev \
  libpng-dev \
  libwebp-dev \
  zlib1g-dev \
  libzip-dev \
  gcc \
  g++ \
  make \
  vim \
  unzip \
  curl \
  git \
  jpegoptim \
  optipng \
  pngquant \
  gifsicle \
  locales \
  libonig-dev \
  nodejs \
  libgmp-dev \
  pdo_mysql \
  mbstring \
  pdo \
  opcache \
  exif \
  sockets \
  pcntl \
  bcmath \
  zip

# Configure PHP extensions
RUN docker-php-ext-configure gd && docker-php-ext-install gd
RUN docker-php-ext-install gmp
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install pdo
RUN docker-php-ext-enable opcache
RUN docker-php-ext-install exif

# Copy application files
COPY . /var/www

# Copy configuration files
COPY ./docker/php.ini /usr/local/etc/php/local.ini
COPY ./docker/nginx.conf /etc/nginx/nginx.conf

# Set file permissions
RUN chmod +rwx /var/www

# Install Composer and Laravel
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --working-dir="/var/www"
RUN composer dump-autoload --working-dir="/var/www"

# Optimize Laravel application
RUN php artisan optimize
RUN php artisan route:clear
RUN php artisan route:cache
RUN php artisan config:clear
RUN php artisan config:cache
RUN php artisan view:clear
RUN php artisan view:cache

# Run database migrations
RUN php artisan migrate

# Expose ports
EXPOSE 80

# Run post-deployment script
RUN ["chmod", "+x", "post_deploy.sh"]
CMD ["sh", "./post_deploy.sh"]

步骤 2:构建 docker-compose.yml

docker-compose.yml 文件用于定义应用程序的 Docker 容器及其依赖关系。对于 Laravel 应用程序,我们需要一个包含 Web 服务器、数据库和 PHPMyAdmin 的 docker-compose.yml 文件。以下是一个示例:

version: '3.8'
services:
  # Application & web server
  app:
    build: .
    working_dir: /var/www
    volumes:
      - ./:/var/www
    depends_on:
      - database
    ports:
      - 8080:80
  # Database
  database:
    image: mysql:8.0
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      MYSQL_DATABASE: your_database_name
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_PASSWORD: your_database_password
      MYSQL_USER: your_database_user
    ports:
      - 33061:3306
  # Database management
  pma:
    image: phpmyadmin:5.1
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: database
      PMA_USER: your_database_user
      PMA_PASSWORD: your_database_password
      PMA_PORT: 3306
    depends_on:
      - database
    ports:
      - 8888:80
  # Mailing Server
  mailhog:
    image: mailhog/mailhog
    logging:
      driver: 'none'
    ports:
      - 1025:1025
      - 8025:8025

volumes:
  dbdata:

步骤 3:构建容器

一旦您有了 Dockerfile 和 docker-compose.yml 文件,就可以使用以下命令构建容器:

docker-compose up -d

步骤 4:访问应用程序

容器构建完成后,您可以通过在浏览器中导航到 http://localhost:8080 来访问您的 Laravel 应用程序。您现在应该看到您的 Laravel 应用程序正在运行。

常见问题解答

1. 我在构建容器时遇到了错误,该怎么办?

检查网络连接和防火墙设置以确保它们正确配置。您还应该检查 Dockerfile 和 docker-compose.yml 文件是否存在错误或拼写错误。

2. 我无法访问我的应用程序,怎么办?

确保容器正在运行,并且端口已正确映射。您还应该检查您的 Laravel 应用程序的路由和控制器是否配置正确。

3. 如何更新应用程序代码?

只需将代码更新到应用程序目录(/var/www)中,然后重新运行以下命令:

docker-compose up -d --build

4. 如何处理数据库迁移?

在构建容器时,可以通过在 Dockerfile 中添加 RUN php artisan migrate 命令来运行数据库迁移。

5. 如何调试应用程序?

您可以通过附加到容器并使用 Docker exec 命令来调试应用程序:

docker exec -it app bash