FROM ubuntu:20.04 LABEL maintainer="Brady Wetherington " # No need to add `apt-get clean` here, reference: # - https://github.com/snipe/snipe-it/pull/9201 # - https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#apt-get RUN export DEBIAN_FRONTEND=noninteractive; \ export DEBCONF_NONINTERACTIVE_SEEN=true; \ echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \ echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \ apt-get update -qqy \ && apt-get install -qqy --no-install-recommends \ apt-utils \ apache2 \ apache2-bin \ libapache2-mod-php7.4 \ php7.4-curl \ php7.4-ldap \ php7.4-mysql \ php7.4-gd \ php7.4-xml \ php7.4-mbstring \ php7.4-zip \ php7.4-bcmath \ patch \ curl \ wget \ vim \ git \ cron \ mysql-client \ supervisor \ cron \ gcc \ make \ autoconf \ libc-dev \ pkg-config \ libmcrypt-dev \ php7.4-dev \ ca-certificates \ unzip \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN curl -L -O https://github.com/pear/pearweb_phars/raw/master/go-pear.phar RUN php go-pear.phar RUN pecl install mcrypt-1.0.3 RUN bash -c "echo extension=/usr/lib/php/20190902/mcrypt.so > /etc/php/7.4/mods-available/mcrypt.ini" RUN phpenmod mcrypt RUN phpenmod gd RUN phpenmod bcmath RUN sed -i 's/variables_order = .*/variables_order = "EGPCS"/' /etc/php/7.4/apache2/php.ini RUN sed -i 's/variables_order = .*/variables_order = "EGPCS"/' /etc/php/7.4/cli/php.ini RUN useradd -m --uid 1000 --gid 50 docker RUN echo export APACHE_RUN_USER=docker >> /etc/apache2/envvars RUN echo export APACHE_RUN_GROUP=staff >> /etc/apache2/envvars COPY docker/000-default.conf /etc/apache2/sites-enabled/000-default.conf #SSL RUN mkdir -p /var/lib/snipeit/ssl #COPY docker/001-default-ssl.conf /etc/apache2/sites-enabled/001-default-ssl.conf COPY docker/001-default-ssl.conf /etc/apache2/sites-available/001-default-ssl.conf RUN a2enmod ssl RUN a2ensite 001-default-ssl.conf COPY . /var/www/html RUN a2enmod rewrite ############ INITIAL APPLICATION SETUP ##################### WORKDIR /var/www/html #Append to bootstrap file (less brittle than 'patch') # RUN sed -i 's/return $app;/$env="production";\nreturn $app;/' bootstrap/start.php #copy all configuration files # COPY docker/*.php /var/www/html/app/config/production/ COPY docker/docker.env /var/www/html/.env RUN chown -R docker /var/www/html RUN \ rm -r "/var/www/html/storage/private_uploads" && ln -fs "/var/lib/snipeit/data/private_uploads" "/var/www/html/storage/private_uploads" \ && rm -rf "/var/www/html/public/uploads" && ln -fs "/var/lib/snipeit/data/uploads" "/var/www/html/public/uploads" \ && rm -r "/var/www/html/storage/app/backups" && ln -fs "/var/lib/snipeit/dumps" "/var/www/html/storage/app/backups" \ && mkdir -p "/var/lib/snipeit/keys" && ln -fs "/var/lib/snipeit/keys/oauth-private.key" "/var/www/html/storage/oauth-private.key" \ && ln -fs "/var/lib/snipeit/keys/oauth-public.key" "/var/www/html/storage/oauth-public.key" \ && chown docker "/var/lib/snipeit/keys/" \ && chown -h docker "/var/www/html/storage/" \ && chmod +x /var/www/html/artisan \ && echo "Finished setting up application in /var/www/html" ############## DEPENDENCIES via COMPOSER ################### #global install of composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Get dependencies USER docker RUN composer install --no-dev --working-dir=/var/www/html USER root ############### APPLICATION INSTALL/INIT ################# #RUN php artisan app:install # too interactive! Try something else #COPY docker/app_install.exp /tmp/app_install.exp #RUN chmod +x /tmp/app_install.exp #RUN /tmp/app_install.exp ############### DATA VOLUME ################# VOLUME ["/var/lib/snipeit"] ##### START SERVER COPY docker/startup.sh docker/supervisord.conf / COPY docker/supervisor-exit-event-listener /usr/bin/supervisor-exit-event-listener RUN chmod +x /startup.sh /usr/bin/supervisor-exit-event-listener CMD ["/startup.sh"] EXPOSE 80 EXPOSE 443