BetterFrame/deploy/docker/Dockerfile.server

62 lines
1.5 KiB
Docker
Raw Normal View History

# BetterFrame server — BSB container with built plugins.
#
# sec-config.yaml is NOT baked in — mount it at runtime:
# volumes:
# - ./sec-config.yaml:/app/sec-config.yaml:ro
#
# Builder stage compiles TS + native deps (argon2).
# Runtime stage uses the official BSB container.
2026-05-21 06:51:41 +00:00
FROM node:24-trixie-slim AS builder
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential python3 \
&& rm -rf /var/lib/apt/lists/*
COPY package.json package-lock.json ./
COPY server/package.json ./server/
COPY tsconfig.base.json ./
RUN npm ci && npm rebuild argon2
COPY server ./server
WORKDIR /app/server
RUN npm run build
# ---- Runtime ----
FROM betterweb/service-base:node
2026-05-21 06:51:41 +00:00
ARG BF_SERVER_VERSION=dev
USER root
# ffmpeg for camera snapshot capture
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/lib/betterframe && chown node:node /var/lib/betterframe
WORKDIR /home/bsb
# Copy built plugin + deps
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/server/lib ./lib
COPY --from=builder /app/server/bsb-plugin.json ./bsb-plugin.json
COPY --from=builder /app/server/package.json ./package.json
COPY --from=builder /app/tsconfig.base.json ./tsconfig.base.json
# Static web assets served by admin-http
COPY --from=builder /app/server/lib/web-static ./lib/web-static
# Bake version
RUN echo "$BF_SERVER_VERSION" > /home/bsb/.bf-version
VOLUME /var/lib/betterframe
EXPOSE 18080 18081 18082
USER node