Laradock을 이용하여 Laravel 개발 환경 만들기

9792 단어 Laravel
이 글은 CODEBASE okinawa Advent Calendar 2019 다음날 글이다.
이 글에서 저는 Laradock을 사용하여 Laravel 개발 환경을 구축하는 절차를 쓰고 싶습니다.
평소 개발 환경은 Laradock을 사용하지 않았지만, 최근부터 Laravel을 접한 사람들로부터 Laradock의 개발 환경 구축에 걸림돌(migrate 실패)이라는 문의를 받았을 때 해결 방법을 제대로 제시하지 못했기 때문에나도 한번 만져봤어 (PHP 프레임워크 라라벨 웹 어플리케이션 개발을 참고했다고 해서 본 기사에서도 같은 순서로 써 봤어

라라독이 뭐예요?


Laradock is a full PHP development environment based on Docker.
요컨대 Docker를 바탕으로 Laravel의 개발 환경을 제공했다.(자세한 내용은 참조공식 홈페이지, 이해하기 쉬울 수 있음

환경 생성 단계


전제 조건

  • Docker가 설치되어 있음
  • git
  • 설치

    Laradock 다운로드

  • 다음 명령 실행
  • # 作業ディレクトリ作成
    $ mkdir laravel_docker
    
    # 移動
    $ cd laravel_docker
    
    # laradockをclone
    $ git clone https://github.com/LaraDock/laradock.git
    

    컨테이너 초기화

  • 다음 명령 실행
  • # laradockディレクトリに移動
    $ cd laradock
    
    # envファイルをコピー
    $ cp env-example .env
    
    # コンテナの起動 (若干時間かかる)
    $ docker-compose up -d nginx mysql workspace phpmyadmin
    
    # コンテナがちゃんと起動してるか確認
    $ docker ps
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                      NAMES
    42218ff4fdeb        laradock_phpmyadmin   "/docker-entrypoint.…"   10 seconds ago      Up 8 seconds        0.0.0.0:8080->80/tcp                       laradock_phpmyadmin_1
    ce8875359faa        laradock_nginx        "/bin/bash /opt/star…"   47 seconds ago      Up 9 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
    229e9c9b0fb9        laradock_php-fpm      "docker-php-entrypoi…"   49 seconds ago      Up 47 seconds       9000/tcp                                   laradock_php-fpm_1
    3f398da51a14        laradock_workspace    "/sbin/my_init"          50 seconds ago      Up 48 seconds       0.0.0.0:2222->22/tcp                       laradock_workspace_1
    761b70cc0bd2        laradock_mysql        "docker-entrypoint.s…"   51 seconds ago      Up 10 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1
    8f28241ced91        docker:dind           "dockerd-entrypoint.…"   51 seconds ago      Up 49 seconds       2375-2376/tcp                              laradock_docker-in-docker_1
    

    Laravel 프로젝트 만들기

  • 다음 명령 실행
  • # workspaceコンテナに接続
    $ docker-compose exec --user=laradock workspace bash
    
    # Laravelプロジェクト作成
    $ composer create-project laravel/laravel sampleapp --prefer-dist "6.*.*"
    
    # コンテナから出る
    $ exit
    
  • laradock 디렉터리의 .env 파일 설정 변경
  • 변경 전
  • # Point to the path of your applications code on your host
    APP_CODE_PATH_HOST=../
    
  • 변경 후
  • # Point to the path of your applications code on your host
    APP_CODE_PATH_HOST=../sampleapp
    
  • 변경된 설정을 반영하기 위해 컨테이너 재부팅
  • # サービスの停止
    $ docker-compose stop
    
    # サービスの起動
    $ docker-compose up -d nginx mysql
    
  • 브라우저에서 액세스http://localhost, Laravel의 Welcom 화면에서 표시를 확인할 수 있는 경우

  • phpartisanmigrate 실행 가능 여부 확인

  • 오류 중 하나(DB에 연결할 수 없음)
  • laradock@fd5cdbe63d4b:/var/www$ php artisan migrate
    
       Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')
    
      at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
        661|         // If an exception occurs when attempting to run a query, we'll format the error
        662|         // message to include the bindings with SQL, which will make this exception a
        663|         // lot more helpful to the developer instead of just the database's errors.
        664|         catch (Exception $e) {
      > 665|             throw new QueryException(
        666|                 $query, $this->prepareBindings($bindings), $e
        667|             );
        668|         }
        669|
    
      Exception trace:
    
      1   PDOException::("SQLSTATE[HY000] [2002] Connection refused")
          /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
    
      2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "root", "", [])
          /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
    
      Please use the argument -v to see more details.
    
  • DB에 연결할 수 없는 것은 laravel.env을 설정하지 않았기 때문에 Laradock의 기본 설정에 따라 수정된 것 같습니다
  • 변경 전
  • DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravel
    DB_USERNAME=root
    DB_PASSWORD=
    
  • 변경 후(Laradock의 기본 설정에 해당)
  • DB_CONNECTION=mysql
    DB_HOST=mysql
    DB_PORT=3306
    DB_DATABASE=default
    DB_USERNAME=default
    DB_PASSWORD=secret
    
  • 상기 수정 후 다시php artisan migrate 다음과 같은 오류가 발생
  • 오류 2(MySQL 서버 측에서 사용하는 인증 방식이 Laravel 측에서 지원되지 않는 것 같음)
  • laradock@fd5cdbe63d4b:/var/www$ php artisan migrate
    
       Illuminate\Database\QueryException  : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = default and table_name = migrations and table_type = 'BASE TABLE')
    
      at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
        661|         // If an exception occurs when attempting to run a query, we'll format the error
        662|         // message to include the bindings with SQL, which will make this exception a
        663|         // lot more helpful to the developer instead of just the database's errors.
        664|         catch (Exception $e) {
      > 665|             throw new QueryException(
        666|                 $query, $this->prepareBindings($bindings), $e
        667|             );
        668|         }
        669|
    
      Exception trace:
    
      1   PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
          /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
    
      2   PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", [])
          /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
    
      Please use the argument -v to see more details.
    
  • MySQL 사용자의 인증 방식 변경
  • $ docker exec -it laradock_mysql_1 sh
    # mysql -uroot -proot -A
    mysql> alter user 'default'@'%' identified with mysql_native_password by 'secret';
    
  • laradock 수정mysql/my.cnf(추가default_authentication_plugin=mysql_native_password
  • # The MySQL  Client configuration file.
    #
    # For explanations see
    # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
    
    [mysql]
    
    [mysqld]
    sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password // ⬅️追加
    
    
  • 상기 수정 후 다시 php artisan migrate.잘 되고 있으니까 괜찮아요
  • laradock@fd5cdbe63d4b:/var/www$ php artisan migrate
    Migration table created successfully.
    Migrating: 2014_10_12_000000_create_users_table
    Migrated:  2014_10_12_000000_create_users_table (0.07 seconds)
    Migrating: 2014_10_12_100000_create_password_resets_table
    Migrated:  2014_10_12_100000_create_password_resets_table (0.04 seconds)
    Migrating: 2019_08_19_000000_create_failed_jobs_table
    Migrated:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
    

    총결산

  • 지금까지 Laradock을 사용한 적이 없지만 Laravel의 환경 구축은 곧 이루어질 것이니 편리하다
  • 여러 가지가 있어서 이해하기 어려운 부분이 많다
  • 어려운 사람들의 질문을 받을 때 이런 대답을 얻기 위해 노력
  • 참고 자료

  • PHP 프레임워크 Laravel 웹 응용 프로그램 개발 버전 5.5LTS 대응(죽택유귀, 율생화명, 신원아스, 대촌창타랑)
  • [Docker] Laradock으로 Laravel에서 MySQL8.0.4-KM Tech Diary 연결
  • Laradock이 어떻게 만들어졌는지, 뭐가 안 되는지.Endo Tech Blog
  • 좋은 웹페이지 즐겨찾기