# This Dockerfile is for both local development and production. # See docker-compose.yml for local dev configuration. FROM golang:latest AS builder RUN go install -tags 'cockroachdb' github.com/golang-migrate/migrate/v4/cmd/migrate@latest WORKDIR /app COPY go.mod go.sum ./ RUN go mod download && go mod verify COPY main.go /app/main.go COPY config /app/config COPY db /app/db COPY nex /app/nex COPY util /app/util COPY api /app/api COPY orm /app/orm ENV GOCACHE=/go-cache # use a docker cache mount to avoid recompiling all dependencies each time RUN --mount=type=cache,target=/go-cache \ go build -v -o /app/server *.go RUN --mount=type=cache,target=/go-cache \ go build -v -o /app/serve_cache util/serve_dump_cache/*.go CMD bash FROM debian:bookworm-slim RUN apt update && apt install -y curl postgresql-client ARG TARGETARCH ENV COCKROACH_VERSION=v22.2.6.linux-$TARGETARCH ENV CRDB_CKSM_ARM64=aa3b695171235d143d8d0dc6ebdbec9908b7009b0e6f5b2f750cb3126d7e9298 ENV CRDB_CKSM_AMD64=de670f9823d0794880ef0c72dfec213470cf6ea3fc96ed27e1706170bae6573b # install the cockroach-sql standalone binary RUN curl -q https://binaries.cockroachdb.com/cockroach-sql-$COCKROACH_VERSION.tgz | \ tar -xzvf - -C /usr/local/bin --strip-components 1 cockroach-sql-$COCKROACH_VERSION/cockroach-sql \ && if [ $TARGETARCH = "arm64" ]; then checksum=$CRDB_CKSM_ARM64; elif [ $TARGETARCH = "amd64" ]; then checksum=$CRDB_CKSM_AMD64; fi \ && echo "$checksum /usr/local/bin/cockroach-sql" | sha256sum --check COPY --from=builder /go/bin/migrate /bin/migrate COPY --from=builder /app/server /bin/server COPY --from=builder /app/serve_cache /bin/serve_cache COPY --from=builder /app/db/migrations /app/db/migrations # only scripts that can be used in production are listed here. # in dev, the entire scripts/ directory is mounted. COPY \ ./scripts/db-console.sh \ ./scripts/env.sh \ ./scripts/migrate.sh \ ./scripts/util.sh \ /app/scripts/ WORKDIR /app ENV IS_DOCKER=1 ENV DB_CONSOLE_TYPE=cockroach-sql CMD /bin/server