From b4a4681431909f5ea25c2baec0064323855ae89f Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Sun, 18 May 2025 00:07:03 +0100 Subject: [PATCH 1/8] Adds dockerfile --- CONTRIBUTING.md | 18 ++++++++++++++++++ Dockerfile | 18 ++++++++++++++++++ nginx.local.conf | 14 ++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 Dockerfile create mode 100644 nginx.local.conf diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c5b5323ad..96d0a04ce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,3 +50,21 @@ ## Инструменты - Расширение [Nunjucks Template](https://marketplace.visualstudio.com/items?itemName=eseom.nunjucks-template) для VS Code + +## Упаковка в контейнер + +- Убедитесь, что у вас установлен [Docker](https://www.docker.com/get-started). +- Запустите команду `docker build -t <имя_контейнера> .` в корневой папке проекта. Эта версия создаст контейнер с внешними зависимостями ssl-сертификатов. Если вы хотите потестировать локально (у вас нет сертификатов), используйте `docker build -t <имя_контейнера> --build-arg NGINX_CONF=nginx.local.conf .` + +- Eсли у вас есть сертификаты, запустите докер и смаунтите папку с сертификатами в контейнер: + ```bash + docker run -d \ + -v <папка_с_сертификатами>:/etc/letsencrypt/live/web-standards.ru:ro" \ + -p 80:80 -p 443:443 \ \ + -e NGINX_CONF=nginx.conf \ + -p 443:443 <имя_контейнера> + ``` + +- Если вы тестируете локально то просто `docker run -p 8080:80 <имя_контейнера>`. + +Если нужно подебажить контейнер, используйте команду `docker run -it <имя_контейнера> /bin/bash`. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..565e6efa0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM node:lts-alpine AS builder + +# Install deps +WORKDIR /app +COPY . . +RUN apk add --no-cache git +RUN npm install +RUN npm run build + + +FROM nginx:stable-alpine AS prod + +ARG NGINX_CONF=nginx.conf + +COPY --from=builder /app/dist /var/www/web-standards.ru/html +COPY --from=builder /app/${NGINX_CONF} /etc/nginx/conf.d/default.conf +EXPOSE 80 +CMD ["nginx","-g","daemon off;"] diff --git a/nginx.local.conf b/nginx.local.conf new file mode 100644 index 000000000..cadf68c7e --- /dev/null +++ b/nginx.local.conf @@ -0,0 +1,14 @@ +server { + listen 80; + listen [::]:80; + server_name localhost www.localhost; + + root /var/www/web-standards.ru/html; + index index.html index.xml; + + error_page 404 /404/; + + location ~ /podcast/(cover\.png|feed|episodes/\d+\.mp3) { + root /var/www/web-standards.ru; + } +} From 15c8c3796b07e72c49722871f2ace3e3190877a3 Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Sun, 25 May 2025 18:20:28 +0100 Subject: [PATCH 2/8] Update docker file, add script command and attempted to test with certificates --- .gitignore | 3 +++ CONTRIBUTING.md | 14 ++++---------- Dockerfile | 3 +++ docker.sh | 30 ++++++++++++++++++++++++++++++ nginx.local.conf | 40 ++++++++++++++++++++++++++++++---------- 5 files changed, 70 insertions(+), 20 deletions(-) create mode 100755 docker.sh diff --git a/.gitignore b/.gitignore index f06235c46..39967bfd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ node_modules dist + +# certificates for local development +certs \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 96d0a04ce..a2251abde 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,16 +54,10 @@ ## Упаковка в контейнер - Убедитесь, что у вас установлен [Docker](https://www.docker.com/get-started). -- Запустите команду `docker build -t <имя_контейнера> .` в корневой папке проекта. Эта версия создаст контейнер с внешними зависимостями ssl-сертификатов. Если вы хотите потестировать локально (у вас нет сертификатов), используйте `docker build -t <имя_контейнера> --build-arg NGINX_CONF=nginx.local.conf .` - -- Eсли у вас есть сертификаты, запустите докер и смаунтите папку с сертификатами в контейнер: - ```bash - docker run -d \ - -v <папка_с_сертификатами>:/etc/letsencrypt/live/web-standards.ru:ro" \ - -p 80:80 -p 443:443 \ \ - -e NGINX_CONF=nginx.conf \ - -p 443:443 <имя_контейнера> - ``` +- Выполните команду `docker login` (если вы ещё не авторизованы в Docker Hub). +- Запустике сбоку `./docker.sh build` в корневой папке проекта. +- Если вы хотите локально потестровать контейнер, выполните команду `./docker.sh run-local` в корневой папке проекта. Приложение запустится на порту 8080. +- Eсли у вас есть сертификаты, coзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. А дальше запустите `./docker.sh run-prod` в корневой папке проекта. Приложение запустится на порту 443 и 80 (порты указывать не надо). - Если вы тестируете локально то просто `docker run -p 8080:80 <имя_контейнера>`. diff --git a/Dockerfile b/Dockerfile index 565e6efa0..58e9bd55f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,8 +11,11 @@ RUN npm run build FROM nginx:stable-alpine AS prod ARG NGINX_CONF=nginx.conf +ARG NGINX_LOCAL=nginx.local.conf COPY --from=builder /app/dist /var/www/web-standards.ru/html COPY --from=builder /app/${NGINX_CONF} /etc/nginx/conf.d/default.conf +COPY --from=builder /app/${NGINX_LOCAL} /etc/nginx/${NGINX_LOCAL} + EXPOSE 80 CMD ["nginx","-g","daemon off;"] diff --git a/docker.sh b/docker.sh new file mode 100755 index 000000000..24fb658a0 --- /dev/null +++ b/docker.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +task="${1:-}" +certs_dir="${2:-./certs}" + +case "$task" in + build) + docker build -t webstandards_ru --build-arg 'NGINX_CONF=nginx.conf' --build-arg 'NGINX_LOCAL_CONF=nginx.local.conf' . + ;; + run-local) + docker run --rm -p 8080:80 webstandards_ru nginx -g 'daemon off;' -c /etc/nginx/nginx.local.conf + ;; + run-prod) + [ -n "$certs_dir" ] || { printf "Нет сертификатов. Проверьте папку $certs_dir\n" >&2; exit 1; } + docker run --rm \ + -v "$certs_dir":/etc/letsencrypt/live/web-standards.ru:ro \ + -p 80:80 \ + -p 443:443 \ + -e NGINX_CONF=nginx.conf \ + webstandards_ru + ;; + debug) + docker run --rm -it -p 8080:80 webstandards_ru sh + ;; + *) + printf "Неправильная команда, должно быть что-то из этого: %s {build|run-local|run-prod}\n" "$(basename "$0")" >&2 + exit 1 + ;; +esac diff --git a/nginx.local.conf b/nginx.local.conf index cadf68c7e..ee7e1b3a3 100644 --- a/nginx.local.conf +++ b/nginx.local.conf @@ -1,14 +1,34 @@ -server { - listen 80; - listen [::]:80; - server_name localhost www.localhost; +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; - root /var/www/web-standards.ru/html; - index index.html index.xml; + sendfile on; + #tcp_nopush on; - error_page 404 /404/; + keepalive_timeout 65; - location ~ /podcast/(cover\.png|feed|episodes/\d+\.mp3) { - root /var/www/web-standards.ru; + server { + listen 80; + listen [::]:80; + server_name localhost www.localhost; + + root /var/www/web-standards.ru/html; + index index.html index.xml; + + error_page 404 /404/; + + location ~ /podcast/(cover\.png|feed|episodes/\d+\.mp3) { + root /var/www/web-standards.ru; + } } -} +} \ No newline at end of file From 7c68747834aade2422a9e966cbe701430162b25d Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Sun, 25 May 2025 18:25:37 +0100 Subject: [PATCH 3/8] Fix editorconfig checkes --- CONTRIBUTING.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a2251abde..8fb37e36c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,7 +58,3 @@ - Запустике сбоку `./docker.sh build` в корневой папке проекта. - Если вы хотите локально потестровать контейнер, выполните команду `./docker.sh run-local` в корневой папке проекта. Приложение запустится на порту 8080. - Eсли у вас есть сертификаты, coзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. А дальше запустите `./docker.sh run-prod` в корневой папке проекта. Приложение запустится на порту 443 и 80 (порты указывать не надо). - -- Если вы тестируете локально то просто `docker run -p 8080:80 <имя_контейнера>`. - -Если нужно подебажить контейнер, используйте команду `docker run -it <имя_контейнера> /bin/bash`. From 598a0dc7842a61df32096e456a498db651f7195e Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Wed, 28 May 2025 00:30:01 +0100 Subject: [PATCH 4/8] Update docker file, fix permissions and fetch nginx conf --- .gitignore | 2 +- CONTRIBUTING.md | 8 +++++++- Dockerfile | 18 +++++++++++------ docker.sh | 52 ++++++++++++++++++++++++++++-------------------- nginx.local.conf | 8 +------- 5 files changed, 51 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 39967bfd3..fd84a59d3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ node_modules dist # certificates for local development -certs \ No newline at end of file +certs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8fb37e36c..09c99ce59 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,6 +55,12 @@ - Убедитесь, что у вас установлен [Docker](https://www.docker.com/get-started). - Выполните команду `docker login` (если вы ещё не авторизованы в Docker Hub). +- Убедитесь что вы ходите в github по ssh (вы клонируете URL такого формата git@github.com...). Если ssh не настроен вам [сюда](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh) - Запустике сбоку `./docker.sh build` в корневой папке проекта. - Если вы хотите локально потестровать контейнер, выполните команду `./docker.sh run-local` в корневой папке проекта. Приложение запустится на порту 8080. -- Eсли у вас есть сертификаты, coзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. А дальше запустите `./docker.sh run-prod` в корневой папке проекта. Приложение запустится на порту 443 и 80 (порты указывать не надо). +- Eсли у вас есть сертификаты и вы хотите посмотреть на продовую сборку локально + - Убедитесь что ваша операционная система MacOS или Linux. Для Windows, возможно, тоже заработает с WSL + - Сoзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. + - Добавьте в файл `/etc/hosts` строку `127.0.0.1 web-standards.ru`. Не забудьте удалить эту строку позже, иначе вы всегда будете использовать локальную версию приложения. + - Запустите `./docker.sh run-prod` в корневой папке проекта + - Откройте в браузере `https://web-standards.ru`. diff --git a/Dockerfile b/Dockerfile index 58e9bd55f..b316bf774 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,27 @@ -FROM node:lts-alpine AS builder +# syntax=docker/dockerfile:1 -# Install deps +FROM node:lts-alpine AS builder WORKDIR /app COPY . . RUN apk add --no-cache git RUN npm install RUN npm run build +FROM alpine AS nginx-config +WORKDIR /nginx +RUN apk add --no-cache git openssh openssh-client +RUN mkdir -p -m 700 /root/.ssh && ssh-keyscan github.com >> /root/.ssh/known_hosts +RUN --mount=type=ssh git clone --depth 1 git@github.com:web-standards-ru/nginx.git . +RUN rm -rf .git -FROM nginx:stable-alpine AS prod - -ARG NGINX_CONF=nginx.conf +FROM nginx:stable ARG NGINX_LOCAL=nginx.local.conf +ARG NGINX_CONF=nginx.conf +COPY --from=nginx-config /nginx/ /etc/nginx/ COPY --from=builder /app/dist /var/www/web-standards.ru/html COPY --from=builder /app/${NGINX_CONF} /etc/nginx/conf.d/default.conf COPY --from=builder /app/${NGINX_LOCAL} /etc/nginx/${NGINX_LOCAL} EXPOSE 80 -CMD ["nginx","-g","daemon off;"] +CMD ["nginx", "-g", "daemon off;"] diff --git a/docker.sh b/docker.sh index 24fb658a0..b25f690eb 100755 --- a/docker.sh +++ b/docker.sh @@ -1,30 +1,38 @@ #!/usr/bin/env bash set -euo pipefail +export DOCKER_BUILDKIT=1 + + +if [ -z "$SSH_AUTH_SOCK" ]; then + echo "❌ SSH agent not available. Run 'ssh-agent' and 'ssh-add' first." + exit 1 +fi + + task="${1:-}" certs_dir="${2:-./certs}" case "$task" in - build) - docker build -t webstandards_ru --build-arg 'NGINX_CONF=nginx.conf' --build-arg 'NGINX_LOCAL_CONF=nginx.local.conf' . - ;; - run-local) - docker run --rm -p 8080:80 webstandards_ru nginx -g 'daemon off;' -c /etc/nginx/nginx.local.conf - ;; - run-prod) - [ -n "$certs_dir" ] || { printf "Нет сертификатов. Проверьте папку $certs_dir\n" >&2; exit 1; } - docker run --rm \ - -v "$certs_dir":/etc/letsencrypt/live/web-standards.ru:ro \ - -p 80:80 \ - -p 443:443 \ - -e NGINX_CONF=nginx.conf \ - webstandards_ru - ;; - debug) - docker run --rm -it -p 8080:80 webstandards_ru sh - ;; - *) - printf "Неправильная команда, должно быть что-то из этого: %s {build|run-local|run-prod}\n" "$(basename "$0")" >&2 - exit 1 - ;; + build) + docker buildx build --ssh default -t webstandards_ru --build-arg 'NGINX_CONF=nginx.conf' --build-arg 'NGINX_LOCAL_CONF=nginx.local.conf' . + ;; + run-local) + docker run --rm -p 8080:80 webstandards_ru nginx -g 'daemon off;' -c /etc/nginx/nginx.local.conf + ;; + run-prod) + [ -n "$certs_dir" ] || { printf "Нет сертификатов. Проверьте папку $certs_dir\n" >&2; exit 1; } + docker run --rm \ + -v "$certs_dir":/etc/letsencrypt/live/web-standards.ru:ro \ + -p 80:80 \ + -p 443:443 \ + webstandards_ru + ;; + debug) + docker run --rm -it -p 8080:80 webstandards_ru sh + ;; + *) + printf "Неправильная команда, должно быть что-то из этого: %s {build|run-local|run-prod}\n" "$(basename "$0")" >&2 + exit 1 + ;; esac diff --git a/nginx.local.conf b/nginx.local.conf index ee7e1b3a3..94dbeeac7 100644 --- a/nginx.local.conf +++ b/nginx.local.conf @@ -6,12 +6,6 @@ http { include /etc/nginx/mime.types; default_type application/octet-stream; - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - sendfile on; #tcp_nopush on; @@ -31,4 +25,4 @@ http { root /var/www/web-standards.ru; } } -} \ No newline at end of file +} From e216c8fb07621b5e35f93e396a069afc8b7cf32a Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Thu, 29 May 2025 01:00:35 +0100 Subject: [PATCH 5/8] [WIP] Add brotli --- .dockerignore | 5 +++++ CONTRIBUTING.md | 10 +++++----- Dockerfile | 26 ++++++++++++++++---------- docker.sh | 4 ++-- 4 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..724697d76 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +.git +.github +*.log +dist \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 09c99ce59..46c9673a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,8 +59,8 @@ - Запустике сбоку `./docker.sh build` в корневой папке проекта. - Если вы хотите локально потестровать контейнер, выполните команду `./docker.sh run-local` в корневой папке проекта. Приложение запустится на порту 8080. - Eсли у вас есть сертификаты и вы хотите посмотреть на продовую сборку локально - - Убедитесь что ваша операционная система MacOS или Linux. Для Windows, возможно, тоже заработает с WSL - - Сoзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. - - Добавьте в файл `/etc/hosts` строку `127.0.0.1 web-standards.ru`. Не забудьте удалить эту строку позже, иначе вы всегда будете использовать локальную версию приложения. - - Запустите `./docker.sh run-prod` в корневой папке проекта - - Откройте в браузере `https://web-standards.ru`. + - Убедитесь что ваша операционная система MacOS или Linux. Для Windows, возможно, тоже заработает с WSL + - Сoзайте папку `certs` в корневой папке проекта и скопируйте все сертификаты туда. + - Добавьте в файл `/etc/hosts` строку `127.0.0.1 web-standards.ru`. Не забудьте удалить этy строку позже, иначе вы всегда будете использовать локальную версию приложения. + - Запустите `./docker.sh run-prod` в корневой папке проекта + - Откройте в браузере `https://web-standards.ru`. diff --git a/Dockerfile b/Dockerfile index b316bf774..994ce93b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,33 @@ -# syntax=docker/dockerfile:1 +# syntax=docker/dockerfile:1.6 FROM node:lts-alpine AS builder WORKDIR /app -COPY . . RUN apk add --no-cache git +COPY package*.json ./ RUN npm install +COPY . . RUN npm run build FROM alpine AS nginx-config WORKDIR /nginx -RUN apk add --no-cache git openssh openssh-client -RUN mkdir -p -m 700 /root/.ssh && ssh-keyscan github.com >> /root/.ssh/known_hosts +RUN apk add --no-cache git openssh-client +RUN mkdir -p -m 700 /root/.ssh +RUN ssh-keyscan github.com >> /root/.ssh/known_hosts RUN --mount=type=ssh git clone --depth 1 git@github.com:web-standards-ru/nginx.git . RUN rm -rf .git -FROM nginx:stable +FROM alpine ARG NGINX_LOCAL=nginx.local.conf ARG NGINX_CONF=nginx.conf - -COPY --from=nginx-config /nginx/ /etc/nginx/ -COPY --from=builder /app/dist /var/www/web-standards.ru/html +RUN apk add --no-cache nginx nginx-mod-http-brotli nginx-mod-http-headers-more brotli-libs openssl +RUN getent group www-data || addgroup -S www-data +RUN getent passwd www-data || adduser -S -G www-data www-data +COPY --from=nginx-config /nginx /etc/nginx +COPY --from=builder /app/dist/ /usr/share/nginx/html COPY --from=builder /app/${NGINX_CONF} /etc/nginx/conf.d/default.conf COPY --from=builder /app/${NGINX_LOCAL} /etc/nginx/${NGINX_LOCAL} - +RUN sed -i '1aload_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so;' /etc/nginx/nginx.conf +RUN sed -i '1aload_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so;' /etc/nginx/nginx.conf +RUN mkdir -p /etc/nginx/ssl/certs && openssl dhparam -out /etc/nginx/ssl/certs/dhparam.pem 2048 EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] +CMD ["nginx","-g","daemon off;"] diff --git a/docker.sh b/docker.sh index b25f690eb..0beae2622 100755 --- a/docker.sh +++ b/docker.sh @@ -5,8 +5,8 @@ export DOCKER_BUILDKIT=1 if [ -z "$SSH_AUTH_SOCK" ]; then - echo "❌ SSH agent not available. Run 'ssh-agent' and 'ssh-add' first." - exit 1 + echo "❌ SSH agent not available. Run 'ssh-agent' and 'ssh-add' first." + exit 1 fi From 95ee788d37d120a8348be80498749f6e0d37bbde Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Thu, 29 May 2025 01:20:10 +0100 Subject: [PATCH 6/8] Fix param path --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 994ce93b2..c1339aff3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,11 +23,11 @@ RUN apk add --no-cache nginx nginx-mod-http-brotli nginx-mod-http-headers-more b RUN getent group www-data || addgroup -S www-data RUN getent passwd www-data || adduser -S -G www-data www-data COPY --from=nginx-config /nginx /etc/nginx -COPY --from=builder /app/dist/ /usr/share/nginx/html +COPY --from=builder /app/dist/ /var/www/web-standards.ru/html COPY --from=builder /app/${NGINX_CONF} /etc/nginx/conf.d/default.conf COPY --from=builder /app/${NGINX_LOCAL} /etc/nginx/${NGINX_LOCAL} RUN sed -i '1aload_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so;' /etc/nginx/nginx.conf RUN sed -i '1aload_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so;' /etc/nginx/nginx.conf -RUN mkdir -p /etc/nginx/ssl/certs && openssl dhparam -out /etc/nginx/ssl/certs/dhparam.pem 2048 +RUN mkdir -p /etc/ssl/certs && openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 EXPOSE 80 CMD ["nginx","-g","daemon off;"] From 384e930a6daa5db2519df7c10e8bb08df3d352ec Mon Sep 17 00:00:00 2001 From: Polina Gurtovaya Date: Thu, 29 May 2025 01:37:28 +0100 Subject: [PATCH 7/8] Fix editorconfig --- .dockerignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 724697d76..c9d88c760 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,4 +2,4 @@ node_modules .git .github *.log -dist \ No newline at end of file +dist From d0599a4843d35d4b0e14753dda5769142fd84344 Mon Sep 17 00:00:00 2001 From: Polina Gurtovaia Date: Wed, 11 Jun 2025 16:07:56 +0400 Subject: [PATCH 8/8] Swap to clean-install Co-authored-by: monochromer --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c1339aff3..163021375 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM node:lts-alpine AS builder WORKDIR /app RUN apk add --no-cache git COPY package*.json ./ -RUN npm install +RUN npm clean-install COPY . . RUN npm run build