From 931e7319b51d672663027706019bd664597787ee Mon Sep 17 00:00:00 2001 From: SHAcollision Date: Fri, 20 Sep 2024 16:28:16 +0200 Subject: [PATCH] feat(homeserver): add dockerfile --- .dockerignore | 3 +++ Dockerfile | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0a5df56 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +/target +/docs +/.github \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1582693 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +# ======================== +# Build Stage +# ======================== +FROM rust:1.81.0-alpine3.20 AS builder + +# Install build dependencies, including static OpenSSL libraries +RUN apk add --no-cache \ + musl-dev \ + openssl-dev \ + openssl-libs-static \ + pkgconfig \ + build-base \ + curl + +# Set environment variables for static linking with OpenSSL +ENV OPENSSL_STATIC=yes +ENV OPENSSL_LIB_DIR=/usr/lib +ENV OPENSSL_INCLUDE_DIR=/usr/include + +# Add the MUSL target for static linking +RUN rustup target add x86_64-unknown-linux-musl + +# Set the working directory +WORKDIR /usr/src/app + +# Copy over Cargo.toml and Cargo.lock for dependency caching +COPY Cargo.toml Cargo.lock ./ + +# Copy over all the source code +COPY . . + +# Build the project in release mode for the MUSL target +RUN cargo build --release --bin pubky_homeserver --target x86_64-unknown-linux-musl + +# Strip the binary to reduce size +RUN strip target/x86_64-unknown-linux-musl/release/pubky_homeserver + +# ======================== +# Runtime Stage +# ======================== +FROM alpine:3.20 + +# Install runtime dependencies (only ca-certificates) +RUN apk add --no-cache ca-certificates + +# Copy the compiled binary from the builder stage +COPY --from=builder /usr/src/app/target/x86_64-unknown-linux-musl/release/pubky_homeserver /usr/local/bin/homeserver + +# Set the working directory +WORKDIR /usr/local/bin + +# Expose the port the homeserver listens on (should match that of config.toml) +EXPOSE 6287 + +# Set the default command to run the homeserver binary +CMD ["homeserver"]