From d17520216375b2333a18f882c7b3d7a2f6665c82 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Sat, 28 Mar 2026 13:14:09 +0100 Subject: [PATCH] chore: add node docker service for vite dev server and prod build --- .gitignore | 2 ++ Makefile | 9 +++++++++ docker-compose.override.yaml | 12 +++++++++++- docker-compose.yaml | 2 ++ docker/app/Dockerfile | 18 ++++++++++++++++++ docker/node/Dockerfile | 24 ++++++++++++++++++++++++ 6 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 docker/node/Dockerfile diff --git a/.gitignore b/.gitignore index a525bec..6ccf8e0 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ /.phpunit.cache/ ###< phpunit/phpunit ### /.idea/ +/node_modules/ +/public/build/ diff --git a/Makefile b/Makefile index c7848ee..24814be 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,15 @@ symfony\:cache-clear: ## Vide le cache Symfony test: ## Lance les tests PHPUnit docker compose exec app php bin/phpunit +node\:shell: ## Ouvre un shell dans le conteneur node + docker compose exec node sh + +node\:install: ## Installe les dépendances npm + docker compose exec node npm install + +node\:build: ## Build les assets pour la production + docker compose exec node npm run build + help: ## Affiche cette aide @grep -E '^[a-zA-Z_\\:-]+:.*## ' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = "## "} {gsub(/\\:/, ":", $$1); sub(/:[^:]*$$/, "", $$1); printf "\033[36m%-25s\033[0m %s\n", $$1, $$2}' diff --git a/docker-compose.override.yaml b/docker-compose.override.yaml index 005628f..49c17e2 100644 --- a/docker-compose.override.yaml +++ b/docker-compose.override.yaml @@ -6,7 +6,6 @@ services: target: dev environment: APP_ENV: dev - volumes: - .:/app - vendor:/app/vendor @@ -17,6 +16,17 @@ services: ports: - "0.0.0.0:5432:5432" + node: + build: + context: . + dockerfile: docker/node/Dockerfile + target: dev + volumes: + - .:/app + - node_modules:/app/node_modules + ports: + - "5173:5173" volumes: vendor: + node_modules: diff --git a/docker-compose.yaml b/docker-compose.yaml index aa3367c..948e286 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,6 +4,8 @@ services: context: . dockerfile: docker/app/Dockerfile target: prod + additional_contexts: + node-build: docker/node image: git.lclr.dev/thibaud-lclr/ltbxd-actorle/app:latest ports: - "80:80" diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index 89a8f37..65be5c2 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -30,6 +30,21 @@ ENV APP_ENV=dev \ POSTGRES_USER=app \ POSTGRES_PASSWORD=pwd +### +# Node build stage (for prod assets) +### +FROM node:22-alpine AS node-build + +WORKDIR /app + +COPY package.json package-lock.json* ./ +RUN npm install + +COPY assets/ ./assets/ +COPY vite.config.js ./ + +RUN npm run build + ### # Prod stage ### @@ -40,6 +55,9 @@ RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist COPY . . +# Copy Vite-built assets +COPY --from=node-build /app/public/build /app/public/build + RUN APP_ENV=prod composer dump-autoload --classmap-authoritative \ && APP_ENV=prod composer run-script post-install-cmd \ && chown -R www-data:www-data var/ diff --git a/docker/node/Dockerfile b/docker/node/Dockerfile new file mode 100644 index 0000000..9f46bec --- /dev/null +++ b/docker/node/Dockerfile @@ -0,0 +1,24 @@ +FROM node:22-alpine AS base + +WORKDIR /app + +### +# Dev stage +### +FROM base AS dev + +# Dependencies are mounted via volume, install at startup +CMD ["sh", "-c", "npm install && npx vite"] + +### +# Build stage (used by app prod image) +### +FROM base AS build + +COPY package.json package-lock.json* ./ +RUN npm install + +COPY assets/ ./assets/ +COPY vite.config.js ./ + +RUN npm run build