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


仕事で[Phalcon](https://phalconphp.com/ja/)(API用)と[Laravel](https://laravel.com)(管理ツール用)を使うことになったので簡単に構築できるものを探したところ[Laradock](https://laradock.io)はLaravelだけじゃなくPhalconも[CakePHP](https://cakephp.org/jp)も対応できるということなので触ってみた備忘です。

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](https://www.sequelpro.com)で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