# syntax=docker/dockerfile:1 FROM node:22-alpine AS ui-build WORKDIR /workspace/ee/appliance/status-ui COPY ee/appliance/status-ui/package.json ee/appliance/status-ui/package-lock.json ./ RUN npm ci COPY ee/appliance/status-ui/app ./app COPY ee/appliance/status-ui/next.config.mjs ee/appliance/status-ui/tsconfig.json ./ RUN npm run build FROM node:22-alpine AS runtime WORKDIR /opt/alga-appliance RUN apk add --no-cache bash curl kubectl \ && curl -s https://fluxcd.io/install.sh | bash ENV NODE_ENV=production ENV ALGA_APPLIANCE_PORT=8080 ENV ALGA_APPLIANCE_STATUS_UI_DIR=/opt/alga-appliance/status-ui/dist ENV ALGA_APPLIANCE_MODE=kubernetes-control-plane ENV ALGA_APPLIANCE_BUNDLE_ORIGIN=baked-iso COPY ee/appliance/host-service/*.mjs ./host-service/ COPY ee/appliance/scripts ./scripts COPY ee/appliance/manifests ./manifests COPY ee/appliance/flux ./flux # Release metadata is intentionally NOT baked in. Setup/update resolve the # selected channel from the OCI artifact registry (see host-service/setup-engine.mjs), # so image-tag changes do not require rebuilding this image or the ISO. COPY --from=ui-build /workspace/ee/appliance/status-ui/dist ./status-ui/dist RUN addgroup -S alga && adduser -S -G alga -u 10001 alga \ && mkdir -p /var/lib/alga-appliance \ && chmod +x /opt/alga-appliance/scripts/control-plane-entrypoint.sh \ && chown -R alga:alga /opt/alga-appliance /var/lib/alga-appliance USER 10001:10001 EXPOSE 8080 CMD ["/opt/alga-appliance/scripts/control-plane-entrypoint.sh"]