diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9c3d7ad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +# Build args +ARG PORT=8080 +ARG GLEAM_VERSION=v1.11.1 + +# Build stage - compile the application +FROM ghcr.io/gleam-lang/gleam:${GLEAM_VERSION}-erlang-alpine AS builder + +# Add project code +COPY ./common /build/common +COPY ./client /build/client +COPY ./server /build/server + +# Install dependencies for all projects +RUN cd /build/common && gleam deps download +RUN cd /build/client && gleam deps download +RUN cd /build/server && gleam deps download + +# Compile the client code and output to server's static directory +RUN cd /build/client \ + && gleam add --dev lustre_dev_tools \ + && gleam run -m lustre/dev build app --minify --outdir=/build/server/priv/static + +# Compile the server code +RUN cd /build/server \ + && gleam export erlang-shipment + +# Runtime stage - slim image with only what's needed to run +FROM ghcr.io/gleam-lang/gleam:${GLEAM_VERSION}-erlang-alpine + +# Copy the compiled server code from the builder stage +COPY --from=builder /build/server/build/erlang-shipment /app + +# Set up the entrypoint +WORKDIR /app +RUN echo '#!/bin/sh\nexec ./entrypoint.sh "$@"' > /app/start.sh \ + && chmod +x /app/start.sh + +# Add volume for accessing geofeed from host +VOLUME /data + +# Set environment variables +ENV GEOFEED_PATH=/data/geofeed.csv +ENV PORT=${PORT} + +# Expose the port the server will run on +EXPOSE ${PORT} + +# Run the server +CMD ["/app/start.sh", "run"]