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:
68
Dockerfile
Executable file → Normal file
68
Dockerfile
Executable file → Normal 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"]
|
||||
|
||||
Reference in New Issue
Block a user