Files
docker-materio/Docker/php/Dockerfile
T

104 lines
4.7 KiB
Docker

FROM php:8.4-fpm-bookworm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
default-mysql-client \
zip \
net-tools iproute2 \
libzip-dev && \
cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini && \
# docker-php-ext-install -j$(nproc) iconv && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ && \
apt-get install -y imagemagick libmagickwand-dev && \
pecl install imagick && docker-php-ext-enable imagick && \
docker-php-ext-install -j$(nproc) gd && \
docker-php-ext-install pdo_mysql zip && \
docker-php-ext-install opcache && \
docker-php-ext-install bcmath && \
apt-get install -y git vim && \
pecl install redis && \
pecl install xdebug && \
docker-php-ext-enable redis xdebug
RUN export COMPOSER_HOME=/usr/local/composer && \
curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer && \
ln -sf /var/www/html/d8.materio.com/public_html/vendor/bin/drush /usr/local/bin/drush
# todo this is not building any more, do i really need this ? (22-10-2021)
# RUN apt-get install -y curl && \
# curl -sL https://deb.nodesource.com/setup_11.x | bash - && \
# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
# echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
# apt-get update && \
# apt-get install -y nodejs yarn
RUN apt-get install -y rsyslog
COPY ./rsyslog-drupal.conf /etc/rsyslog.d/drupal.conf
# ENTRYPOINT ["sh", "-c", "service rsyslog start ; tail -f /dev/null"]
COPY ./php-custom.ini /usr/local/etc/php/conf.d/php-custom.ini
# Xdebug: off by default on CLI (drush, composer) — mode=debug alone still hooks every
# function call and is what makes CLI commands slow, even with start_with_request=trigger.
# Use `XDEBUG_MODE=debug XDEBUG_TRIGGER=1 drush ...` (see xdebugon/xdebugoff aliases) to debug a CLI run.
# FPM loads an extra ini dir: web debugging stays available (browser XDEBUG_SESSION trigger),
# but never tries to connect on its own — start_with_request=yes cost a ~15s connect timeout
# on every request served by a cold worker when no IDE listens on 9001.
RUN printf "xdebug.mode=off\nxdebug.start_with_request=trigger\n" > /usr/local/etc/php/conf.d/zz-xdebug-cli.ini && \
mkdir -p /usr/local/etc/php/fpm-conf.d && \
printf "xdebug.mode=debug\nxdebug.start_with_request=trigger\n" > /usr/local/etc/php/fpm-conf.d/zz-xdebug-fpm.ini
# COPY ./php-fpm-custom.conf /usr/local/etc/php-fpm.d/php-fpm-custom.conf
ARG USER_UID
ARG USER_UNAME
ARG USER_GID
ARG USER_GNAME
RUN if getent group ${USER_GNAME} ; then groupdel ${USER_GNAME}; fi &&\
groupadd -g ${USER_GID} ${USER_GNAME} &&\
useradd -l -u ${USER_UID} -g ${USER_GNAME} ${USER_UNAME} &&\
echo ${USER_UNAME}:${USER_UNAME} | chpasswd &&\
install -d -m 0755 -o ${USER_UNAME} -g ${USER_GNAME} /home/${USER_UNAME} &&\
chown --changes --silent --no-dereference --recursive \
--from=33:33 ${USER_UID}:${USER_GID} \
/home/${USER_UNAME}
# /.composer \
# /var/run/php-fpm \
# /var/lib/php/sessions \
COPY ./bashrc /home/${USER_UNAME}/.bashrc
COPY ./inputrc /home/${USER_UNAME}/.inputrc
# /home/${USER_UNAME} is a persistent named volume, so files COPYed there only apply on
# first volume creation. Put the xdebug aliases in /etc/bash.bashrc instead, which is part
# of the image and always sourced by interactive shells (docker exec, ssh).
RUN printf "\n# Xdebug is off by default on CLI for speed (see zz-xdebug-cli.ini).\nalias xdebugon='export XDEBUG_MODE=debug XDEBUG_TRIGGER=1'\nalias xdebugoff='unset XDEBUG_MODE XDEBUG_TRIGGER'\n" >> /etc/bash.bashrc
# https://github.com/ProgDroid/composer_update_autocomplete
RUN mkdir /home/${USER_UNAME}/.bin
COPY ./composer_update_autocomplete /home/${USER_UNAME}/.bin/composer_update_autocomplete
RUN printf "complete -C /home/${USER_UNAME}/.composer_update_autocomplete/src/main.rs composer update" >> /home/${USER_UNAME}/.bashrc
# https://dev.to/s1ntaxe770r/how-to-setup-ssh-within-a-docker-container-i5i
RUN apt-get install -y openssh-server openssh-client
# RUN service ssh enable
RUN service ssh start
# as sshd will be launchd as ${USER_UNAME}
RUN chown -R ${USER_UNAME} /etc/ssh
EXPOSE 22
# CMD ["/usr/sbin/sshd","-D"]
# https://stackoverflow.com/questions/36964652/ssh-in-docker-container-causes-http-404
# use \n to make the content into multiple lines
RUN printf "whoami\nPHP_INI_SCAN_DIR=/usr/local/etc/php/conf.d:/usr/local/etc/php/fpm-conf.d php-fpm -D\n/usr/sbin/sshd -D" >> /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]
# USER ${USER_UNAME}