Some checks failed
Release production image / production-image (push) Has been cancelled
46 lines
1.9 KiB
Docker
46 lines
1.9 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
FROM node:20-alpine AS frontend-build
|
|
WORKDIR /build/frontend
|
|
COPY frontend/package*.json ./
|
|
RUN npm ci
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
FROM node:20-alpine AS backend-build
|
|
RUN apk add --no-cache python3 make g++
|
|
WORKDIR /build/backend
|
|
COPY backend/package*.json ./
|
|
RUN npm ci
|
|
COPY backend/ ./
|
|
RUN npm run build && npm prune --omit=dev
|
|
|
|
FROM node:20-alpine AS runtime
|
|
ARG VERSION=development
|
|
ARG REVISION=unknown
|
|
ARG CREATED=unknown
|
|
LABEL org.opencontainers.image.title="Conductor" \
|
|
org.opencontainers.image.description="Visual builder for REST-backed web applications" \
|
|
org.opencontainers.image.version="${VERSION}" \
|
|
org.opencontainers.image.revision="${REVISION}" \
|
|
org.opencontainers.image.created="${CREATED}" \
|
|
org.opencontainers.image.source="https://gitea.skeletonworks.online/vwiebe/conductor"
|
|
ENV NODE_ENV=production \
|
|
PORT=8080 \
|
|
CONDUCTOR_DATA_DIR=/data \
|
|
CONDUCTOR_STATIC_DIR=/app/public \
|
|
CONDUCTOR_VERSION=${VERSION}
|
|
RUN addgroup -S -g 10001 conductor && adduser -S -D -H -u 10001 -G conductor conductor \
|
|
&& mkdir -p /app /data /shared/schemas \
|
|
&& chown -R conductor:conductor /app /data
|
|
WORKDIR /app
|
|
COPY --from=backend-build --chown=conductor:conductor /build/backend/package*.json ./
|
|
COPY --from=backend-build --chown=conductor:conductor /build/backend/node_modules ./node_modules
|
|
COPY --from=backend-build --chown=conductor:conductor /build/backend/dist ./dist
|
|
COPY --from=frontend-build --chown=conductor:conductor /build/frontend/build ./public
|
|
COPY --chown=conductor:conductor shared/schemas/conductor-project.schema.json /shared/schemas/conductor-project.schema.json
|
|
USER conductor
|
|
EXPOSE 8080
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
|
CMD node -e "fetch('http://127.0.0.1:8080/api/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"
|
|
CMD ["node", "dist/index.js"]
|