DockerでPhalcon3(nginx,php-fpm,phalcon3)

#はじめに
centos7コンテナー上で、
アプリケーションサーバー(nginx→PHP-FPM)みたいなところを目指す。
phalcon3を入れて、おめでとう！的なやつを出すところまで。

#環境
Dockerはインストール済みということで。
foderaでやってます

cat /etc/redhat-release
->Fedora release 24 (Twenty Four)

#Dockerfile

```
FROM centos:7
RUN yum -y update && \
#git
yum install -y git && \
#epel
yum -y install epel-release && \

#remi
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm  && \


#phpもろもろ
yum -y install --enablerepo=remi-php70 php && \
yum -y install --enablerepo=remi-php70 php-devel php-pear && \
yum -y install --enablerepo=remi-php70 php-mysqlnd php-mbstring && \
yum -y install --enablerepo=remi-php70 php-fpm && \

#Zephir
yum -y install --enablerepo=remi-php70 zephir && \

#phalcon3
yum -y install --enablerepo=remi-php70 php-phalcon3 && \

#Phalcon Devtools
git clone https://github.com/phalcon/phalcon-devtools.git /usr/local/src/phalcon-devtools && \
#コマンド化
ln -s /usr/local/src/phalcon-devtools/phalcon.php /usr/bin/phalcon && \
chmod ugo+x /usr/bin/phalcon && \
#nginxリポジトリ追加
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm && \
#nginxインストール
yum install nginx -y && \

# 共通ユーザー作成
useradd -m -s /bin/bash -u 1000 meidaimae && \

#php.ini変更
##date.timezone = "Asia/Tokyo"←タイムゾーンの設定※行頭のコメントアウト;を外して、"Asia/Tokyo"と記述
sed -i 's/\;date\.timezone\ \=/date\.timezone\ \=\ \"Asia\/Tokyo\"/g' /etc/php.ini && \
##mbstring.language = Japanese←デフォルト言語の設定※行頭のコメントアウト;を外す
sed -i 's/\;mbstring\.language\ \=\ Japanese/mbstring\.language\ \=\ Japanese/g' /etc/php.ini && \

#www.conf変更
##nginxに変更
sed -i 's/user\ \=\ apache/user\ \=\ meidaimae/g' /etc/php-fpm.d/www.conf && \
sed -i 's/group\ \=\ apache/group\ \=\ meidaimae/g' /etc/php-fpm.d/www.conf && \
##ソケット
sed -i 's/listen\ \=\ 127\.0\.0\.1\:9000/listen\ \=\ \/var\/run\/php-fpm\/php\-fpm\.sock/g' /etc/php-fpm.d/www.conf && \
sed -i 's/\;listen\.owner\ \=\ nobody/listen\.owner\ \=\ meidaimae/g' /etc/php-fpm.d/www.conf && \
sed -i 's/\;listen\.group\ \=\ nobody/listen\.group\ \=\ meidaimae/g' /etc/php-fpm.d/www.conf && \
sed -i 's/\;listen\.mode\ \=\ 0660/listen\.mode\ \=\ 0660/g' /etc/php-fpm.d/www.conf  && \

#nginx.conf
sed -i 's/user\ \ nginx\;/user\ \ meidaimae\;/g' /etc/nginx/nginx.conf

EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
```
##build&run
下準備
まずは、ディレクトリ作成

```
#Dockerfile置いてる場所にwwwディレクトリを作成
mkdir Dockerfile置いてる場所/www

# Dockerfile置いてる場所にディレクトリを作成
mkdir Dockerfile置いてる場所/conf
```

次にファイル作成

```
vi Dockerfile置いてる場所/conf/default.conf
```

中身は下記をこぴぺ
default.conf

```
server {
    listen      80;
    server_name localhost.dev;
    root        /var/www/phalcon/public;
    index       index.php index.html index.htm;
    charset     utf-8;

    location / {
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    location ~ \.php {
        fastcgi_pass  unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index /index.php;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}
```

いよいよbuild

```
#イメージ作成
docker build -t phalcon ./
```

んで、run

```
#さっき作ったディレクトリをコンテナにマウントする感じでコンテナーを作成
docker run --privileged -d -p 8000:80 -v Dockerfile置いてる場所/www:/var/www -v Dockerfile置いてる場所/conf/:/etc/nginx/conf.d/ --name phalcon_app phalcon /sbin/init
```

##コンフィグ周りの変更
とりあえずシェル起動

```
docker exec -it phalcon_app /bin/bash
```


#phalconプロジェクト作成

```
cd /var/www/
phalcon create-project phalcon
chown -R meidaimae:meidaimae /var/www/
```


###自動起動にして再起動

```
systemctl enable php-fpm.service
systemctl enable nginx.service
#抜けて再起動(少しまつ）
exit
docker restart phalcon_app
```

###一応シェル起動して、プロセス確認(nginxとphp-fpmが起動してたらok)

```
docker exec -it phalcon_app /bin/bash
ps aux | grep -e nginx -e php-fpm
```


###ブラウザで確認(ちょっと間を置いて。。。)
http://localhost:8000
ok!おめでとう！！！！
以上！！

#次回
DBサーバーとlinkさせる。
ちょっとだけphalcon触ってみる

#感想
ふう、やっと出来た。。
インフラの知識身につけんと。。
ビール飲も。

#参考
[Nginx Installation Notes]
(https://docs.phalconphp.com/uk/latest/reference/nginx.html)
[Dockerでつくる開発環境【nginxコンテナ編】]
(http://blog.flup.jp/2016/02/13/devenv_php_phalcon_with_docker/)