FROM httpd:alpine LABEL maintainer="You " COPY $PWD/build/docker/httpd/httpd.conf /usr/local/apache2/conf/httpd.conf # Install curl, just for healthchecking, without using local cache for the package lists RUN apk --no-cache add curl # Define a healthcheck that tests the root URL of the site HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:80/ || exit 1 # Remove any files that may be in the public htdocs directory already. RUN rm -r /usr/local/apache2/htdocs/* # Enable the rewrite module in apache2. RUN sed -i \ 's/#LoadModule rewrite_module modules\/mod_rewrite.so/LoadModule rewrite_module modules\/mod_rewrite.so/g' \ /usr/local/apache2/conf/httpd.conf # RUN sed -i \ # -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \ # -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \ # -e 's/^#\(LoadModule .*mod_socache_shmcb.so\)/\1/' \ # /usr/local/apache2/conf/httpd.conf # Append to the published directory, that we want to rewrite any request that is not an actual file # to the index.html page. RUN sed -i '//a### Rewrite rule was written from the Dockerfile when building the image ###\n\ DirectoryIndex index.html\n\ RewriteEngine on\n\ RewriteCond %{REQUEST_FILENAME} -s [OR]\n\ RewriteCond %{REQUEST_FILENAME} -d\n\ RewriteRule ^.*$ - [NC,L]\n\ RewriteRule ^(.*) index.html [NC,L]\n' \ /usr/local/apache2/conf/httpd.conf # Comment out the default config that handles requests to /.htaccess and /.ht* with a special error message, # Angular will handle all routing RUN sed -i '//,/<\/Files>/c# This was commented out from the Dockerfile\n# \n# Require all denied\n# <\/Files>' \ /usr/local/apache2/conf/httpd.conf # Copy all the files from the docker build context into the public htdocs of the apache container. # COPY ./ /usr/local/apache2/htdocs/ COPY $PWD/angular-client/dist/fatboar /usr/local/apache2/htdocs/ # Change owner of the publicly available files to root user and daemon group. Httpd threads run as daemon dist/fatboar . RUN chown -R root:daemon \ /usr/local/apache2/htdocs/* # Ensure that the files can only be read, even by the httpd server. RUN chmod -R 440 \ /usr/local/apache2/htdocs/* # Ensure for all the directories created, that the files within them can be read. We need the # execution access privilege on the directory for this. Dynamically apply this to all directories # at least one level into the served root. (-mindepth 1, otherwise the served directory itself # would be included - no need for that. RUN find /usr/local/apache2/htdocs/ -mindepth 1 -type d -exec chmod +x {} \; #RUN mkdir -p /usr/local/apache2/conf/sites/ EXPOSE 80 CMD ["httpd", "-D", "FOREGROUND"]