Blame | Last modification | View Log
# _ ___ _# | |/ (_)_ __ ___ __ _(_)# | ' /| | '_ ` _ \ / _` | |# | . \| | | | | | | (_| | |# |_|\_\_|_| |_| |_|\__,_|_|## Source base [fpm/apache]ARG BASE="fpm"ARG PHP_VER="8.2"ARG COMPOSER_VER="latest"# Branch nameARG KIMAI="main"# Timezone for imagesARG TIMEZONE="Europe/Berlin"############################ Shared tools############################ full kimai sourceFROM alpine:latest AS git-dev# pass-through Arguments in every stage. See: https://benkyriakou.com/posts/docker-args-emptyARG KIMAIARG TIMEZONERUN apk add --no-cache git && \git clone --depth 1 --branch ${KIMAI} https://github.com/kimai/kimai.git /opt/kimai# production kimai sourceFROM git-dev AS git-prodWORKDIR /opt/kimaiRUN rm -r tests# composer base imageFROM composer:${COMPOSER_VER} AS composer############################ PHP extensions############################fpm alpine php extension baseFROM php:${PHP_VER}-fpm-alpine AS fpm-php-ext-baseRUN apk add --no-cache \# build-toolsautoconf \dpkg \dpkg-dev \file \g++ \gcc \icu-dev \libatomic \libc-dev \libgomp \libmagic \m4 \make \mpc1 \mpfr4 \musl-dev \perl \re2c \# gdfreetype-dev \libpng-dev \# icuicu-dev \icu-data-full \# ldapopenldap-dev \libldap \# ziplibzip-dev \# xsllibxslt-dev# apache debian php extension baseFROM php:${PHP_VER}-apache-bookworm AS apache-php-ext-baseRUN apt-get updateRUN apt-get install -y \libldap2-dev \libicu-dev \libpng-dev \libzip-dev \libxslt1-dev \libfreetype6-dev# php extension gd - 13.86sFROM ${BASE}-php-ext-base AS php-ext-gdRUN docker-php-ext-configure gd \--with-freetype && \docker-php-ext-install -j$(nproc) gd# php extension intl : 15.26sFROM ${BASE}-php-ext-base AS php-ext-intlRUN docker-php-ext-install -j$(nproc) intl# php extension ldap : 8.45sFROM ${BASE}-php-ext-base AS php-ext-ldapRUN docker-php-ext-configure ldap && \docker-php-ext-install -j$(nproc) ldap# php extension pdo_mysql : 6.14sFROM ${BASE}-php-ext-base AS php-ext-pdo_mysqlRUN docker-php-ext-install -j$(nproc) pdo_mysql# php extension zip : 8.18sFROM ${BASE}-php-ext-base AS php-ext-zipRUN docker-php-ext-install -j$(nproc) zip# php extension xsl : ?.?? sFROM ${BASE}-php-ext-base AS php-ext-xslRUN docker-php-ext-install -j$(nproc) xsl# php extension redisFROM ${BASE}-php-ext-base AS php-ext-redisRUN yes no | pecl install redis && \docker-php-ext-enable redis# php extension opcacheFROM ${BASE}-php-ext-base AS php-ext-opcacheRUN docker-php-ext-install -j$(nproc) opcache############################ fpm base build############################ fpm base buildFROM php:${PHP_VER}-fpm-alpine AS fpm-baseARG KIMAIARG TIMEZONERUN apk add --no-cache \bash \coreutils \freetype \haveged \icu \icu-data-full \libldap \libpng \libzip \libxslt-dev \fcgi \tzdata && \touch /use_fpmEXPOSE 9000HEALTHCHECK --interval=20s --timeout=10s --retries=3 \CMD \SCRIPT_NAME=/ping \SCRIPT_FILENAME=/ping \REQUEST_METHOD=GET \cgi-fcgi -bind -connect 127.0.0.1:9000 || exit 1############################ apache base build###########################FROM php:${PHP_VER}-apache-bookworm AS apache-baseARG KIMAIARG TIMEZONECOPY .docker/000-default.conf /etc/apache2/sites-available/000-default.confRUN apt-get update && \apt-get install -y \bash \haveged \libicu72 \libpng16-16 \libzip4 \libxslt1.1 \libfreetype6 && \echo "Listen 8001" > /etc/apache2/ports.conf && \a2enmod rewrite && \touch /use_apacheEXPOSE 8001HEALTHCHECK --interval=20s --timeout=10s --retries=3 \CMD curl -f http://127.0.0.1:8001 || exit 1############################ global base build###########################FROM ${BASE}-base AS baseARG KIMAIARG TIMEZONELABEL maintainer="tobias@neontribe.co.uk"LABEL maintainer="bastian@schroll-software.de"ENV KIMAI=${KIMAI}ENV TIMEZONE=${TIMEZONE}RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone && \# make composer home dirmkdir /composer && \chown -R www-data:www-data /composer# copy startup script & DB checking scriptCOPY .docker/startup.sh /startup.shCOPY .docker/service.sh /service.shCOPY .docker/self-test.sh /self-test.shCOPY .docker/dbtest.php /dbtest.php# copy composerCOPY --from=composer /usr/bin/composer /usr/bin/composer# copy php extensions# PHP extension xslCOPY --from=php-ext-xsl /usr/local/etc/php/conf.d/docker-php-ext-xsl.ini /usr/local/etc/php/conf.d/docker-php-ext-xsl.iniCOPY --from=php-ext-xsl /usr/local/lib/php/extensions/no-debug-non-zts-20220829/xsl.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/xsl.so# PHP extension pdo_mysqlCOPY --from=php-ext-pdo_mysql /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.iniCOPY --from=php-ext-pdo_mysql /usr/local/lib/php/extensions/no-debug-non-zts-20220829/pdo_mysql.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/pdo_mysql.so# PHP extension zipCOPY --from=php-ext-zip /usr/local/etc/php/conf.d/docker-php-ext-zip.ini /usr/local/etc/php/conf.d/docker-php-ext-zip.iniCOPY --from=php-ext-zip /usr/local/lib/php/extensions/no-debug-non-zts-20220829/zip.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/zip.so# PHP extension ldapCOPY --from=php-ext-ldap /usr/local/etc/php/conf.d/docker-php-ext-ldap.ini /usr/local/etc/php/conf.d/docker-php-ext-ldap.iniCOPY --from=php-ext-ldap /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ldap.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ldap.so# PHP extension gdCOPY --from=php-ext-gd /usr/local/etc/php/conf.d/docker-php-ext-gd.ini /usr/local/etc/php/conf.d/docker-php-ext-gd.iniCOPY --from=php-ext-gd /usr/local/lib/php/extensions/no-debug-non-zts-20220829/gd.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/gd.so# PHP extension intlCOPY --from=php-ext-intl /usr/local/etc/php/conf.d/docker-php-ext-intl.ini /usr/local/etc/php/conf.d/docker-php-ext-intl.iniCOPY --from=php-ext-intl /usr/local/lib/php/extensions/no-debug-non-zts-20220829/intl.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/intl.so# PHP extension redisCOPY --from=php-ext-redis /usr/local/etc/php/conf.d/docker-php-ext-redis.ini /usr/local/etc/php/conf.d/docker-php-ext-redis.iniCOPY --from=php-ext-redis /usr/local/lib/php/extensions/no-debug-non-zts-20220829/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/redis.soCOPY --from=php-ext-opcache /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini /usr/local/etc/php/conf.d/docker-php-ext-opcache.iniENV DATABASE_URL="mysql://kimai:kimai@127.0.0.1:3306/kimai?charset=utf8mb4&serverVersion=5.7.40"ENV APP_SECRET=change_this_to_something_unique# The default container name for nginx is nginxENV TRUSTED_PROXIES=nginx,localhost,127.0.0.1ENV TRUSTED_HOSTS=nginx,localhost,127.0.0.1ENV MAILER_FROM=kimai@example.comENV MAILER_URL=null://localhostENV ADMINPASS=ENV ADMINMAIL=ENV DB_TYPE=ENV DB_USER=ENV DB_PASS=ENV DB_HOST=ENV DB_PORT=ENV DB_BASE=ENV COMPOSER_MEMORY_LIMIT=-1# If this set then the image will start, run a self test and then exit. It's used for the release processENV TEST_AND_EXIT=ENV COMPOSER_ALLOW_SUPERUSER=1ENV USER_ID=ENV GROUP_ID=VOLUME [ "/opt/kimai/var" ]CMD [ "/startup.sh" ]############################ final builds############################ developement buildFROM base AS dev# copy kimai develop sourceCOPY --from=git-dev --chown=www-data:www-data /opt/kimai /opt/kimaiCOPY .docker /assets# do the composer deps installationRUN echo \$PATHRUN \export COMPOSER_HOME=/composer && \composer --no-ansi install --working-dir=/opt/kimai --optimize-autoloader && \composer --no-ansi clearcache && \composer --no-ansi require --working-dir=/opt/kimai laminas/laminas-ldap && \cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini && \chown -R www-data:www-data /opt/kimai /usr/local/etc/php/php.ini && \mkdir -p /opt/kimai/var/logs && chmod 777 /opt/kimai/var/logs && \sed "s/128M/-1/g" /usr/local/etc/php/php.ini-development > /opt/kimai/php-cli.ini && \sed -i "s/env php/env -S php -c \/opt\/kimai\/php-cli.ini/g" /opt/kimai/bin/console && \tar -C /opt/kimai -zcvf /var/tmp/public.tgz public && \/opt/kimai/bin/console kimai:version | awk '{print $2}' > /opt/kimai/version.txtENV APP_ENV=devENV DATABASE_URL=ENV memory_limit=256M# production buildFROM base AS prod# copy kimai production sourceCOPY --from=git-prod --chown=www-data:www-data /opt/kimai /opt/kimaiCOPY .docker /assets# do the composer deps installationRUN \export COMPOSER_HOME=/composer && \composer --no-ansi install --working-dir=/opt/kimai --no-dev --optimize-autoloader && \composer --no-ansi clearcache && \composer --no-ansi require --working-dir=/opt/kimai laminas/laminas-ldap && \cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \sed -i "s/expose_php = On/expose_php = Off/g" /usr/local/etc/php/php.ini && \sed -i "s/;opcache.enable=1/opcache.enable=1/g" /usr/local/etc/php/php.ini && \sed -i "s/;opcache.memory_consumption=128/opcache.memory_consumption=256/g" /usr/local/etc/php/php.ini && \sed -i "s/;opcache.interned_strings_buffer=8/opcache.interned_strings_buffer=24/g" /usr/local/etc/php/php.ini && \sed -i "s/;opcache.max_accelerated_files=10000/opcache.max_accelerated_files=100000/g" /usr/local/etc/php/php.ini && \sed -i "s/opcache.validate_timestamps=1/opcache.validate_timestamps=0/g" /usr/local/etc/php/php.ini && \sed -i "s/session.gc_maxlifetime = 1440/session.gc_maxlifetime = 604800/g" /usr/local/etc/php/php.ini && \mkdir -p /opt/kimai/var/logs && chmod 777 /opt/kimai/var/logs && \sed "s/128M/-1/g" /usr/local/etc/php/php.ini-development > /opt/kimai/php-cli.ini && \chown -R www-data:www-data /opt/kimai /usr/local/etc/php/php.ini && \tar -C /opt/kimai -zcvf /var/tmp/public.tgz public && \/opt/kimai/bin/console kimai:version | awk '{print $2}' > /opt/kimai/version.txtENV APP_ENV=prodENV DATABASE_URL=ENV memory_limit=256M