30 lines
787 B
Docker
30 lines
787 B
Docker
# Build stage
|
|
FROM golang:1.24-alpine AS builder
|
|
WORKDIR /src
|
|
RUN apk add --no-cache make gcc musl-dev
|
|
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
|
|
# Run tests
|
|
ENV DBURL="file::memory:?cache=shared"
|
|
RUN go test ./...
|
|
|
|
# Build binaries
|
|
RUN CGO_ENABLED=1 go build -trimpath -ldflags="-s -w" -o /chatd ./cmd/chatd/
|
|
RUN CGO_ENABLED=1 go build -trimpath -ldflags="-s -w" -o /chat-cli ./cmd/chat-cli/
|
|
|
|
# Final stage — server only
|
|
FROM alpine:3.21
|
|
RUN apk add --no-cache ca-certificates \
|
|
&& addgroup -S chat && adduser -S chat -G chat
|
|
COPY --from=builder /chatd /usr/local/bin/chatd
|
|
|
|
USER chat
|
|
EXPOSE 8080
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD wget -qO- http://localhost:8080/.well-known/healthcheck.json || exit 1
|
|
ENTRYPOINT ["chatd"]
|