# Бинго «Баланс 2.0» — один контейнер: Node.js со встроенным SQLite, без npm-зависимостей. # Шрифты и все файлы страницы внутри образа; в работе контейнеру не нужен интернет. FROM node:22.22-alpine ENV NODE_ENV=production \ PORT=8080 \ DATA_DIR=/data \ PUBLIC_DIR=/app/public WORKDIR /app COPY --chown=root:root package.json schema.sql ./ COPY --chown=root:root server ./server COPY --chown=root:root public ./public # База и резервные копии — в томе /data, владелец — непривилегированный пользователь node. RUN mkdir -p /data && chown node:node /data VOLUME ["/data"] USER node EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:8080/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" CMD ["node", "--disable-warning=ExperimentalWarning", "server/server.mjs"]