Laradock을 사용하여 Docker + CentOS + Apache + PHP7 + PostgreSQL 환경을 만듭니다.

소개



업무에서 CodeIgniter용 환경을 만들어야 하고 Laradock을 사용하기로 했습니다.
이번에는 순수한 서버 측 PHP 때문에 Node.js를 설치하지 않는 환경을 구축합니다.

하고 싶은 것은 다음과 같습니다.
  • PHP 실행 환경 만들기
  • 만든 PHP 파일에 웹 서버 (Apache)로 액세스
  • DB에 PostgreSQL을 채용
  • PHP 원격 디버깅하기

  • 그렇다면 아래 절차입니다.
    Docker나 git의 인스톨은 끝난 것으로 합니다.
    텍스트 편집기는 Visual Studio Code를 가정합니다.

    Laradock 구성 파일 편집



    먼저 프로젝트의 디렉토리를 만들고 해당 디렉토리에서 Laradock을 복제합니다.
    # ディレクトリを作成し移動する
    $ mkdir dockerProject && cd dockerProject
    
    # Laradockをクローンする
    $ git clone https://github.com/laradock/laradock.git
    
    # Laradockのgit管理をやめる
    $ rm -rf ./laradock/.git
    
    # 後々必要となるディレクトリを先に作成する
    $ mkdir web && mkdir db
    

    .env 파일을 만들고 내용을 편집합니다.
    # テンプレートをコピーしてenvファイルを作成する
    $ cp ./laradock/env-example ./laradock/.env
    

    dockerProject/laradock/env
    # ローカル上のソースを置くディレクトリを指定する(8行目)
    - APP_CODE_PATH_HOST=../
    + APP_CODE_PATH_HOST=../web
    
    # ローカル上のソースをマウントするサーバー上のディレクトリを指定する(11行目)
    - APP_CODE_PATH_CONTAINER=/var/www:cached
    + APP_CODE_PATH_CONTAINER=/var/www/html:cached
    
    # データの保存先を変更する(14行目)
    - DATA_PATH_HOST=~/.laradock/data
    + DATA_PATH_HOST=../db
    
    # PHPのバージョンを変更する(35行目)
    - PHP_VERSION=7.2
    + PHP_VERSION=7.1
    
    # Nodeをインストールしない(75行目)
    - WORKSPACE_INSTALL_NODE=true
    + WORKSPACE_INSTALL_NODE=false
    
    # Yarnをインストールしない(78行目)
    - WORKSPACE_INSTALL_YARN=true
    + WORKSPACE_INSTALL_YARN=false
    
    # Redisをインストールしない(80行目)
    - WORKSPACE_INSTALL_PHPREDIS=true
    + WORKSPACE_INSTALL_PHPREDIS=false
    
    # Xdebugをインストールする(83行目)
    - WORKSPACE_INSTALL_XDEBUG=false
    + WORKSPACE_INSTALL_XDEBUG=true
    
    # PostgreSQLクライアントをインストールする(107行目)
    - WORKSPACE_INSTALL_PG_CLIENT=false
    + WORKSPACE_INSTALL_PG_CLIENT=true
    
    # Xdebugをインストールする(127行目)
    - PHP_FPM_INSTALL_XDEBUG=false
    + PHP_FPM_INSTALL_XDEBUG=true
    
    # PostgreSQLドライバーをインストールする(136行目)
    - PHP_FPM_INSTALL_PGSQL=false
    + PHP_FPM_INSTALL_PGSQL=true
    
    # PostgreSQLクライアントをインストールする(140行目)
    - PHP_FPM_INSTALL_PG_CLIENT=false
    + PHP_FPM_INSTALL_PG_CLIENT=true
    
    # PostgreSQLドライバーをインストールする(145行目)
    - PHP_WORKER_INSTALL_PGSQL=false
    + PHP_WORKER_INSTALL_PGSQL=true
    
    # HTTP, HTTPSのポートを変更する(158, 159行目)
    - APACHE_HOST_HTTP_PORT=80
    - APACHE_HOST_HTTPS_PORT=443
    + APACHE_HOST_HTTP_PORT=8080
    + APACHE_HOST_HTTPS_PORT=8443
    
    # DocumentRootを変更する(165行目)
    - APACHE_DOCUMENT_ROOT=/var/www/
    + APACHE_DOCUMENT_ROOT=/var/www/html
    

    Apache2의 Dockerfile을 편집합니다.

    dockerProject/laradock/apache2/Dockerfile
    # OSをUbuntuからCentOSに変更する(1行目)
    - FROM webdevops/apache:ubuntu-16.04
    + FROM webdevops/apache:centos-7
    

    PostgreSQL Dockerfile을 편집합니다.

    dockerProject/laradock/postgres/Dockerfile
    # PostgreSQLのバージョンを指定してインストールする(1行目)
    - FROM postgres:alpine
    + FROM postgres:9
    

    Docker로 컨테이너 시작



    이미지를 빌드하고 컨테이너를 시작합니다.
    # docker-compose.ymlのあるディレクトリに移動する
    $ cd laradock
    
    # イメージをビルドしてコンテナをバックグラウンドで起動する(初回は時間が掛かります)
    $ docker-compose up -d --build workspace postgres php-fpm apache2
    

    브라우저에서 localhost:8080에 액세스합니다.



    PHP 실행



    웹 디렉토리 아래에 index.php를 만듭니다.

    dockerProject/web/index.php
    <?php
    echo 'Hello from docker!<br>';
    phpinfo();
    

    만들었으면 브라우저에서 localhost:8080에 다시 액세스합니다.



    DB에 연결



    PHP로 PostgreSQL에 연결해 보겠습니다.

    dockerProject/web/index.php
      <?php
      echo 'Hello from docker!<br>';
    
    + $connection_string = "host=postgres dbname=default user=default password=secret port=5432";
    
    + $link = pg_connect($connection_string);
    
    + if ($link) {
    +   $db_name = pg_dbname($link);
    +   echo '接続に成功しました。<br>';
    +   echo '現在接続しているDBは' . $db_name . 'です。<br>';
    + } else {
    +   echo '接続に失敗しました。<br>';
    + }
    
    + $close_flg = pg_close($link);
    
    + if ($close_flg) {
    +   echo '切断に成功しました。<br>';
    + }
    
      phpinfo();
    



    명령 행에서 psql 명령을 사용해보십시오.
    workspaceコンテナのbashを起動する
    $ docker-compose exec workspace bash
    
    ホスト名(コンテナ名)とユーザ名(ロール名)を指定してpsqlモードに入る
    # psql -h postgres -U default
    Password for user default: secret
    



    DB 전환(자신에서 만든 DB에 연결)



    기본값이 아닌 직접 만든 데이터베이스 사용자로 연결해 봅니다.
    # psql -h postgres -U default
    Password for user default: secret
    
    # create user testuser with password 'testpassword';
    
    # create database testdb with owner testuser;
    
    # \du
    
    # \l
    
    # \q
    




    index.php를 편집합니다.

    dockerProject/web/index.php
      <?php
      echo 'Hello from docker!<br>';
    
    - $connection_string = "host=postgres dbname=default user=default password=secret port=5432";
    + $connection_string = "host=postgres dbname=testdb user=testuser password=testpassword port=5432";
    
      $link = pg_connect($connection_string);
    
      if ($link) {
        $db_name = pg_dbname($link);
        echo '接続に成功しました。<br>';
        echo '現在接続しているDBは' . $db_name . 'です。<br>';
      } else {
        echo '接続に失敗しました。<br>';
      }
    
      $close_flg = pg_close($link);
    
      if ($close_flg) {
        echo '切断に成功しました。<br>';
      }
    
      phpinfo();
    



    PHP 원격 디버깅



    php-fpm 디렉토리 아래의 xdebug.ini를 편집합니다.

    dockerProject/laradock/php-fpm/xdebug.ini
    # 3行目
    - ; xdebug.remote_host=dockerhost
    + xdebug.remote_host=docker.for.mac.localhost  (Docker for Macの場合)
    + xdebug.remote_host={Vagratのホストマシンの接続IPアドレス}  (Vagratの場合)
    
    # 4行目
    - xdebug.remote_connect_back=1
    + xdebug.remote_connect_back=0
    
    # 5行目
    - xdebug.remote_port=9000
    + xdebug.remote_port=9001
    
    # 8行目
    - xdebug.remote_autostart=0
    + xdebug.remote_autostart=1
    
    # 9行目
    - xdebug.remote_enable=0
    + xdebug.remote_enable=1
    
    # 10行目
    - xdebug.cli_color=0
    + xdebug.cli_color=1
    
    # 最終行に追加
    + xdebug.remote_log="/tmp/xdebug_log"
    

    workspace 디렉토리 아래의 xdebug.ini를 편집합니다.

    dockerProject/laradock/workspace/xdebug.ini
    # 3行目
    - ; xdebug.remote_host=dockerhost
    + xdebug.remote_host=docker.for.mac.localhost  (Docker for Macの場合)
    + xdebug.remote_host={Vagratのホストマシンの接続IPアドレス}  (Vagratの場合)
    
    # 4行目
    - xdebug.remote_connect_back=1
    + xdebug.remote_connect_back=0
    
    # 5行目
    - xdebug.remote_port=9000
    + xdebug.remote_port=9001
    
    # 8行目
    - xdebug.remote_autostart=0
    + xdebug.remote_autostart=1
    
    # 9行目
    - xdebug.remote_enable=0
    + xdebug.remote_enable=1
    
    # 10行目
    - xdebug.cli_color=0
    + xdebug.cli_color=1
    
    # 最終行に追加
    + xdebug.remote_log="/tmp/xdebug_log"
    

    구성 파일을 편집한 후 컨테이너를 중지/삭제한 다음 이미지를 다시 빌드하여 컨테이너를 시작합니다.
    $ docker-compose down
    
    $ docker-compose up -d --build workspace postgres php-fpm apache2
    

    Visual Studio Code에서 PHP Debug 확장을 설치합니다.


    설치가 끝나면 왼쪽 사이드 메뉴에서 디버그 아이콘을 클릭한 다음 상단 톱니바퀴 아이콘을 클릭합니다.

    PHP를 선택합니다.


    launch.json이라는 파일이 생성되므로 아래와 같이 편집합니다.

    dockerProject/.vscode/launch.json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Listen for XDebug",
          "type": "php",
          "request": "launch",
    +     "pathMappings": {
    +       "/var/www/html": "${workspaceRoot}/web",
    +     },
    -     "port": 9000
    +     "port": 9001
    
        },
        {
          "name": "Launch currently open script",
          "type": "php",
          "request": "launch",
          "program": "${file}",
          "cwd": "${fileDirname}",
          "port": 9000
        }
      ]
    }
    

    스텝 실행으로 멈추고 싶은 부분에 브레이크 포인트를 붙입니다.



    F5 키를 눌러 디버깅을 시작합니다.



    브라우저에서 localhost:8080에 액세스합니다.
    그러면 브레이크 포인트를 붙인 부분에서 정지하고 디버깅을 할 수 있습니다.



    이제 Laradock을 사용하여 PHP 실행 환경을 만들 수있었습니다.

    좋은 웹페이지 즐겨찾기