feat: plantilla base workspace SaaS
This commit is contained in:
89
frontend/Dockerfile.prod
Normal file
89
frontend/Dockerfile.prod
Normal file
@@ -0,0 +1,89 @@
|
||||
# ==========================
|
||||
# Etapa de build
|
||||
# ==========================
|
||||
FROM node:22-alpine AS build
|
||||
|
||||
# Directorio de trabajo
|
||||
WORKDIR /app
|
||||
|
||||
# Configurar npm para trabajar con certificados autofirmados e instalar pnpm
|
||||
RUN npm config set strict-ssl false && \
|
||||
npm install -g pnpm
|
||||
|
||||
# Copiar archivos de dependencias
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
|
||||
# Instalar dependencias con pnpm
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
ARG VITE_API_URL
|
||||
ENV VITE_API_URL=${VITE_API_URL}
|
||||
|
||||
ARG VITE_KEYCLOAK_URL
|
||||
ENV VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL}
|
||||
|
||||
ARG VITE_KEYCLOAK_REALM=master
|
||||
ENV VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM}
|
||||
|
||||
ARG VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend
|
||||
ENV VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID}
|
||||
|
||||
# URL pública del Hub Workspace (bakeada en build para el browser)
|
||||
ARG VITE_HUB_URL=https://workspace.aduanasoft.com
|
||||
ENV VITE_HUB_URL=${VITE_HUB_URL}
|
||||
|
||||
ARG INTERNAL_API_URL
|
||||
ENV INTERNAL_API_URL=${INTERNAL_API_URL}
|
||||
|
||||
# Copiar el resto del código
|
||||
COPY . .
|
||||
|
||||
# Construir el proyecto
|
||||
RUN pnpm run build
|
||||
|
||||
|
||||
# ==========================
|
||||
# Etapa de ejecución con Node.js
|
||||
# ==========================
|
||||
FROM node:22-alpine AS runtime
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add --no-cache wget
|
||||
|
||||
RUN npm config set strict-ssl false && \
|
||||
npm install -g pnpm
|
||||
|
||||
# Crear usuario no-root para seguridad antes de copiar con --chown
|
||||
RUN addgroup -g 1001 -S nodejs
|
||||
RUN adduser -S svelte -u 1001
|
||||
|
||||
COPY docker-entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Copiar solo archivos necesarios para producción y aplicar propietario en la copia
|
||||
COPY --from=build --chown=svelte:nodejs /app/build ./build
|
||||
COPY --from=build --chown=svelte:nodejs /app/package.json ./
|
||||
COPY --from=build --chown=svelte:nodejs /app/node_modules ./node_modules
|
||||
|
||||
# WORKDIR /app queda owned por root; pnpm necesita crear _tmp_* en el cwd al ejecutar scripts.
|
||||
RUN chown svelte:nodejs /app
|
||||
|
||||
USER svelte
|
||||
|
||||
# Puerto para SvelteKit con adapter-node
|
||||
EXPOSE 5173
|
||||
|
||||
# Variables de entorno
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=5173
|
||||
ENV HOST=0.0.0.0
|
||||
|
||||
# IMPORTANTE: Estas variables se pueden sobrescribir en docker-compose
|
||||
# pero necesitamos valores por defecto para el build
|
||||
ENV INTERNAL_API_URL=http://backend:8000/api/
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Ejecutar aplicación con Node.js
|
||||
CMD ["pnpm", "start"]
|
||||
Reference in New Issue
Block a user