Edited at

Mac上にLaradockを使ってPHP7.2-Phalcon開発環境を整える

仕事でPhalcon(API用)とLaravel(管理ツール用)を使うことになったので簡単に構築できるものを探したところLaradockはLaravelだけじゃなくPhalconもCakePHPも対応できるということなので触ってみた備忘です。

confなどをvolums設定するのは後回しにしています。


# 1.Laradockをインストール

作業フォルダを作成

~ $ mkdir ~/projectZ
~ $ cd ~/projectZ

Laradockをgit clone
~/projectZ $ git clone https://github.com/LaraDock/laradock.git
~/projectZ $ cd laradock



# 2.設定ファイルを編集する

.envファイルをサンプルからコピー

~/projectZ/laradock $ cp env-example .env

.envファイルの必要な部分だけ書き換える
~/projectZ/laradock $ vi .env
            - PHP_VERSION=7.1
            + PHP_VERSION=7.2
            - WORKSPACE_INSTALL_GMP=false
            + WORKSPACE_INSTALL_GMP=true
            - WORKSPACE_INSTALL_PHALCON=false
            + WORKSPACE_INSTALL_PHALCON=true
            - PHP_FPM_INSTALL_GMP=false
            + PHP_FPM_INSTALL_GMP=true
            - PHP_FPM_INSTALL_PHALCON=false
            + PHP_FPM_INSTALL_PHALCON=true
            + DB_HOST=mysql
            + REDIS_HOST=redis

MySQLは8.0系にはしないので5.7に変更
~/projectZ/laradock $ vi mysql/Dockerfile
            - FROM mysql:latest // このままだと8.0が入る
            + FROM mysql:5.7


  • 本当はPHP7.3を入れたかったのですが、2019/05/15時点ではphalcon-devtoolsがphp73-phalconに対応していないようなので断念しました



# 3.コンテナ起動

~/projectZ/laradock $ docker-compose up -d nginx mysql redis

 Starting laradock_nginx_1 ... done
 Starting laradock_php-fpm_1 ... done
 Starting laradock_workspace_1 ... done
 Starting laradock_mysql_1 ... done
 Starting laradock_docker-in-docker_1 ... done
 Starting laradock_redis_1 ... done

~/projectZ/laradock $ docker-compose ps
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 6a28ccf5e878 laradock_nginx "/bin/bash /opt/star…" 1 minutes ago Up 1 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1
 0b5a50eddb69 laradock_php-fpm "docker-php-entrypoi…" 1 minutes ago Up 1 minutes 9000/tcp laradock_php-fpm_1
 9b20fc6f9ffa laradock_workspace "/sbin/my_init" 1 minutes ago Up 1 minutes 0.0.0.0:2222->22/tcp laradock_workspace_1
 a6112275c62f laradock_mysql "docker-entrypoint.s…" 1 minutes ago Up 1 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
 9e7c645933bc docker:dind "dockerd-entrypoint.…" 1 minutes ago Up 1 minutes 2375/tcp laradock_docker-in-docker_1
 f5ff8f4da0c7 laradock_redis "docker-entrypoint.s…" 1 minutes ago Up 1 minutes 0.0.0.0:6379->6379/tcp laradock_redis_1


  • 試しにSequelProでlocalhost:3306にアクセスしたところ、正常にMySQLコンテナのデータベースにアクセスできました



# 4.Phalconアプリケーション作成

Laradock作業コンテナ(workspace)に入る

~/projectZ/laradock $ docker-compose exec --user=laradock workspace bash
>>>>ここからコンテナ内

 phalcon-devtoolsをインストール
 laradock@xxxxx:/var/www $ composer create-project phalcon/devtools phalcon-devtools

 phalconアプリケーションを作成
 laradock@xxxxx:/var/www $ php phalcon-devtools/phalcon.php create-project phalcon-appli
 laradock@xxxxx:/var/www $ exit
>>>>ここまでコンテナ

コンテナ内から作成したアプリケーションがMacのprojectZに存在することを確認
~/projectZ/laradock $ ls -la ../
total 32
drwxr-xr-x 11 my-user staff 352 5 16 12:45 .
drwxr-xr-x+ 74 my-user staff 2368 5 16 15:01 ..
-rw-r--r--@ 1 my-user staff 6148 5 16 11:50 .DS_Store
drwxr-xr-x 22 my-user staff 704 5 15 14:40 phalcon-appli
drwxr-xr-x 27 my-user staff 864 5 15 17:35 phalcon-devtools
drwxr-xr-x 77 my-user staff 2464 5 15 14:31 laradock


  • .envに記載されているAPP_CODE_PATH_HOST=../を変更すれば生成されるアプリケーションの保存先を変更できます

  • .envに記載されているDATA_PATH_HOST=~/.laradock/dataにはコンテナ内の永続化データが格納されます


    • 今回は~/.laradock/data/mysql~/.laradock/data/redisが保存されていると思います





# 5.PhalconアプリケーションをNginxに設定する

Nginxコンテナに入る

~/projectZ/laradock $ docker-compose exec nginx bash

>>>>ここからコンテナ内
 ホストのvolumeが共有されていることを確認
 bash-4.4# ls -la /var/www
 total 4
 drwxr-xr-x 5 root root 160 May 15 04:23 .
 drwxr-xr-x 1 root root 4096 May 15 04:19 ..
 drwxr-xr-x 25 www-data www-data 704 May 15 05:40 phalcon-appli
 drwxr-xr-x 27 root root 864 May 15 05:35 phalcon-devtools
 drwxr-xr-x 75 root root 2464 May 15 05:31 laradock

 phalcon-appli用nginx.confを追加する
 bash-4.4# cp /etc/nginx/sites-available/app.conf.example /etc/nginx/sites-available/phalcon-appli.conf
 bash-4.4# vi /etc/nginx/sites-available/phalcon-appli.conf
  - server_name app.test;
  + server_name phalcon-appli;
  - root /var/www/app;
  + root /var/www/phalcon-appli/public;
 bash-4.4# exit
>>>>ここまでコンテナ



# 6.コンテナ再起動

全コンテナを再起動

~/projectZ/laradock $ docker-compose restart
 Restarting laradock_nginx_1 ... done
 Restarting laradock_php-fpm_1 ... done
 Restarting laradock_workspace_1 ... done
 Restarting laradock_mysql_1 ... done
 Restarting laradock_docker-in-docker_1 ... done
 Restarting laradock_redis_1 ... done



# 7.Macのhosts設定を変更

~/projectZ/laradock $ sudo vi /etc/hosts

+ 127.0.0.1 phalcon-appli



# 8.ブラウザアクセスを確認

http://phalcon-appli/


  • こうしておくと、cake-appliなどを追加して共存したい時に、5~7の設定をすればhttp://phalcon-appli/http://cake-appli/でアクセスできます



# 9.感想


  • Laradockは大体のメジャーな機能が入っているので、開発環境をパッと作って動かすにはとても便利

  • confファイルとかマウントするともっと簡単になるのでカスタマイズしてgitに上げておきたい

  • EC2上のAmazonLinuxでも全く同じ手順で動かせたので社内環境にも使えそう


    • セットアップ時はスペックが欲しいのでt2.large

    • セットアップし終わったらt2.smallで動くのがありがたい

    • 本番環境とステージング環境はチューニングしないとダメなのでそれは別途...




# 10.備考


  • workspaceコンテナでcomposer create-project --prefer-dist cakephp/app cake-appliでCakePHPをセットアップすることも可能

  • 他にも色々なサービスをコンテナとしてセットアップ可能


    • Percona/MSSQL/MariaDB/PostgreSQL(データベースエンジン)

    • Minio(S3互換ストレージ)

    • elasticsearch(検索&分析エンジン)

    • kibana(データビジュアライズ)

    • beanstalk(キュー)

    • Selenium(テストツール)

    • Varnish/HAPROXY(プロキシ)

    • grafana(負荷監視)

    • blackfire(プロファイル)

    • ZooKeeper(分散処理)

    • gitlab(バージョン管理)...etc