From a7bc7c0121cdce4a859de3540164755b12e90d3b Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sun, 7 Jun 2020 16:21:25 -0400 Subject: [PATCH] Adding docker and docker-compose. --- .dockerignore | 3 +++ .gitignore | 1 + docker/Dockerfile | 30 ++++++++++++++++++++++++++++++ docker/docker-compose.yml | 15 +++++++++++++++ src/config.rs | 11 +++++++++-- 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..da63f55 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +target +.git +docker/volumes diff --git a/.gitignore b/.gitignore index a727c0a..e967360 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target /data +/docker/volumes diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..48bf41b --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,30 @@ +# Build +FROM ekidd/rust-musl-builder:1.42.0-openssl11 as rust + +# Cache deps +WORKDIR /app +RUN sudo chown -R rust:rust . +RUN USER=root cargo new server +WORKDIR /app/server +COPY Cargo.toml Cargo.lock ./ +RUN sudo chown -R rust:rust . +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +RUN cargo build --release +RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/pict_rs* +COPY src ./src/ + +# Build for release +RUN cargo build --frozen --release + +FROM alpine:3.10 + +# Copy resources +COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/pict-rs /app/pict-rs + +RUN addgroup -g 1000 pictrs +RUN adduser -D -s /bin/sh -u 1000 -G pictrs pictrs +RUN chown pictrs:pictrs /app/pict-rs +USER pictrs +EXPOSE 8080 +CMD ["/app/pict-rs"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..329fa34 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.3' + +services: + pictrs: + build: + context: ../ + dockerfile: docker/Dockerfile + user: root + ports: + - "127.0.0.1:8080:8080" + restart: always + environment: + - PICTRS_PATH=/app/data + volumes: + - ./volumes/pictrs:/app/data diff --git a/src/config.rs b/src/config.rs index 1a60f49..dd8c78a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -5,16 +5,23 @@ pub(crate) struct Config { #[structopt( short, long, - help = "The address and port the server binds to, e.g. 127.0.0.1:80" + env = "PICTRS_ADDR", + default_value = "0.0.0.0:8080", + help = "The address and port the server binds to. Default: 0.0.0.0:8080" )] addr: SocketAddr, - #[structopt(short, long, help = "The path to the data directory, e.g. data/")] + #[structopt( + short, + long, + env = "PICTRS_PATH", + help = "The path to the data directory, e.g. data/")] path: PathBuf, #[structopt( short, long, + env = "PICTRS_FORMAT", help = "An image format to convert all uploaded files into, supports 'jpg' and 'png'" )] format: Option,