Initial production deployment setup

- Production docker-compose with nginx support
- Nginx configuration for portal.monacousa.org
- Deployment script with backup/restore
- Gitea CI/CD workflow
- Fix CountryFlag reactivity for dropdown flags

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-25 02:19:49 +01:00
commit e7338d1a70
457 changed files with 54912 additions and 0 deletions

77
Dockerfile Normal file
View File

@@ -0,0 +1,77 @@
# Monaco USA Portal - SvelteKit Application
# Multi-stage build for optimized production image
# ============================================
# Stage 1: Dependencies
# ============================================
FROM node:20-alpine AS deps
WORKDIR /app
# Copy package files
COPY package.json package-lock.json* ./
# Install dependencies
RUN npm ci
# ============================================
# Stage 2: Builder
# ============================================
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files first
COPY package.json package-lock.json* ./
# Install dependencies - use npm install instead of npm ci to properly
# resolve platform-specific optional dependencies (rollup binaries)
RUN rm -rf node_modules && npm install --legacy-peer-deps
# Copy source files
COPY . .
# Build arguments for environment variables
ARG PUBLIC_SUPABASE_URL
ARG PUBLIC_SUPABASE_ANON_KEY
ARG SUPABASE_SERVICE_ROLE_KEY
# Set environment variables for build
ENV PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL
ENV PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY
ENV SUPABASE_SERVICE_ROLE_KEY=$SUPABASE_SERVICE_ROLE_KEY
# Build the application
RUN npm run build
# Prune dev dependencies
RUN npm prune --production
# ============================================
# Stage 3: Runner (Production)
# ============================================
FROM node:20-alpine AS runner
WORKDIR /app
# Set production environment
ENV NODE_ENV=production
# Create non-root user for security
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 sveltekit
# Copy built application
COPY --from=builder --chown=sveltekit:nodejs /app/build ./build
COPY --from=builder --chown=sveltekit:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=sveltekit:nodejs /app/package.json ./package.json
# Switch to non-root user
USER sveltekit
# Expose port
EXPOSE 3000
# Set runtime environment variables
ENV HOST=0.0.0.0
ENV PORT=3000
# Start the application
CMD ["node", "build"]