Files
PilotVault/API Server/Dockerfile
T
tajniak81andClaude Opus 4.8 afc6952eda Initial commit: PilotVault multi-service project
Add API Server (Go/PocketBase), Web App (Go BFF + Vue), Fly App
(Flutter/DJI MSDK), Adobe Plugin, and Docker/Docker AIO deployment
configs. Design assets and build artifacts are gitignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 11:43:33 +02:00

36 lines
1.2 KiB
Docker

# syntax=docker/dockerfile:1
# ---- Stage 1: build the embedded Vue panel ----
# vite.config.js writes the build to ../internal/api/dist, i.e. /internal/api/dist
# here, which the Go binary embeds via //go:embed all:dist.
FROM node:22-alpine AS panel
WORKDIR /panel
COPY panel/package.json panel/package-lock.json ./
RUN npm ci
COPY panel/ ./
RUN npm run build
# ---- Stage 2: build the static Go binary (panel embedded) ----
FROM golang:1.26-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# Overlay the freshly built panel so //go:embed all:dist picks it up.
COPY --from=panel /internal/api/dist ./internal/api/dist
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" \
-o /out/api-server ./cmd/server
# ---- Stage 3: minimal runtime ----
FROM alpine:latest
RUN apk add --no-cache ca-certificates tzdata \
&& adduser -D -u 10001 app
WORKDIR /app
COPY --from=build /out/api-server ./api-server
USER app
# Default listen address (override with API_ADDR). PocketBase URL, CORS origins,
# and the optional POCKETBASE_ADMIN_* service account come from env at runtime.
ENV API_ADDR=:8080
EXPOSE 8080
ENTRYPOINT ["/app/api-server"]