Docker Compose로 Laravel 개발 환경을 구축

마지막으로, Laravel을 별도의 리포지토리 관리로 하여, 상당히 깨끗이 했다.
Docker Compose로 Laravel 개발 환경 구축

그렇지만, 문득 생각했다,,,, Laravel의 프로젝트명을 바꾸고 싶다. . .
지금은, Nginx의 conf에 베타 쓰기이므로, .env로부터 설정하고 싶다-라고 일로, 해 보았다.
다음에, 여러가지 버전 올리자!

기계 사양


  • Mac mini 2018
  • macOS Catalina (10.15.x)
  • Intel Core-i7 3.2GHz 6 코어
  • 메모리 32GB
  • SSD 512GB

  • Docker 환경


  • Nginx 최신 버전

  • PHP(PHP-FPM) 7.1.x → PHP(PHP-FPM) 7.4.x

  • MySQL 5.7.x → MySQL 8.x

  • Composer 최신판 → Composer 2.x

  • Laravel 5.6 → Laravel 8.x

  • 할 일


  • Docker Compose에서 환경 변수 사용
  • 다양한 버전 업

  • 보충



    각 환경을 오거나 하기 때문에 아래와 같이 기재합니다.
    [Mac]$ MacのターミナルでMac内の作業
    [PHP]$ MacのターミナルからPHPコンテナに接続して作業
    

    .env 파일 만들기



    환경별로 .env를 만들고 싶으므로 .env.example을 만듭니다.
    내용은 하기.
    # APP名
    APP_NAME=laravel
    
    # XDebugポート
    XDEBUG_PORT=9000
    
    # DB
    DATABASE_NAME=hoge
    DATABASE_USER=fuga
    DATABASE_PASSWORD=docker#DOCKER1234
    DATABASE_ROOT_PASSWORD=docker#DOCKER1234
    

    IDE에서 중단 점을 멈추기위한 준비



    IDE에서 브레이크 포인트 멈추지 않고 빠졌기 때문에, 제대로 써 둔다.
    브레이크 포인트를 정지시키기 위해서는, 이하의 포트 설정이 영향을 준다.

    php/xdebug.ini
    xdebug.remote_port = 9001
    
    

    docker-compose.yml
    php:
        〜 略 〜
          - '9000:9001'
    
  • 컨테이너 측의 XDebug와 PHP-FPM(기본값: 9000)이 같은 포트라면 안 좋기 때문에, XDebug 포트를 9001로 즐겁게 한다.
  • xdebug.remote_port와 docker-compose.yml의 컨테이너 측 포트를 동일하게 만듭니다.
  • docker-compose.yml의 호스트 측 포트와 컨테이너 측 포트가 동일하지 않습니다.
  • IDE에서 LISTEN하는 포트는 컨테이너 측 포트 (9001)입니다.

  • ※참고
    참고 PHP docker xdebug

    .gitignore 편집



  • .env 제외
  • .env
    

    docker-compose.yml 편집


    version: '3'
    
    volumes:
        phpsocket:
    
    services:
      nginx:
        〜 略 〜
        volumes:
          - ./src:/home/docker
          - phpsocket:/var/run
        depends_on:
          - php
    
      php:
        〜 略 〜
          - '9000:9000'
        volumes:
          - ./src:/home/docker
          - phpsocket:/var/run
        〜 略 〜
    
      db:
        image: mysql:5.7
        〜 略 〜
          MYSQL_DATABASE: hoge
          MYSQL_USER: fuga
          MYSQL_PASSWORD: docker#DOCKER1234
          MYSQL_ROOT_PASSWORD: docker#DOCKER1234
        〜 略 〜
    

    환경 파일을 각 컨테이너에서 참조하고 싶기 때문에, 아래와 같이 변경.
    version: '3.8'
    
    volumes:
        phpsocket:
    
    services:
      nginx:
        〜 略 〜
        volumes:
          - ./nginx/templates:/etc/nginx/templates
          - ./src:/home/docker
          - phpsocket:/var/run
        depends_on:
          - php
        environment:
          - APP_NAME=${APP_NAME}
    
      php:
        〜 略 〜
          - '${XDEBUG_PORT}:9001'
        volumes:
          - ./src:/home/docker
          - phpsocket:/var/run
        〜 略 〜
    
      db:
        image: mysql:8
        〜 略 〜
          MYSQL_DATABASE: ${DATABASE_NAME}
          MYSQL_USER: ${DATABASE_USER}
          MYSQL_PASSWORD: ${DATABASE_PASSWORD}
          MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
        〜 略 〜
    

    Nginx conf 편집


    ・・・
    server_name laravel.local;
    ・・・
    location / {
        root /home/docker/laravel/public;
        ・・・
    }
    ・・・
    location ~ \.php$ {
        root /home/docker/laravel/public;
        ・・・
    }
    

    위에 환경 변수를 포함하도록 수정.
    ・・・
    server_name ${APP_NAME}.local;
    ・・・
    location / {
        root /home/docker/${APP_NAME}/public;
        ・・・
    }
    ・・・
    location ~ \.php$ {
        root /home/docker/${APP_NAME}/public;
        ・・・
    }
    

    다만, 문서 루트의 환경 변수 임베딩이, 아무래도 에러가 되어 무리였다.
    문서 루트를 위치 밖으로 내보내면 환경 변수를 포함할 수 있습니다.
    ・・・
    server_name ${APP_NAME}.local;
    ・・・
    root /home/docker/${APP_NAME}/public;
    
    location / {
        ・・・
    }
    ・・・
    location ~ \.php$ {
        ・・・
    }
    

    후술 (default.conf의 치환)로 파일명을, conf.d/default.conf → templates/default.conf.template에 리네임.

    default.conf 바꾸기


    # 設定の置換
    COPY conf.d/default.conf /etc/nginx/conf.d/default.conf
    

    docker-compose.yml의 volumes로 해결한다.
    services:
      nginx:
        〜 略 〜
        volumes:
          - ./nginx/templates:/etc/nginx/templates
    

    그래서 Dockerfile 내에서 COPY는 더 이상 필요하지 않습니다.

    Composer2.x를 설치하는 수정


    COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
    

    latest로 하고 있었기 때문에 최신판이 들어 있다고 생각했는데, 왠지 1.x 이었기 때문에 2.x 로 고정.
    COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
    

    XDebug 버전 고정


    RUN pecl install xdebug
    

    이 상태에서 Xdebug 3.x가 설치됩니다.
    Xdebug 2.x 와 Xdebug 3.x 는, 설정 파일의 기술이 다르고, 지금까지의 설정이라고 움직이지 않는다. (빠졌어)
    Xdebug 2.x에 고정. (3.x의 설정은, 또 이번)
    RUN pecl install xdebug-2.9.8
    

    Laravel 준비


    [Mac]$ docker-compose exec --user 1000 php bash
    
    [PHP]$ rm -fdR laravel
    [PHP]$ composer create-project --prefer-dist laravel/laravel laravel "8.*"
    [PHP]$ cd laravel
    [PHP]$ composer require --dev barryvdh/laravel-ide-helper
    [PHP]$ composer require --dev squizlabs/php_codesniffer
    [PHP]$ mkdir bin
    [PHP]$ vi bin/clear-laravel.sh
    ---
    #!/bin/bash
    php artisan view:clear
    php artisan cache:clear
    php artisan config:clear
    php artisan route:clear
    php artisan clear-compiled
    php artisan config:cache
    composer dump-autoload
    php artisan ide-helper:generate
    php artisan ide-helper:models -N
    php artisan ide-helper:meta
    find . -name '._.DS_Store' -type f -ls -delete
    ---
    :wq
    [PHP]$ vi .env.example
    ---
    :%s/DB_HOST=127.0.0.1/DB_HOST=mysql/g
    :%s/DB_DATABASE=laravel/DB_DATABASE=hoge/g
    :%s/DB_USERNAME=root/DB_USERNAME=fuga/g
    :%s/DB_PASSWORD=/DB_PASSWORD="docker#DOCKER1234"/g
    ---
    :wq
    

    완성! !
    htps : // 기주 b. 코 m/보 b타보/도 c케 r3

    ※참고
    docker의 nginx.conf에 환경 변수를 적용하는 방법

    사용법


    [Mac]$ cd <任意のディレクトリ>
    [Mac]$ git clone https://github.com/bobtabo/docker3.git docker
    [Mac]$ cd docker
    [Mac]$ cp -p .env.example .env
    [Mac]$ docker-compose up -d
    ・・・
    Creating mysql ... done
    Creating php   ... done
    Creating nginx ... done
    
    [Mac]$ docker-compose exec --user 1000 php bash
    
    [PHP]$ pwd
    /home/docker
    
    [PHP]$ cd laravel
    [PHP]$ composer install
    [PHP]$ chmod -R 777 storage
    [PHP]$ chmod -R 777 bootstrap/cache
    [PHP]$ cp -p .env.example .env
    [PHP]$ php artisan key:generate
    [PHP]$ chmod 755 bin/clear-laravel.sh
    [PHP]$ bin/clear-laravel.sh
    [PHP]$ php artisan migrate:fresh --seed
    

    동작 확인(Mac 호스트 편집)


    [Mac]$ sudo vi /private/etc/hosts
    ★下記を点線内を追記
    ---
    127.0.0.1 laravel.local
    ---
    :wq
    

    브라우저에서 동작 확인



    http://laravel.local/


    컨테이너 삭제


    [Mac]$ docker-compose down --rmi all --volumes
    

    ※참고
    《멸망의 주문》 Docker Compose로 만든 컨테이너, 이미지, 볼륨, 네트워크를 일괄 완전 소거하는 편리 명령

    좋은 웹페이지 즐겨찾기