1 changed files with 112 additions and 0 deletions
			
			
		@ -0,0 +1,112 @@ | 
				
			|||||
 | 
					# Using multistage build:  | 
				
			||||
 | 
					# 	https://docs.docker.com/develop/develop-images/multistage-build/ | 
				
			||||
 | 
					# 	https://whitfin.io/speeding-up-rust-docker-builds/ | 
				
			||||
 | 
					####################### VAULT BUILD IMAGE  ####################### | 
				
			||||
 | 
					FROM node:8-alpine as vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV VAULT_VERSION "v2.3.0" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV URL "https://github.com/bitwarden/web.git" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN apk add --update-cache --upgrade \ | 
				
			||||
 | 
					    curl \ | 
				
			||||
 | 
					    git \ | 
				
			||||
 | 
					    tar | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN git clone -b $VAULT_VERSION --depth 1 $URL web-build | 
				
			||||
 | 
					WORKDIR /web-build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					COPY /docker/set-vault-baseurl.patch /web-build/     | 
				
			||||
 | 
					RUN git apply set-vault-baseurl.patch | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN npm run sub:init && npm install | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN npm run dist \ | 
				
			||||
 | 
					    && mv build /web-vault | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					########################## BUILD IMAGE  ########################## | 
				
			||||
 | 
					# We need to use the Rust build image, because | 
				
			||||
 | 
					# we need the Rust compiler and Cargo tooling | 
				
			||||
 | 
					FROM rust as build | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN apt-get update \ | 
				
			||||
 | 
					    && apt-get install -y \ | 
				
			||||
 | 
					        gcc-aarch64-linux-gnu \ | 
				
			||||
 | 
					    && mkdir -p ~/.cargo \ | 
				
			||||
 | 
					    && echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config \ | 
				
			||||
 | 
					    && echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV CARGO_HOME "/root/.cargo" | 
				
			||||
 | 
					ENV USER "root" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Creates a dummy project used to grab dependencies | 
				
			||||
 | 
					RUN USER=root cargo new --bin app | 
				
			||||
 | 
					WORKDIR /app | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies over *only* your manifests and vendored dependencies | 
				
			||||
 | 
					COPY ./Cargo.* ./ | 
				
			||||
 | 
					COPY ./libs ./libs | 
				
			||||
 | 
					COPY ./rust-toolchain ./rust-toolchain | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Prepare openssl arm64 libs | 
				
			||||
 | 
					RUN sed 's/^deb/deb-src/' /etc/apt/sources.list > \ | 
				
			||||
 | 
					        /etc/apt/sources.list.d/deb-src.list \ | 
				
			||||
 | 
					    && dpkg --add-architecture arm64 \ | 
				
			||||
 | 
					    && apt-get update \ | 
				
			||||
 | 
					    && apt-get install -y \ | 
				
			||||
 | 
					        libssl-dev:arm64 \ | 
				
			||||
 | 
					        libc6-dev:arm64 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV CC_aarch64_unknown_linux_gnu="/usr/bin/aarch64-linux-gnu-gcc" | 
				
			||||
 | 
					ENV CROSS_COMPILE="1" | 
				
			||||
 | 
					ENV OPENSSL_INCLUDE_DIR="/usr/include/aarch64-linux-gnu" | 
				
			||||
 | 
					ENV OPENSSL_LIB_DIR="/usr/lib/aarch64-linux-gnu" | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Builds your dependencies and removes the | 
				
			||||
 | 
					# dummy project, except the target folder | 
				
			||||
 | 
					# This folder contains the compiled dependencies | 
				
			||||
 | 
					RUN rustup target add aarch64-unknown-linux-gnu | 
				
			||||
 | 
					RUN cargo build --release --target=aarch64-unknown-linux-gnu -v | 
				
			||||
 | 
					RUN find . -not -path "./target*" -delete | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the complete project | 
				
			||||
 | 
					# To avoid copying unneeded files, use .dockerignore | 
				
			||||
 | 
					COPY . . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Builds again, this time it'll just be | 
				
			||||
 | 
					# your actual source files being built | 
				
			||||
 | 
					RUN cargo build --release --target=aarch64-unknown-linux-gnu -v | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					######################## RUNTIME IMAGE  ######################## | 
				
			||||
 | 
					# Create a new stage with a minimal image | 
				
			||||
 | 
					# because we already have a binary built | 
				
			||||
 | 
					FROM resin/aarch64-debian:stretch | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					ENV ROCKET_ENV "staging" | 
				
			||||
 | 
					ENV ROCKET_WORKERS=10 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN [ "cross-build-start" ] | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Install needed libraries | 
				
			||||
 | 
					RUN apt-get update && apt-get install -y\ | 
				
			||||
 | 
					    openssl\ | 
				
			||||
 | 
					    ca-certificates\ | 
				
			||||
 | 
					    --no-install-recommends\ | 
				
			||||
 | 
					 && rm -rf /var/lib/apt/lists/* | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN mkdir /data | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					RUN [ "cross-build-end" ]   | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					VOLUME /data | 
				
			||||
 | 
					EXPOSE 80 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Copies the files from the context (env file and web-vault) | 
				
			||||
 | 
					# and the binary from the "build" stage to the current stage | 
				
			||||
 | 
					COPY .env . | 
				
			||||
 | 
					COPY Rocket.toml . | 
				
			||||
 | 
					COPY --from=vault /web-vault ./web-vault | 
				
			||||
 | 
					COPY --from=build /app/target/aarch64-unknown-linux-gnu/release/bitwarden_rs . | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					# Configures the startup! | 
				
			||||
 | 
					CMD ./bitwarden_rs | 
				
			||||
					Loading…
					
					
				
		Reference in new issue