Собирайте Node.js-приложение multi-stage Dockerfile, запускайте непривилегированным пользователем и фиксируйте major-ветку образа. Секреты не копируйте в image.

Важно: Node 24 указан как текущая LTS-основа на дату ревизии; перед сборкой проверьте release schedule и совместимость зависимостей.

1. Создайте Dockerfile

FROM node:24-bookworm-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build --if-present

FROM node:24-bookworm-slim
ENV NODE_ENV=production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force
COPY --from=build /app .
USER node
EXPOSE 3000
CMD ["node", "server.js"]

2. Добавьте .dockerignore

node_modules
.git
.env
npm-debug.log

3. Соберите и запустите локально

docker build --pull -t example-app:1 .
docker run --rm --name example-app -p 127.0.0.1:3000:3000 --env-file .env example-app:1

4. Поставьте reverse proxy и healthcheck

Backend оставьте на 127.0.0.1, TLS завершайте в Nginx. В production добавьте HEALTHCHECK, лимиты ресурсов и централизованные логи.

Для размещения приложения можно сравнить хостинги для Node.js по доступным ресурсам и возможностям масштабирования.

Официальная документация