feat: update Docker configuration for combined frontend and backend build process

This commit is contained in:
2025-08-30 14:25:26 +02:00
parent 46899ef7be
commit d710f958b3
4 changed files with 57 additions and 7 deletions

View File

@@ -1,12 +1,12 @@
yarn-error.log
node_modules
**/node_modules
npm-debug.log
yarn-error.log
dist
tmp
temp
.git
.gitignore
Dockerfile*
frontend/dist
backend/coverage
# Keep built frontend out of context cache noise but allow source
frontend/dist

View File

@@ -8,7 +8,7 @@ on:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}/backend
IMAGE_NAME: ${{ github.repository }}/app
jobs:
build-and-push:
@@ -47,12 +47,16 @@ jobs:
- name: Build and push Docker image (multi-arch)
uses: docker/build-push-action@v6
with:
context: ./frontend
file: ./frontend/Dockerfile
context: .
file: ./Dockerfile
push: true
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
NODE_VERSION=20-bookworm-slim
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Notify updater (GET, bearer)
if: ${{ success() && github.ref == 'refs/heads/main' }}

46
Dockerfile Normal file
View File

@@ -0,0 +1,46 @@
######## Root Combined Frontend + Backend Build ########
## Build args (can be overridden)
ARG NODE_VERSION=20-bookworm-slim
########################
# 1) Frontend build #
########################
FROM node:${NODE_VERSION} AS frontend-build
WORKDIR /frontend
COPY frontend/package*.json ./
RUN npm install --no-audit --no-fund
COPY frontend/ .
RUN npm run build
########################
# 2) Backend build #
########################
FROM node:${NODE_VERSION} AS backend-build
WORKDIR /app
COPY backend/package*.json ./
RUN npm install --no-audit --no-fund
COPY backend/ .
# Copy built frontend assets
COPY --from=frontend-build /frontend/dist ./public
RUN npm run build
########################
# 3) Production image #
########################
FROM node:${NODE_VERSION} AS runner
ENV NODE_ENV=production
WORKDIR /app
# Install production deps
COPY backend/package*.json ./
RUN npm install --omit=dev --no-audit --no-fund
# Copy backend dist + public
COPY --from=backend-build /app/dist ./dist
COPY --from=backend-build /app/public ./public
ENV PORT=3000 \
SERIAL_BAUD=115200
EXPOSE 3000
CMD ["node", "dist/main.js"]

View File

@@ -2,7 +2,7 @@ services:
app:
build:
context: ..
dockerfile: frontend/Dockerfile
dockerfile: Dockerfile
container_name: schafkop-app
restart: unless-stopped
environment: