vagarant+php7.2+nginx+phalconの環境を作る

#ディレクトリの作成
phalconディレクトリを作成し、その中に同期用のsyncディレクトリを作成する。

```shell
$cd phalcon
$mkdir sync
$vagrant init CentOS7
```

作成されたVagrantfileを編集し、以下のようにする。

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "CentOS7"
  #ローカルでアクセスするときのIPアドレス。
  config.vm.network "private_network", ip: "192.168.10.10"
  #同期先を指定。「カレントディレクトリ（.）を/vagrant以下に同期」と、「syncディレクトリを/var/www/」以下に同期する。
  config.vm.synced_folder ".", "/vagrant"
  config.vm.synced_folder "sync", "/var/www/"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  #ここで、epelとremiを使えるようにします。
  config.vm.provision "shell", inline: <<-SHELL
    sudo yum update -y
    sudo yum -y install epel-release
    sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  SHELL
end

```

そのあとにvagrantを立ち上げ、sshで中に入る。*

```shell
$ vagrant up
$ vagrant ssh
```

*ここでエラーが出た時は[Vagrant cannot forward the specified ports on this VM, since they would collide with some other application that is already listening on these ports. の解決方法](https://qiita.com/wjtnk/items/60d8ed1ec3ab30e0a9fe)を確認してください。


vagrantの中に入ったら、ifconfigで先ほど指定した192.168.10.10にアクセスできているか確認する。

```shell
$ ifconfig
~~~略~~~~~
inet 192.168.10.10
~~~略~~~~~
```
のような表記があればOK。なければor違うIPになっていたら、一度vagrantから抜けて、reloadし、再度接続する。

（以下はない人だけね）

```shell
[vagrant@localhost]$ exit
$vagrant reload
$vagrant ssh
```
もう一度確認し、ifconfigで192.168.10.10にアクセスできているかを確認。


#必要なものインストール
php7.2,php-fpm、nginxなど、起動に必要なものをインストールする。

```shell
$ sudo yum install --enablerepo=remi-php72 php php-mbstring php-mcrypt php-mysqlnd php-pdo php-fpm nginx -y
```
php,php-fpmのバージョンを確認します。

```shell
$ php -v
$ php-fpm -v
```

#phalconのインストール

以下のコマンドで、php72に対応した、php-phalcon3をインストールします。

```shell
$ sudo yum install --enablerepo=remi-php72 php-phalcon3 -y
```


#php-fpmの設定の編集

```/etc/php-fpm.d/www.conf
以下はコメントアウトして、
; user = apache 
; group = apache
; listen = 127.0.0.1:9000
;listen.owner = nobody
;listen.group = nobody

以下を追記
user = nginx    
group = nginx    
listen = /run/php-fpm/php-fpm.sock  
listen.owner = nginx 
listen.group = nginx   
```
#nginxの設定の編集
ドキュメントルートを「root /var/www;」に変更します。
これはngixがホスト側のsyncディレクトリの同期先の/var/wwwを見に行くようにするためです。(vagrantfileで設定した通り)

「location /」というところがあるので、そこも編集します。これは、ルートにアクセスした時にどのファイルを表示するか設定するためです。index.phpを最初に探すように設定します。


また、最後に拡張子が「.php」のファイルを読み込ませるように設定します。

```/etc/nginx/nginx.conf

server {
  listen       80 default_server;
  listen       [::]:80 default_server;
  server_name  _;
  root         /var/www; #追記

-------略--------

    location / {
        index index.php index.html index.htm;
    }

-------略--------
#以下を追記
location ~ .php$ {
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    include fastcgi_params;
}
```


設定を反映させるために、php-fpm,nginxを再起動します。

```shell
$ sudo systemctl restart php-fpm
$ sudo systemctl restart nginx
```

php-fpm,nginxの起動を確認。

```shell
$ sudo systemctl status php-fpm
$ sudo systemctl status nginx
```

「Active: active (running)」みたいな表記があれば成功。


#ファイアーウォール

このままではファイアーウォールによって阻まれアクセスできないため、80番ポート（httpのポート）を解放します。

```shell
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
```

ここで、設定の確認をするために、

syncディレクトリ以下に、index.phpを作成。

```php:index.php
<?php phpinfo();
```

実際に、192.168.10.10にアクセスし、以下のような画面が出てくればOK。

<img width="1042" alt="スクリーンショット 2019-04-27 15.01.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388525/5558cd6c-44c2-d306-05b6-750c521f8d0e.png">

<img width="1248" alt="スクリーンショット 2019-04-27 15.01.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388525/e577c63a-b46d-ba4d-7994-ba06f275e3af.png">

これでphp7.2と、phalconのインストールができたことがわかります。

#fhalconのディベロッパーツール
次にfhalconのディベロッパーツールを作成します。
一旦、vagrantを抜け、phalcon/syncディレクトリまで移動し、そこで、phalcon-devtoolsをgitからクローンします。
これは、ホストマシンと、ゲストマシンが同期しているために可能になります。sync以下にクローンしたレポジトリは、var/wwwに同期されます。
今回はゲストマシンにgitをいれていないため、ゲストマシンから直接クローンはできません。

終了したらvagrantの中に戻ります。

```shell
$ cd phalcon/sync
$ git clone git://github.com/phalcon/phalcon-devtools.git
$ vagrant ssh
```
そのあと、vagrant内でphalcon-devtoolsのあるディレクトリまで行き、「. ./phalcon.sh」を実行。
(. ./phalcon.shの先頭の「.」も忘れないでください。)

```shell
$ cd /var/www/phalcon-devtools
$ . ./phalcon.sh
```
以下のようになればおk
<img width="897" alt="スクリーンショット 2019-04-27 15.08.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388525/0f2db6f6-ccd1-8f47-a00a-4daad009e4ca.png">

phalcon-devtools/phalcon.phpの場所から、/usr/bin/phalconへのシンボリックリンクを作成し,権限を変更します。

```shell
$ sudo ln -s /var/www/phalcon-devtools/phalcon.php /usr/bin/phalcon
$ chmod ugo+x /usr/bin/phalcon
```
これで、phalconのコマンドが使えるようになっているはずなので、「phalcon commands」で確認します。
以下のようになっていればおk。

```shell
$ phalcon commands

Phalcon DevTools (3.4.0)

Available commands:
  info             (alias of: i)
  commands         (alias of: list, enumerate)
  controller       (alias of: create-controller)
  module           (alias of: create-module)
  model            (alias of: create-model)
  all-models       (alias of: create-all-models)
  project          (alias of: create-project)
  scaffold         (alias of: create-scaffold)
  migration        (alias of: create-migration)
  webtools         (alias of: create-webtools)
  serve            (alias of: server)
  console          (alias of: shell, psysh)
```
#fhalconプロジェクト作成

fhalconプロジェクトを作成します。
var/www以下に作成しようと思うので、var/wwwに、移動して、
以下のコマンドを打ちます。
myappというアプリが作成されます。

```shell
$ cd /var/www
$ phalcon project myapp simple
```

続いて、先ほど変更したnginxのドキュメントルートを/var/www/myapp/publicに変更します。

```/etc/nginx/nginx.conf
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /var/www/myapp/public;
```

設定を反映させるため、nginxを再起動します。

```shell
$ sudo systemctl restart nginx
```

192.168.10.10にアクセスして、

<img width="920" alt="スクリーンショット 2019-04-27 15.22.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388525/70146fa3-2b89-e556-96d1-1843444842f6.png">

こんな画面になれば完成です！！