feat(build): embed static assets into Go binary
Some checks failed
continuous-integration/drone/push Build is failing

Embed frontend build output directly into Go binary using //go:embed.
This removes runtime dependency on ../frontend/public/ path and
simplifies Docker builds by serving assets from embedded filesystem.

- Add backend/web/embed.go with embed.FS directive
- Update server to serve from embedded static assets
- Update Makefile to copy frontend build to web/static/
- Update Dockerfile for simplified multi-stage build
- Update frontend package.json output paths
- Remove custom 'oc' command from flake.nix dev shell
This commit is contained in:
2026-02-22 20:36:03 -05:00
parent 93b5c3f110
commit 59de41f827
7 changed files with 30 additions and 61 deletions

View File

@@ -1,70 +1,30 @@
# Multi-stage build for Aethera
# Stage 1: Build frontend assets
# Step 1: Build Frontend
FROM oven/bun:1 AS frontend-builder
WORKDIR /app/frontend
# Copy frontend package files
COPY frontend/package.json frontend/bun.lock ./
# Install dependencies
RUN bun install --frozen-lockfile
# Copy frontend source code
COPY frontend/ ./
# Build frontend assets
RUN bun run build
# Stage 2: Build Go binary
# Stage 2: Build Backend
FROM golang:1.25-alpine AS backend-builder
WORKDIR /app
# Install build dependencies
RUN apk add --no-cache git
# Copy go mod files
COPY backend/go.mod backend/go.sum ./
# Download Go dependencies
RUN go mod download
# Copy backend source code
COPY backend/ ./
COPY --from=frontend-builder /app/frontend/public/ ./web/static/
RUN go build -ldflags="-w -s" -o aethera ./cmd
# Copy frontend assets from previous stage
COPY --from=frontend-builder /app/frontend/public/dist ./public/dist
COPY --from=frontend-builder /app/frontend/public/index.html ./public/
COPY --from=frontend-builder /app/frontend/public/pages ./public/pages
# Build the Go binary
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o aethera ./cmd
# Stage 3: Create minimal runtime image
# Stage 3: Minimal Runtime
FROM alpine:3.21
# Install ca-certificates for HTTPS calls
RUN apk add --no-cache ca-certificates
WORKDIR /app
# Copy the binary from the builder stage
COPY --from=backend-builder /app/aethera .
# Copy static assets
COPY --from=backend-builder /app/public ./public
# Create data directory
RUN mkdir -p /app/data
# Expose the default port
EXPOSE 8080
# Set environment variable defaults
ENV AETHERA_LISTEN=0.0.0.0
ENV AETHERA_PORT=8080
ENV AETHERA_DATA_DIR=/app/data
# Set the entrypoint
ENTRYPOINT ["./aethera"]