diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..115770e6e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,69 @@ +# This Dockerfile contains different images + +ARG PHP_VERSION=8.0 +ARG CADDY_VERSION=2 + +# Build PHP FPM + +ARG APP_ENV=dev + +FROM php:${PHP_VERSION}-fpm-alpine AS symfony_php + +WORKDIR /srv/symfony +VOLUME /var/run/php +VOLUME /srv/symfony/var + +# Install required PHP extensions +RUN set -eux; \ + apk add --no-cache \ + $PHPIZE_DEPS \ + icu-dev \ + ; \ + docker-php-ext-install intl + +COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf + +# Install composer +COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer + +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +# copy only specifically what we need +COPY composer.json composer.lock symfony.lock ./ +COPY assets assets/ +COPY bin bin/ +COPY config config/ +COPY data data/ +COPY migrations migrations/ +COPY public public/ +COPY src src/ +COPY templates templates/ +COPY tests tests/ +COPY translations translations/ +COPY .env .env.test webpack.config.js yarn.lock ./ + +RUN set -eux; \ + composer install --prefer-dist --no-progress; \ + composer clear-cache + + +RUN set -eux; \ + mkdir -p var/cache var/log; \ + composer dump-autoload --classmap-authoritative ; \ + composer run-script post-install-cmd; \ + chmod +x bin/console; sync + + +# Build Caddy image +FROM caddy:${CADDY_VERSION}-builder-alpine AS symfony_caddy_builder + +RUN xcaddy build + +FROM caddy:${CADDY_VERSION} AS symfony_caddy +WORKDIR /srv/symfony + +COPY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy +COPY --from=symfony_php /srv/symfony/public public/ +COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..83289ddbb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3.4" + +services: + php: + build: + context: ./ + target: symfony_php + depends_on: + - db + restart: unless-stopped + volumes: + - php_socket:/var/run/php + + caddy: + build: + context: ./ + target: symfony_caddy + depends_on: + - php + environment: + SERVER_NAME: ${SERVER_NAME:-localhost} + restart: unless-stopped + volumes: + - php_socket:/var/run/php + - caddy_data:/data + - caddy_config:/config + ports: + - "80:80" + - "443:443" + +volumes: + php_socket: + caddy_data: + caddy_config: + diff --git a/docker/caddy/Caddyfile b/docker/caddy/Caddyfile new file mode 100644 index 000000000..cd1ef265e --- /dev/null +++ b/docker/caddy/Caddyfile @@ -0,0 +1,16 @@ +{ + # Debug + {$DEBUG} +} + +{$SERVER_NAME} + +log + +handle { + root * /srv/symfony/public + + php_fastcgi unix//var/run/php/php-fpm.sock + encode zstd gzip + file_server +} diff --git a/docker/php/php-fpm.d/zz-docker.conf b/docker/php/php-fpm.d/zz-docker.conf new file mode 100644 index 000000000..b619aa3c4 --- /dev/null +++ b/docker/php/php-fpm.d/zz-docker.conf @@ -0,0 +1,6 @@ +[global] +daemonize = no + +[www] +listen = /var/run/php/php-fpm.sock +listen.mode = 0666