1人AdventのDay-18です。
手元で作っていたアプリケーションをPHP7.3に乗せて見たので、その時の内容を晒してみようというのが今回の目論見です。
ちゃちゃっと。
構成について
Herokuで動くようにしています。
ということで、以前に作成したPHP7.2用のイメージをベースにしました。
o0ho0h/heroku-php72-fpm - Docker Hub
これについては、以前まとめたものです。
ファイルの内容
こんな感じになっております
$ tree -L 2 . ├── Dockerfile ├── README.md ├── app │ ├── README.md │ ├── bin │ ├── composer.json │ ├── composer.lock │ ├── config │ ├── index.php │ ├── logs │ ├── phpunit.xml.dist │ ├── plugins │ ├── src │ ├── tests │ ├── tmp │ ├── vendor │ └── webroot ├── composer └── docker-compose.yml
$ cat .docker/etc/nginx/conf.d/default.conf
server {
listen __NGINX_LISTEN_PORT__;
server_name _;
root /var/www/html/app/webroot;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
$ cat .docker/usr/local/etc/php/conf.d/xdebug.ini zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so xdebug.remote_enable = On xdebug.remote_autostart = On xdebug.remote_host = docker.for.mac.localhost xdebug.idekey = PHP_XDEBUG_IDE_KEY_HERE
FROM php:7.3-fpm-alpine
RUN apk add nginx supervisor \
&& mkdir -p /etc/supervisor.d/
RUN apk add \
vim \
git \
zsh
RUN apk add --no-cache \
libgcc \
libtool \
pkgconfig \
re2c \
libressl \
xdg-utils \
openssh-client \
ca-certificates
RUN apk add --virtual build-dependencies \
autoconf \
automake \
make \
gcc \
g++ \
libmcrypt-dev \
zlib-dev \
gmp-dev \
libzip-dev \
libxslt-dev \
icu-dev \
libmcrypt-dev \
libressl-dev
# php7
WORKDIR /usr/src/php/ext
RUN git clone https://github.com/xdebug/xdebug
RUN NPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) \
&& docker-php-ext-install -j${NPROC} \
intl \
xdebug \
zip
RUN docker-php-ext-enable \
#opcache \
xdebug \
&& docker-php-source delete
# setup web
COPY .docker/supervisor.programs.ini /etc/supervisor.d/
COPY .docker/etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
fpm.d/www.conf
RUN rm /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
COPY .docker/run.sh /
RUN chmod a+x /run.sh
RUN adduser -D myapp \
&& apk add --update sudo \
&& echo "myapp ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
COPY ./ /var/www/html
WORKDIR /var/www/html
CMD ["/run.sh"]
$ cat docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "9002:8888"
volumes:
- ./:/var/www/html
- .docker/usr/local/etc/php/conf.d/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
これで、「xdebugの有効なPHP7.3でCakePHPを動かす」ができると思います。
xdebugについて
Dockefile内でxdebug.inをrmすることで、xdebugを無効にしています。
その上で(localでのみ使う想定の)docker-composeではiniファイルをマウントさせており、これによって「xdebugの有効・無効を環境に応じて切り替える」ということをしています。
opcache
ちょっと問題がある?っぽく、opcacheは無効化しています・・・
最初はうまくいかなかったのですが、外してみたら無事にPHPを動作させることができました。はて・・・
まとめ
今日はかなりさっくりです!!
これだけで、簡単にherokuにCakeアプリケーションを放り込めるかな〜と思います。
あとでGitHub/Dockerhubにあげる!