Files
aethera/Dockerfile
Evan Reichard a5cb82d3fa
All checks were successful
continuous-integration/drone/push Build is passing
build: add docker support
- Add Dockerfile for containerized deployment
- Add .drone.yml for CI/CD pipeline configuration
- Add docker and docker-run targets to Makefile
- Configure port 8080 binding and persistent volume mount
2026-02-20 22:12:30 -05:00

69 lines
1.5 KiB
Docker

# Multi-stage build for Aethera
# Stage 1: Build frontend assets
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
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 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
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 the entrypoint
ENTRYPOINT ["./aethera"]
# Default command with recommended production settings
CMD ["--listen", "0.0.0.0", "--port", "8080", "--data-dir", "/app/data"]