2 changed files with 98 additions and 10 deletions
			
			
		| @ -0,0 +1,80 @@ | |||||
|  | # 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.2.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  ########################## | ||||
|  | # Musl build image for statically compiled binary | ||||
|  | FROM clux/muslrust:nightly-2018-08-24 as build | ||||
|  | 
 | ||||
|  | # Creates a dummy project used to grab dependencies | ||||
|  | RUN USER=root cargo init --bin | ||||
|  | 
 | ||||
|  | # Copies over *only* your manifests and vendored dependencies | ||||
|  | COPY ./Cargo.* ./ | ||||
|  | COPY ./libs ./libs | ||||
|  | COPY ./rust-toolchain ./rust-toolchain | ||||
|  | 
 | ||||
|  | # Builds your dependencies and removes the | ||||
|  | # dummy project, except the target folder | ||||
|  | # This folder contains the compiled dependencies | ||||
|  | RUN cargo build --release | ||||
|  | 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 | ||||
|  | 
 | ||||
|  | ######################## RUNTIME IMAGE  ######################## | ||||
|  | # Create a new stage with a minimal image | ||||
|  | # because we already have a binary built | ||||
|  | FROM alpine:3.8 | ||||
|  | 
 | ||||
|  | ENV ROCKET_ENV "staging" | ||||
|  | ENV ROCKET_WORKERS=10 | ||||
|  | ENV SSL_CERT_DIR=/etc/ssl/certs | ||||
|  | 
 | ||||
|  | # Install needed libraries | ||||
|  | RUN apk add \ | ||||
|  |         openssl\ | ||||
|  |         ca-certificates \ | ||||
|  |     && rm /var/cache/apk/* | ||||
|  | 
 | ||||
|  | RUN mkdir /data | ||||
|  | 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 /volume/target/x86_64-unknown-linux-musl/release/bitwarden_rs . | ||||
|  | 
 | ||||
|  | # Configures the startup! | ||||
|  | CMD ./bitwarden_rs | ||||
					Loading…
					
					
				
		Reference in new issue