BetterFrame/deploy/docker/Dockerfile.server
Mitchell R 6ec2dcbec4
fix(docker): align BF_PG_DATABASE to BF_PG_DB
Compose postgres uses POSTGRES_DB from BF_PG_DB. Dockerfile ARG
was BF_PG_DATABASE causing mismatch. PG error 3D000 db not found.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-24 05:06:56 +02:00

72 lines
2.3 KiB
Docker

# BetterFrame server — BSB container with plugins installed at
# /mnt/bsb-plugins/node_modules/@betterframe/server/
#
# sec-config.yaml generated at build time from template + build args.
# Secrets come from Coolify build args (set in UI, not in git).
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 nodered/package.json ./nodered/
COPY tsconfig.base.json ./
RUN npm ci --workspace=server && npm rebuild argon2
COPY server ./server
WORKDIR /app/server
RUN npm run build
# ---- Runtime ----
FROM betterweb/service-base:9
ARG BF_SERVER_VERSION=dev
ARG BF_DB_DRIVER=postgres
ARG BF_PG_HOST=postgres
ARG BF_PG_PORT=5432
ARG BF_PG_DB=betterframe
ARG BF_PG_USER=betterframe
ARG BF_PG_PASSWORD=betterframe
ARG BF_PG_POOL_MAX=10
ARG BF_NODERED_URL=http://nodered:1880
ARG BF_SELF_URL=http://server:18080
ARG BF_FIRMWARE_SIGNING_KEY=
ARG BF_FIRMWARE_IMPORT_API_KEY=
ARG BF_OTA_IMPORT_API_KEY=
ARG BF_MQTT_URL=
ARG BF_MQTT_USERNAME=
ARG BF_MQTT_PASSWORD=
ARG BF_MQTT_TOPIC_PREFIX=betterframe
RUN apk add --no-cache gettext ffmpeg
RUN mkdir -p /var/lib/betterframe && chown 1000:1000 /var/lib/betterframe
# Install plugin into BSB's node_modules (searched at /home/bsb/node_modules)
# /mnt/bsb-plugins is a VOLUME in base image — writes lost at runtime
COPY --from=builder /app/server/package.json /home/bsb/node_modules/betterframe/package.json
COPY --from=builder /app/server/bsb-plugin.json /home/bsb/node_modules/betterframe/bsb-plugin.json
COPY --from=builder /app/server/lib /home/bsb/node_modules/betterframe/lib
COPY --from=builder /app/node_modules /home/bsb/node_modules/betterframe/node_modules
COPY --from=builder /app/tsconfig.base.json /home/bsb/node_modules/betterframe/tsconfig.base.json
# Generate sec-config.yaml from template + build args
COPY sec-config.template.yaml /tmp/sec-config.template.yaml
RUN envsubst < /tmp/sec-config.template.yaml > /home/bsb/sec-config.yaml \
&& chmod 444 /home/bsb/sec-config.yaml \
&& rm /tmp/sec-config.template.yaml
RUN echo "$BF_SERVER_VERSION" > /home/bsb/.bf-version
ENV NODE_ENV=production
ENV BSB_LIVE=true
VOLUME /var/lib/betterframe
EXPOSE 18080 18081 18082