v4.1.24: Добавлены поля arve_checked и arve_makstud

- FEAT: Добавлены поля arve_checked (int) и arve_makstud (string) в production_records
- POST /api/records: INSERT с arve_checked, arve_makstud
- PUT /api/records/🆔 UPDATE с arve_checked, arve_makstud
- Docker: docker-compose.prod.yml, ecosystem.config.cjs (PM2)
- wrangler.toml → wrangler.jsonc
- seed.sql: полные тестовые данные
- test_browser.js: E2E тесты
- Удалены старые HOTFIX-файлы (v4.1.11-v4.1.23)
- Удалены data/*.sqlite из репозитория
This commit is contained in:
Deploy Bot
2026-01-16 11:36:00 +02:00
parent 4fe9b0fdc9
commit 8b36ea16ef
33 changed files with 705 additions and 2985 deletions

68
Dockerfile Executable file → Normal file
View File

@@ -1,40 +1,58 @@
# syntax=docker/dockerfile:1
# Multi-stage build для оптимизации размера образа
# Stage 1: Build
FROM node:20-alpine AS builder
# ---------- Build stage ----------
FROM node:20-bookworm-slim AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
# Копировать package files
COPY package*.json ./
# Установить зависимости
RUN npm ci --only=production
# Копировать исходники
COPY . .
# Собрать проект
RUN npm run build
# ---------- Runtime stage ----------
FROM node:20-bookworm-slim
# Stage 2: Runtime
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production \
WRANGLER_SEND_METRICS=false \
PORT=3000 \
D1_BINDING=aknaproff-db \
PERSIST_PATH=/data
# Установить dumb-init для правильной обработки сигналов
RUN apk add --no-cache dumb-init
# Copy everything from builder (includes node_modules, dist, migrations, etc.)
COPY --from=builder /app /app
# Создать пользователя без root
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001
# Create data directory
RUN mkdir -p /data
# Копировать зависимости из builder
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
COPY --from=builder --chown=nodejs:nodejs /app/package.json ./
COPY --from=builder --chown=nodejs:nodejs /app/wrangler.jsonc ./
COPY --from=builder --chown=nodejs:nodejs /app/migrations ./migrations
COPY --from=builder --chown=nodejs:nodejs /app/seed.sql ./
# Создать директорию для локальной БД
RUN mkdir -p .wrangler/state/v3/d1 && \
chown -R nodejs:nodejs .wrangler
# Переключиться на непривилегированного пользователя
USER nodejs
# Открыть порт
EXPOSE 3000
# Persist D1 SQLite data between restarts
VOLUME ["/data"]
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost:3000 || exit 1
# Start wrangler directly (no bash script needed)
CMD ["npx", "wrangler", "pages", "dev", "dist", \
"--local", \
"--d1=aknaproff-db", \
"--persist-to=/data", \
"--ip=0.0.0.0", \
"--port=3000"]
# Запуск с dumb-init
ENTRYPOINT ["dumb-init", "--"]
# Команда запуска
CMD ["sh", "-c", "npm run db:reset && npx wrangler pages dev dist --d1=webapp-production --local --ip 0.0.0.0 --port 3000"]