rookeries/Dockerfile

65 lines
2.0 KiB
Docker

FROM rust:1.36-stretch as rust-builder
MAINTAINER Dorian Pula <dorian.pula@amber-penguin-software.ca>
# Cache the Rust dependencies -> http://whitfin.io/speeding-up-rust-docker-builds/
RUN rustup component add rustfmt && cargo install cargo-make
WORKDIR /app/rookeries/
RUN USER=root cargo init --bin .
COPY ["Cargo.toml", "Cargo.lock", "/app/rookeries/"]
RUN cargo build && rm src/*.rs
COPY ["Makefile.toml", "build.rs", "/app/rookeries/"]
COPY ["template", "/app/rookeries/template/"]
COPY ["src", "/app/rookeries/src/"]
RUN cargo build
FROM node:10.15-stretch as node-builder
# Install Node dependencies
RUN apt-get update \
&& apt-get install -y chromium chromium-driver
COPY ["web-app/package.json", "web-app/package-lock.json", "/app/rookeries/web-app/"]
RUN cd /app/rookeries/web-app/ && npm install --verbose
COPY web-app/ /app/rookeries/web-app/
COPY plugins/ /app/rookeries/plugins/
RUN mkdir -p /app/rookeries/web-app/static/js/ \
&& mkdir -p /var/www
WORKDIR /app/rookeries/
RUN cd web-app && npm run build
RUN cd plugins && ./plugin-builder.sh
WORKDIR /app/rookeries/web-app
FROM debian:stretch-slim as final
ENV DUMB_INIT_VERSION="1.2.0"
# Add Docker utilities
RUN apt-get update \
&& apt-get install -y wget gnupg2 libssl-dev \
&& wget https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64.deb \
&& dpkg -i dumb-init_*.deb \
&& rm dumb-init_*.deb
RUN mkdir -p /app/rookeries/
COPY --from=rust-builder /app/rookeries/target/debug/rookeries /home/www-data/.local/bin/rookeries
COPY --from=node-builder /app/rookeries/web-app/static/ /app/rookeries/web-app/static/
COPY --from=node-builder /app/rookeries/plugins/ /app/rookeries/plugins/
WORKDIR /app/rookeries/
# Fix permissions
RUN chown www-data . --recursive \
&& chgrp www-data . --recursive \
&& chmod g+rw . --recursive
USER www-data
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["/home/www-data/.local/bin/rookeries"]
EXPOSE 5000