mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-20 17:15:51 +02:00
Restructured frankenphp structure
This commit is contained in:
parent
aa0ec15e67
commit
7271c8c6f1
10 changed files with 57 additions and 183 deletions
|
@ -57,4 +57,5 @@ if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then
|
||||||
setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var
|
setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec docker-php-entrypoint "$@"
|
#exec docker-php-entrypoint "$@"
|
||||||
|
exec "$@"
|
123
Dockerfile
123
Dockerfile
|
@ -1,81 +1,41 @@
|
||||||
#syntax=docker/dockerfile:1.4
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
# Versions
|
|
||||||
FROM dunglas/frankenphp:1-php8.3 AS frankenphp_upstream
|
|
||||||
|
|
||||||
# The different stages of this Dockerfile are meant to be built into separate images
|
|
||||||
# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage
|
|
||||||
# https://docs.docker.com/compose/compose-file/#target
|
|
||||||
|
|
||||||
|
|
||||||
# Base FrankenPHP image
|
RUN apt-get update && apt-get -y install apt-transport-https lsb-release ca-certificates curl zip mariadb-client file acl \
|
||||||
FROM frankenphp_upstream AS frankenphp_base
|
&& curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg \
|
||||||
|
&& sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' \
|
||||||
|
&& apt-get update && apt-get upgrade -y \
|
||||||
|
&& apt-get install -y apache2 php8.3 php8.3-fpm php8.3-opcache php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-bcmath php8.3-intl php8.3-zip php8.3-xsl php8.3-sqlite3 php8.3-mysql gpg \
|
||||||
|
&& apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/*;
|
||||||
|
|
||||||
|
# Create workdir and set permissions if directory does not exists
|
||||||
|
RUN mkdir -p /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# persistent / runtime deps
|
# Copy config files for php and caddy
|
||||||
# hadolint ignore=DL3008
|
ENV PHP_INI_DIR="/etc/php/8.3/"
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
COPY --link .docker/frankenphp/conf.d/app.ini $PHP_INI_DIR/conf.d/
|
||||||
acl \
|
COPY --chmod=755 .docker/frankenphp/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
|
||||||
file \
|
COPY --link .docker/frankenphp/Caddyfile /etc/caddy/Caddyfile
|
||||||
gettext \
|
COPY --link .docker/frankenphp/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/
|
||||||
git \
|
COPY --link .docker/frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN set -eux; \
|
#RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
||||||
install-php-extensions \
|
|
||||||
@composer \
|
|
||||||
apcu \
|
|
||||||
intl \
|
|
||||||
opcache \
|
|
||||||
zip \
|
|
||||||
;
|
|
||||||
|
|
||||||
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
|
# Install node and yarn
|
||||||
ENV COMPOSER_ALLOW_SUPERUSER=1
|
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
||||||
|
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
||||||
|
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - && apt-get update && apt-get install -y nodejs yarn && apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
###> recipes ###
|
# Install FrankenPHP
|
||||||
###> doctrine/doctrine-bundle ###
|
COPY --from=dunglas/frankenphp:1-php8.3 /usr/local/bin/frankenphp /usr/local/bin/frankenphp
|
||||||
RUN install-php-extensions pdo_pgsql
|
|
||||||
###< doctrine/doctrine-bundle ###
|
|
||||||
###< recipes ###
|
|
||||||
|
|
||||||
COPY --link frankenphp/conf.d/app.ini $PHP_INI_DIR/conf.d/
|
# And configure it
|
||||||
COPY --link --chmod=755 frankenphp/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
|
|
||||||
COPY --link frankenphp/Caddyfile /etc/caddy/Caddyfile
|
|
||||||
|
|
||||||
ENTRYPOINT ["docker-entrypoint"]
|
|
||||||
|
|
||||||
HEALTHCHECK --start-period=60s CMD curl -f http://localhost:2019/metrics || exit 1
|
|
||||||
CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile" ]
|
|
||||||
|
|
||||||
# Dev FrankenPHP image
|
|
||||||
FROM frankenphp_base AS frankenphp_dev
|
|
||||||
|
|
||||||
ENV APP_ENV=dev XDEBUG_MODE=off
|
|
||||||
VOLUME /app/var/
|
|
||||||
|
|
||||||
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
|
|
||||||
|
|
||||||
RUN set -eux; \
|
|
||||||
install-php-extensions \
|
|
||||||
xdebug \
|
|
||||||
;
|
|
||||||
|
|
||||||
COPY --link frankenphp/conf.d/app.dev.ini $PHP_INI_DIR/conf.d/
|
|
||||||
|
|
||||||
CMD [ "frankenphp", "run", "--config", "/etc/caddy/Caddyfile", "--watch" ]
|
|
||||||
|
|
||||||
# Prod FrankenPHP image
|
|
||||||
FROM frankenphp_base AS frankenphp_prod
|
|
||||||
|
|
||||||
ENV APP_ENV=prod
|
|
||||||
ENV FRANKENPHP_CONFIG="import worker.Caddyfile"
|
ENV FRANKENPHP_CONFIG="import worker.Caddyfile"
|
||||||
|
|
||||||
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
# Install composer
|
||||||
|
ENV COMPOSER_ALLOW_SUPERUSER=1
|
||||||
COPY --link frankenphp/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
COPY --link frankenphp/worker.Caddyfile /etc/caddy/worker.Caddyfile
|
|
||||||
|
|
||||||
# prevent the reinstallation of vendors at every changes in the source code
|
# prevent the reinstallation of vendors at every changes in the source code
|
||||||
COPY --link composer.* symfony.* ./
|
COPY --link composer.* symfony.* ./
|
||||||
|
@ -84,11 +44,38 @@ RUN set -eux; \
|
||||||
|
|
||||||
# copy sources
|
# copy sources
|
||||||
COPY --link . ./
|
COPY --link . ./
|
||||||
RUN rm -Rf frankenphp/
|
|
||||||
|
|
||||||
|
# Install composer and yarn dependencies for Part-DB
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
mkdir -p var/cache var/log; \
|
mkdir -p var/cache var/log; \
|
||||||
composer dump-autoload --classmap-authoritative --no-dev; \
|
composer dump-autoload --classmap-authoritative --no-dev; \
|
||||||
composer dump-env prod; \
|
composer dump-env prod; \
|
||||||
composer run-script --no-dev post-install-cmd; \
|
composer run-script --no-dev post-install-cmd; \
|
||||||
chmod +x bin/console; sync;
|
chmod +x bin/console; sync;
|
||||||
|
|
||||||
|
RUN yarn install --network-timeout 600000 && yarn build && yarn cache clean && rm -rf node_modules/
|
||||||
|
|
||||||
|
# Use docker env to output logs to stdout
|
||||||
|
ENV APP_ENV=docker
|
||||||
|
ENV DATABASE_URL="sqlite:///%kernel.project_dir%/uploads/app.db"
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
ENTRYPOINT ["docker-entrypoint"]
|
||||||
|
CMD ["frankenphp", "run", "--config", "/etc/caddy/Caddyfile"]
|
||||||
|
|
||||||
|
# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
|
||||||
|
STOPSIGNAL SIGWINCH
|
||||||
|
|
||||||
|
VOLUME ["/var/www/html/uploads", "/var/www/html/public/media"]
|
||||||
|
|
||||||
|
HEALTHCHECK --start-period=60s CMD curl -f http://localhost:2019/metrics || exit 1
|
||||||
|
|
||||||
|
# See https://caddyserver.com/docs/conventions#file-locations for details
|
||||||
|
ENV XDG_CONFIG_HOME /config
|
||||||
|
ENV XDG_DATA_HOME /data
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
EXPOSE 443/udp
|
||||||
|
EXPOSE 2019
|
|
@ -1,41 +0,0 @@
|
||||||
# Development environment override
|
|
||||||
services:
|
|
||||||
php:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
target: frankenphp_dev
|
|
||||||
volumes:
|
|
||||||
- ./:/app
|
|
||||||
- ./frankenphp/Caddyfile:/etc/caddy/Caddyfile:ro
|
|
||||||
- ./frankenphp/conf.d/app.dev.ini:/usr/local/etc/php/conf.d/app.dev.ini:ro
|
|
||||||
# If you develop on Mac or Windows you can remove the vendor/ directory
|
|
||||||
# from the bind-mount for better performance by enabling the next line:
|
|
||||||
#- /app/vendor
|
|
||||||
environment:
|
|
||||||
MERCURE_EXTRA_DIRECTIVES: demo
|
|
||||||
# See https://xdebug.org/docs/all_settings#mode
|
|
||||||
XDEBUG_MODE: "${XDEBUG_MODE:-off}"
|
|
||||||
extra_hosts:
|
|
||||||
# Ensure that host.docker.internal is correctly defined on Linux
|
|
||||||
- host.docker.internal:host-gateway
|
|
||||||
tty: true
|
|
||||||
|
|
||||||
###> symfony/mercure-bundle ###
|
|
||||||
###< symfony/mercure-bundle ###
|
|
||||||
|
|
||||||
###> doctrine/doctrine-bundle ###
|
|
||||||
database:
|
|
||||||
ports:
|
|
||||||
- "5432"
|
|
||||||
###< doctrine/doctrine-bundle ###
|
|
||||||
|
|
||||||
###> symfony/mailer ###
|
|
||||||
mailer:
|
|
||||||
image: axllent/mailpit
|
|
||||||
ports:
|
|
||||||
- "1025"
|
|
||||||
- "8025"
|
|
||||||
environment:
|
|
||||||
MP_SMTP_AUTH_ACCEPT_ANY: 1
|
|
||||||
MP_SMTP_AUTH_ALLOW_INSECURE: 1
|
|
||||||
###< symfony/mailer ###
|
|
|
@ -1,10 +0,0 @@
|
||||||
# Production environment override
|
|
||||||
services:
|
|
||||||
php:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
target: frankenphp_prod
|
|
||||||
environment:
|
|
||||||
APP_SECRET: ${APP_SECRET}
|
|
||||||
MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET}
|
|
||||||
MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET}
|
|
63
compose.yaml
63
compose.yaml
|
@ -1,63 +0,0 @@
|
||||||
services:
|
|
||||||
php:
|
|
||||||
image: ${IMAGES_PREFIX:-}app-php
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
SERVER_NAME: ${SERVER_NAME:-localhost}, php:80
|
|
||||||
MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
|
|
||||||
MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
|
|
||||||
TRUSTED_PROXIES: ${TRUSTED_PROXIES:-127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16}
|
|
||||||
TRUSTED_HOSTS: ^${SERVER_NAME:-example\.com|localhost}|php$$
|
|
||||||
# Run "composer require symfony/orm-pack" to install and configure Doctrine ORM
|
|
||||||
DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:5432/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-15}&charset=${POSTGRES_CHARSET:-utf8}
|
|
||||||
# Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration
|
|
||||||
MERCURE_URL: ${CADDY_MERCURE_URL:-http://php/.well-known/mercure}
|
|
||||||
MERCURE_PUBLIC_URL: https://${SERVER_NAME:-localhost}/.well-known/mercure
|
|
||||||
MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
|
|
||||||
# The two next lines can be removed after initial installation
|
|
||||||
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
|
|
||||||
STABILITY: ${STABILITY:-stable}
|
|
||||||
volumes:
|
|
||||||
- caddy_data:/data
|
|
||||||
- caddy_config:/config
|
|
||||||
ports:
|
|
||||||
# HTTP
|
|
||||||
- target: 80
|
|
||||||
published: ${HTTP_PORT:-80}
|
|
||||||
protocol: tcp
|
|
||||||
# HTTPS
|
|
||||||
- target: 443
|
|
||||||
published: ${HTTPS_PORT:-443}
|
|
||||||
protocol: tcp
|
|
||||||
# HTTP/3
|
|
||||||
- target: 443
|
|
||||||
published: ${HTTP3_PORT:-443}
|
|
||||||
protocol: udp
|
|
||||||
|
|
||||||
# Mercure is installed as a Caddy module, prevent the Flex recipe from installing another service
|
|
||||||
###> symfony/mercure-bundle ###
|
|
||||||
###< symfony/mercure-bundle ###
|
|
||||||
|
|
||||||
###> doctrine/doctrine-bundle ###
|
|
||||||
database:
|
|
||||||
image: postgres:${POSTGRES_VERSION:-16}-alpine
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: ${POSTGRES_DB:-app}
|
|
||||||
# You should definitely change the password in production
|
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
|
|
||||||
POSTGRES_USER: ${POSTGRES_USER:-app}
|
|
||||||
volumes:
|
|
||||||
- database_data:/var/lib/postgresql/data:rw
|
|
||||||
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
|
|
||||||
# - ./docker/db/data:/var/lib/postgresql/data:rw
|
|
||||||
###< doctrine/doctrine-bundle ###
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
caddy_data:
|
|
||||||
caddy_config:
|
|
||||||
###> symfony/mercure-bundle ###
|
|
||||||
###< symfony/mercure-bundle ###
|
|
||||||
|
|
||||||
###> doctrine/doctrine-bundle ###
|
|
||||||
database_data:
|
|
||||||
###< doctrine/doctrine-bundle ###
|
|
Loading…
Add table
Add a link
Reference in a new issue