From ba119629eb81c7a1635343f625b9d8514c85ffc9 Mon Sep 17 00:00:00 2001 From: Ben Melchior Date: Sat, 3 May 2025 21:59:23 +0200 Subject: [PATCH] Refactor Docker setup and update API description - Updated docker-compose.yml to use context and dockerfile for the app service, and removed unnecessary db service configuration. - Modified Dockerfile to use the official Rust nightly image and streamlined the build process with updated working directories and runtime dependencies. - Changed API description in root handler to reflect the correct endpoint for fetching the current hospital. --- Dockerfile | 42 ++++++++++++++++++++++-------------------- docker-compose.yml | 31 +++++++------------------------ src/handlers/root.rs | 2 +- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/Dockerfile b/Dockerfile index d4bcd27..743fddc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,35 @@ -FROM rust:1.76-slim-bullseye as builder +# Use the official Rust nightly image as a build environment +FROM rustlang/rust:nightly-slim as builder -WORKDIR /usr/src/app +# Install build dependencies +RUN apt-get update && apt-get install -y \ + pkg-config \ + libssl-dev \ + && rm -rf /var/lib/apt/lists/* + +# Create a new empty shell project +WORKDIR /usr/src/hospitalapi + +# Copy the source code COPY . . # Build the application RUN cargo build --release -# Create a new stage with a minimal image -FROM debian:bullseye-slim +# Use a minimal runtime image +FROM debian:bookworm-slim -WORKDIR /usr/local/bin - -# Install necessary runtime dependencies -RUN apt-get update && apt-get install -y --no-install-recommends \ +# Install runtime dependencies +RUN apt-get update && apt-get install -y \ ca-certificates \ + libssl3 \ && rm -rf /var/lib/apt/lists/* -# Copy the built binary from the builder stage -COPY --from=builder /usr/src/app/target/release/hospitalapi . +# Copy the binary from the builder stage +COPY --from=builder /usr/src/hospitalapi/target/release/hospitalapi /usr/local/bin/hospitalapi -# Create a directory for the .env file -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -# Copy the .env file -COPY .env . - -# Expose the port the app runs on -EXPOSE 3000 +# Set the working directory +WORKDIR /usr/local/bin # Run the application -CMD ["./hospitalapi"] \ No newline at end of file +CMD ["hospitalapi"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 72d1746..0bdbe38 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,30 +2,13 @@ version: '3.8' services: app: - build: . + build: + context: . + dockerfile: Dockerfile ports: - "3000:3000" - depends_on: - - db environment: - - DATABASE_URL=postgres://postgres:postgres@db/hospitaldb - - HOST=0.0.0.0 - - PORT=3000 - volumes: - - ./.env:/usr/src/app/.env - restart: unless-stopped - - db: - image: postgres:14 - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - POSTGRES_DB=hospitaldb - volumes: - - postgres_data:/var/lib/postgresql/data - ports: - - "5432:5432" - restart: unless-stopped - -volumes: - postgres_data: \ No newline at end of file + - HOST=${HOST} + - PORT=${PORT} + - DATABASE_URL=${DATABASE_URL} + restart: unless-stopped \ No newline at end of file diff --git a/src/handlers/root.rs b/src/handlers/root.rs index 6f2f8ae..9987108 100644 --- a/src/handlers/root.rs +++ b/src/handlers/root.rs @@ -12,7 +12,7 @@ pub async fn root_handler() -> Json { let info: ApiInfo = ApiInfo { name: "HospitalAPI", version: "0.1", - description: "This API provides you with the current hospital on duty in luxembourg city. Call the /getHospital endpoint.", + description: "This API provides you with the current hospital on duty in luxembourg city. Call the /current-hospital endpoint.", }; Json(info) }