# NAME: discourse/discourse_dev # VERSION: release ARG from_tag=slim FROM discourse/base:$from_tag AS repo-fetcher WORKDIR /repo RUN chown discourse . USER discourse RUN git clone https://github.com/discourse/discourse . --depth 1 FROM discourse/base:$from_tag #LABEL maintainer="Sam Saffron \"https://twitter.com/samsaffron\"" # Remove the code added on base image RUN rm -rf /var/www/* # Give discourse user no-passwd sudo permissions (for bundle install) ADD sudoers.discourse /etc/sudoers.d/discourse RUN sudo -u discourse bundle config set --global path /home/discourse/.bundle/gems # Add user-install ruby gems to PATH RUN echo 'PATH="$(ruby -r rubygems -e "puts Gem.user_dir")/bin:$PATH"' >> /home/discourse/.profile # get redis going ADD redis.template.yml /pups/redis.yml RUN /pups/bin/pups /pups/redis.yml RUN locale-gen en_US.UTF-8 ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 \ RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH # get postgres going ADD postgres.template.yml /pups/postgres.yml RUN LANG=en_US.UTF-8 /pups/bin/pups /pups/postgres.yml # add dev databases ADD postgres_dev.template.yml /pups/postgres_dev.yml RUN /pups/bin/pups /pups/postgres_dev.yml # move default postgres_data out of the way RUN mv /shared/postgres_data /shared/postgres_data_orig # re-instantiate data on boot if needed (this will allow it to persist across # invocations when used with a mounted volume) ADD ensure-database /etc/runit/1.d/ensure-database ADD install-rust /tmp/install-rust ADD install-selenium /tmp/install-selenium RUN /tmp/install-selenium # Install & Configure MailHog (https://github.com/mailhog/MailHog) RUN wget -qO /tmp/mailhog https://github.com/mailhog/MailHog/releases/download/v1.0.1/MailHog_linux_amd64\ && echo "e2ed634ded49929f089b20045581955ed217672078fd86082dd7a6c67c5d09c7 /tmp/mailhog" | sha256sum -c -\ && mv /tmp/mailhog /usr/local/bin/mailhog\ && chmod +x /usr/local/bin/mailhog\ && rm -rf /tmp/* USER discourse # Warm global bundle cache, then delete the compressed `cache/` versions (`/gem/` are enough) RUN --mount=type=bind,src=/repo,from=repo-fetcher,target=/tmp/discourse-clone,readwrite \ cd /tmp/discourse-clone \ && bundle install --deployment \ && rm -rf /home/discourse/.bundle/gems/ruby/*/cache/* # Warm global yarn cache RUN --mount=type=bind,src=/repo,from=repo-fetcher,target=/tmp/discourse-clone,readwrite \ cd /tmp/discourse-clone \ && (if [ -f yarn.lock ]; then yarn install; else CI=1 pnpm install; fi) USER root