initial commit
This commit is contained in:
commit
1253955070
75 changed files with 13972 additions and 0 deletions
48
Dockerfile
Normal file
48
Dockerfile
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Dockerfile for go-places.
|
||||
#
|
||||
# The Go module lives in api/, so the build runs with api/ as the working
|
||||
# directory. The version here has to be at least the `go` directive in
|
||||
# api/go.mod, otherwise the toolchain refuses to build.
|
||||
|
||||
# --- Build stage ---
|
||||
FROM golang:1.24-alpine AS builder
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
# Copy the module definition first so dependency downloads stay cached when only
|
||||
# application code changes.
|
||||
COPY api/go.mod api/go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
COPY api/ ./
|
||||
|
||||
# CGO is not needed: the SQLite driver is the pure-Go modernc.org/sqlite.
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags '-s -w' -o /out/go-places ./cmd
|
||||
|
||||
# --- Final stage ---
|
||||
FROM alpine:3.20
|
||||
|
||||
# ca-certificates lets the remote analyzer reach an HTTPS inference service.
|
||||
# wget backs the container healthcheck below.
|
||||
RUN apk add --no-cache ca-certificates wget
|
||||
|
||||
# The service runs unprivileged and needs to own the directories it writes to.
|
||||
RUN adduser -D -u 10001 places \
|
||||
&& mkdir -p /app/data/media \
|
||||
&& chown -R places:places /app
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /out/go-places /app/go-places
|
||||
|
||||
USER places
|
||||
|
||||
ENV ADDR=":8080" \
|
||||
DATABASE_URL="file:/app/data/go-places.db?_pragma=busy_timeout(5000)&_pragma=journal_mode(WAL)&_pragma=foreign_keys(1)" \
|
||||
MEDIA_DIR="/app/data/media"
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
|
||||
CMD wget -qO- "http://127.0.0.1:8080/healthz" || exit 1
|
||||
|
||||
ENTRYPOINT ["/app/go-places"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue