Docker를 사용하여 Lumen 및 MySQL 설정 - 2부

6567 단어 phplaraveldockermysql
Setting Up Lumen and MySQL With Docker - Part I에서 우리는 Dockerfiledocker-compose.yml 파일로 Lumen 앱을 고정화했습니다. 그런 다음 다음을 실행하여 앱을 시작했습니다.

docker-compose up


이 부분에서 우리는:
  • MySQL 8.0을 docker-compose(볼륨 포함)에 서비스로 추가합니다.
  • 우리의 Dockerfile 에 필요한 PHP 확장을 설치하십시오.
  • .env 파일을 사용하여 docker-compose.yml 파일에 변수를 전달하는 방법을 알아봅니다.
  • Lumen 앱에서 클래스를 활성화Facade하는 방법을 알아봅니다.
  • 데이터베이스 연결을 테스트합니다.

  • 다음은 이 자습서의 GitHub 리포지토리에 대한 링크입니다.

    👉 https://github.com/yossi-abramov/lumen-mysql-docker

    docker-compose.yml에 MySQL 8.0 추가



    이전 게시물에서 이것은 docker-compose.yml 파일이었습니다.

    version: '3.5'
    
    services:
      lumen:
        ports:
          - "8000:8000"
        volumes:
          - .:/var/www/html
          - /var/www/html/vendor/
        build: .
        command: php -S lumen:8000 -t public
        restart: always
    


    이제 데이터를 유지하기 위한 볼륨이 있는 MySQL 8을 추가해 보겠습니다.

    version: "3.5"
    
    services:
      lumen:
        ports:
          - "8000:8000"
        volumes:
          - .:/var/www/html
          - /var/www/html/vendor/
        build: .
        command: php -S lumen:8000 -t public
        restart: always
        depends_on:
          - db
      db:
        image: mysql:8.0
        restart: always
        environment:
          MYSQL_DATABASE: your_db_name
          MYSQL_USER: your_db_user
          MYSQL_PASSWORD: your_db_password
          MYSQL_ROOT_PASSWORD: root
        command: mysqld --default-authentication-plugin=mysql_native_password
        volumes:
          - ./database/mysql-data:/var/lib/mysql:rw
    volumes:
      mysql-data:
    


    docker-compose.yml에는 MySQL 하드코딩된 환경 변수가 있습니다. 우리는 곧 이것을 바꿀 것입니다.

    Docker용 공식 MySQL 이미지에 대한 자세한 내용은 다음을 참조하세요.

    👉 https://hub.docker.com/_/mysql

    pdo_mysql 확장 설치



    데이터베이스가 준비되었지만 Lumen은 pdo_mysql 확장자가 없으면 데이터베이스에 연결할 수 없습니다. 모든 PHP 확장을 활성화하려면 Dockerfile 에 추가하기만 하면 됩니다.

    업데이트된 내용은 다음과 같습니다Dockerfile.

    FROM php:7.3-fpm-alpine
    
    RUN docker-php-ext-install pdo_mysql
    
    WORKDIR /var/www/html/
    
    RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
    
    COPY . .
    
    RUN composer install
    


    Docker용 공식 PHP 이미지에 대한 자세한 내용은 다음을 참조하세요.

    👉 https://hub.docker.com/_/php

    Lumen의 .env 파일 사용



    보시다시피 docker-compose.yml 모든 MySQL 환경 변수는 하드코딩되어 있습니다. Lumen의 .env 변수를 docker-compose.yml에 전달하는 방법은 다음과 같습니다.

    version: "3.5"
    
    services:
      lumen:
        ports:
          - "8000:8000"
        volumes:
          - .:/var/www/html
          - /var/www/html/vendor/
        build: .
        command: php -S lumen:8000 -t public
        restart: always
        depends_on:
          - db
      db:
        image: mysql:8.0
        restart: always
        environment:
          MYSQL_DATABASE: ${DB_DATABASE}
          MYSQL_USER: ${DB_USERNAME}
          MYSQL_PASSWORD: ${DB_PASSWORD}
          MYSQL_ROOT_PASSWORD: root
        command: mysqld --default-authentication-plugin=mysql_native_password
        volumes:
          - ./database/mysql-data:/var/lib/mysql:rw
    volumes:
      mysql-data:
    


    컨테이너를 시작하기 전에 한 가지 더 중요한 단계:
    .env에서 DB_HOSTdocker-compose.yml (이 경우 db)에서 MySQL 서비스 이름으로 설정해야 합니다.

    ...
    DB_HOST=db #MySQL container name
    ...
    


    이제 다음을 사용하여 Docker 컨테이너를 실행할 수 있습니다.

    docker-compose --env-file .env up --build
    


    Docker에서 환경 변수를 사용하는 방법에 대해 자세히 알아보세요.

    👉 https://docs.docker.com/compose/environment-variables/

    Facade 클래스 활성화



    데이터베이스 연결을 테스트하기 위해 연결 세부 정보를 보유하는 DB Facade 및 PDO 개체를 사용합니다. Laravel에서 Façade 클래스는 즉시 사용할 수 있지만 Lumen을 사용하면 $app->withFacades(); 에서 bootstrap/app.php 옵션의 주석 처리를 제거해야 합니다.

    데이터베이스 연결 테스트



    Facades를 활성화한 후 DBroutes/web.php 연결의 PDO 개체에서 dd()를 사용할 수 있습니다.

    <?php
    
    /** @var \Laravel\Lumen\Routing\Router $router */
    
    use Illuminate\Support\Facades\DB;
    
    /*
    |--------------------------------------------------------------------------
    | Application Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register all of the routes for an application.
    | It is a breeze. Simply tell Lumen the URIs it should respond to
    | and give it the Closure to call when that URI is requested.
    |
    */
    
    $router->get('/', function () use ($router) {
        dd(DB::getPDO());
    });
    


    http://localhost:8000으로 이동하여 연결을 지정하는 개체를 가져와야 합니다. 이제 Lumen과 함께 MySQL을 실행하고 있습니다.

    다음 부분에서는 Lumen 컨테이너와 상호 작용하고 마이그레이션, 모델, 모델 팩토리 및 데이터베이스 Seeder를 만듭니다.

    ✍ 더 많은 게시물 보기:
    https://yossiabramov.com/

    좋은 웹페이지 즐겨찾기