# Set Environment Variables ENV DEBIAN_FRONTEND noninteractive # Start as root USER root ########################################################################### # Laradock non-root user: ########################################################################### # Add a non-root user to prevent files being created with root permissions on host machine. ARG PUID=1000 ENV PUID ${PUID} ARG PGID=1000 ENV PGID ${PGID} # always run apt update when start and after add new source list, then clean up at end. RUN set -xe; \ apt-get update -yqq && \ pecl channel-update pecl.php.net && \ groupadd -g ${PGID} laradock && \ useradd -u ${PUID} -g laradock -m laradock -G docker_env && \ usermod -p "*" laradock -s /bin/bash && \ apt-get install -yqq \ apt-utils \ # #-------------------------------------------------------------------------- # Mandatory Software's Installation #-------------------------------------------------------------------------- # # Mandatory Software's such as ("php-cli", "git", "vim", ....) are # installed on the base image 'laradock/workspace' image. If you want # to add more Software's or remove existing one, you need to edit the # base image (https://github.com/Laradock/workspace). # # next lines are here becase there is no auto build on dockerhub see https://github.com/laradock/laradock/pull/1903#issuecomment-463142846 libzip-dev zip unzip \ # Install the zip extension php${PHP_VERSION}-zip \ # nasm nasm && \ php -m | grep -q 'zip' # #-------------------------------------------------------------------------- # Optional Software's Installation #-------------------------------------------------------------------------- # # Optional Software's will only be installed if you set them to `true` # in the `docker-compose.yml` before the build. # Example: # - WORKSPACE_INSTALL_NODE=false # - ... # ########################################################################### # Set Timezone ########################################################################### ARG TZ=Europe/Moscow ENV TZ ${TZ} RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ########################################################################### # Root Aliases ########################################################################### USER root COPY ./aliases.sh /root/aliases.sh RUN sed -i 's/\r//' /root/aliases.sh && \ echo "" >> ~/.bashrc && \ echo "# Load Custom Aliases" >> ~/.bashrc && \ echo "source ~/aliases.sh" >> ~/.bashrc && \ echo "" >> ~/.bashrc \ ########################################################################### # ssh: ########################################################################### USER root ARG INSTALL_SSH=false ENV INSTALL_SSH ${INSTALL_SSH} RUN if [ ${INSTALL_SSH} = true ]; then \ rm -f /etc/service/sshd/down \ ;fi USER laradock RUN if [ ${INSTALL_SSH} = true ]; then \ mkdir -p ~/.ssh \ && ln -s /run/secrets/user_ssh_key ~/.ssh/id_rsa \ && ln -s /run/secrets/user_known_hosts ~/.ssh/known_hosts \ ;fi ########################################################################### # MySQL Client: ########################################################################### USER root ARG INSTALL_MYSQL_CLIENT=false RUN if [ ${INSTALL_MYSQL_CLIENT} = true ]; then \ apt-get update -yqq && \ apt-get -y install mysql-client \ ;fi ########################################################################### # fswatch ########################################################################### USER root ARG INSTALL_FSWATCH=false RUN if [ ${INSTALL_FSWATCH} = true ]; then \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 47FE03C1 \ && add-apt-repository -y ppa:hadret/fswatch \ || apt-get update -yqq \ && apt-get -y install fswatch \ ;fi ########################################################################### # ping: ########################################################################### USER root ARG INSTALL_PING=false RUN if [ ${INSTALL_PING} = true ]; then \ apt-get update -yqq && \ apt-get -y install inetutils-ping \ ;fi ########################################################################### # Install S3 minio client: ########################################################################### USER root ARG INSTALL_S3_MINIO_CLIENT=false RUN if [ ${INSTALL_S3_MINIO_CLIENT} = true ]; then \ curl https://dl.min.io/client/mc/release/linux-amd64/mc > /usr/local/sbin/mc \ && chmod +x /usr/local/sbin/mc \ ; fi ########################################################################### # xDebug: ########################################################################### RUN if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ pecl install xdebug-2.5.5; \ elif [ $(php -r "echo PHP_MAJOR_VERSION;") = "8" ]; then \ if [ $(php -r "echo PHP_MINOR_VERSION;") = "1" ]; then \ pecl install xdebug-3.1.6; \ elif [ $(php -r "echo PHP_MINOR_VERSION;") = "2" ]; then \ pecl install xdebug-3.3.1; \ else \ pecl install xdebug; \ fi \ else \ pecl install xdebug-2.9.8; \ fi && \ echo ';zend_extension=xdebug.so' > /etc/php/${PHP_VERSION}/cli/conf.d/20-xdebug.ini && \ echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc ########################################################################### # BZ2: ########################################################################### ARG INSTALL_BZ2=false RUN if [ ${INSTALL_BZ2} = true ]; then \ apt-get install -y php${PHP_VERSION}-bz2 \ ;fi ########################################################################### # Non-root user : PHPUnit path ########################################################################### # add ./vendor/bin to non-root user's bashrc (needed for phpunit) USER laradock RUN echo "" >> ~/.bashrc && \ echo 'export PATH="/var/www/vendor/bin:$PATH"' >> ~/.bashrc ########################################################################### # Check PHP version: ########################################################################### RUN set -xe; php -v | head -n 1 | grep -q "PHP ${PHP_VERSION}." ########################################################################### # WP CLI: ########################################################################### # The command line interface for WordPress USER root ARG INSTALL_WP_CLI=false RUN if [ ${INSTALL_WP_CLI} = true ]; then \ curl -fsSL -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar | bash && \ chmod +x /usr/local/bin/wp \ ;fi ########################################################################### # Node / NVM: ########################################################################### USER laradock ENV NVM_DIR /home/laradock/.nvm RUN mkdir -p $NVM_DIR && \ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash \ && . $NVM_DIR/nvm.sh # Wouldn't execute when added to the RUN statement in the above block # Source NVM when loading bash since ~/.profile isn't loaded on non-login shell RUN echo "" >> ~/.bashrc && \ echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc # Add NVM binaries to root's .bashrc USER root RUN cp -R /home/laradock/.nvm /root/ && \ chown -R root:root /root/.nvm && \ echo "" >> ~/.bashrc && \ echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc ########################################################################### # Tmux ########################################################################### USER root RUN apt-get update -yqq && apt-get install -y tmux COPY ./tmux.conf /etc/tmux.conf ########################################################################### # Remove DST_Root_CA3 ########################################################################### USER root RUN sed -i 's/^mozilla\/DST_Root_CA_X3\.crt/!mozilla\/DST_Root_CA_X3.crt/g' /etc/ca-certificates.conf && update-ca-certificates ########################################################################### # Artisan bash autocompletion from symphony # @see https://wintercms.com/docs/v1.2/docs/console/introduction#autocompletion--suggested-input-values ########################################################################### RUN apt install bash-completion COPY /completion.sh /etc/bash_completion.d/artisan ########################################################################### # Tune opts: ########################################################################### ARG PHP_OPT_MAX_EXECUTION_TIME=600 RUN sed -i "s/^max_execution_time = .*/max_execution_time = $PHP_OPT_MAX_EXECUTION_TIME/g" /etc/php/${PHP_VERSION}/cli/php.ini ARG PHP_OPT_MEMORY_LIMIT=256M RUN sed -i "s/^memory_limit = .*/memory_limit = $PHP_OPT_MEMORY_LIMIT/g" /etc/php/${PHP_VERSION}/cli/php.ini ARG PHP_OPT_POST_MAX_SIZE=48M RUN sed -i "s/^post_max_size = .*/post_max_size = $PHP_OPT_UPLOAD_MAX_FILESIZE/g" /etc/php/${PHP_VERSION}/cli/php.ini ARG PHP_OPT_UPLOAD_MAX_FILESIZE=16M RUN sed -i "s/^upload_max_filesize = .*/upload_max_filesize = $PHP_OPT_UPLOAD_MAX_FILESIZE/g" /etc/php/${PHP_VERSION}/cli/php.ini # #-------------------------------------------------------------------------- # Final Touch #-------------------------------------------------------------------------- # USER root # Clean up RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ rm /var/log/lastlog /var/log/faillog # Set default work directory WORKDIR /var/www