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にあげる!