mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-27 01:46:35 +00:00
82 lines
2.9 KiB
Docker
82 lines
2.9 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 \
|
|
&& { \
|
|
echo '#!/bin/sh'; \
|
|
echo 'chown -R 1000:1000 /var/lib/betterframe 2>/dev/null || true'; \
|
|
echo '# Find and exec the base image entrypoint or node directly'; \
|
|
echo 'if [ -f /root/entrypoint.sh ]; then exec /root/entrypoint.sh "$@"; fi'; \
|
|
echo 'if [ -f /usr/local/bin/entrypoint.sh ]; then exec /usr/local/bin/entrypoint.sh "$@"; fi'; \
|
|
echo 'if [ -f /home/bsb/entrypoint.sh ]; then exec /home/bsb/entrypoint.sh "$@"; fi'; \
|
|
echo 'exec node /home/bsb/lib/index.js "$@"'; \
|
|
} > /usr/local/bin/bf-entrypoint.sh \
|
|
&& chmod +x /usr/local/bin/bf-entrypoint.sh
|
|
|
|
# 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
|
|
|
|
ENTRYPOINT ["/usr/local/bin/bf-entrypoint.sh"]
|
|
|
|
EXPOSE 18080 18081 18082
|