diff --git a/Justfile b/Justfile index 5d3bc39..86fbfb5 100644 --- a/Justfile +++ b/Justfile @@ -6,7 +6,6 @@ build-container-release: # Builds a release container and runs it start-release: build-container-release remove-podman-containers podman run -d -e DATABASE_URL=sqlite:release.db -p 8080:8080 --name ttime ttime-server - @echo "Started production ttime-server on http://localhost:8080" # Removes and stops any containers related to the project [private] @@ -15,7 +14,7 @@ remove-podman-containers: # Saves the release container to a tarball, pigz is just gzip but multithreaded save-release: build-container-release - podman save --format=oci-archive ttime-server | pigz -9 > ttime-server.tar.gz + podman save --format=oci-archive ttime-server | pigz -9 > ttime-server-pigz.tar.gz # Loads the release container from a tarball load-release file: @@ -26,6 +25,5 @@ clean: remove-podman-containers podman image rm -f ttime-server rm -rf frontend/dist rm -rf frontend/node_modules - rm ttime-server.tar.gz cd backend && make clean @echo "Cleaned up!" \ No newline at end of file diff --git a/container/Containerfile b/container/Containerfile index 86f9184..ac4f770 100644 --- a/container/Containerfile +++ b/container/Containerfile @@ -2,39 +2,26 @@ # We use node:latest as the base image. # Essentially we build the frontend SPA with vite and # make it available in the public directory. -FROM docker.io/node:alpine as client +FROM docker.io/node:latest as client WORKDIR /build ADD frontend /build RUN npm install RUN npm run build # Builds the server in an isolated stage -FROM docker.io/golang:alpine as go -RUN apk add gcompat -RUN apk add gcc -RUN apk add musl-dev +FROM docker.io/golang:latest as go ADD backend /build WORKDIR /build +# Copy the frontend SPA build into public +COPY --from=client /build/dist /build/static + # Get the dependencies RUN go mod download # RUN go build -o server RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o ./server ./cmd/ -# The final stage for building a minimal image -FROM docker.io/alpine:latest as runner -WORKDIR /app - -# Copy the frontend SPA build into public -COPY --from=client /build/dist /app/static - -# Copy the server binary -COPY --from=go /build/server /app/server - -# Copy the migration scripts -COPY --from=go /build/migrations /app/migrations - # Expose port 8080 EXPOSE 8080