Un projet Compose par environnement sur la même machine : ports du proxy et origine publique en variables dans docker-compose.prod.yml, réglage mémoire des deux bases TimescaleDB et du webserver Airflow. Le workflow deploy.yml déploie dev en recette et main en production depuis un runner installé sur la VM, jamais sur pull_request. scripts/provision-host.sh prépare les deux dossiers, secrets et certificats compris, sans rien démarrer. L'image frontend quitte dhi.io/nginx, registre authentifié dont personne n'a l'accès, pour nginx:1.28-alpine : elle n'avait jamais été construite. ADR 0009, vues infra et CI/CD, README et .env.example mis à jour. Refs #21, #22
47 lines
1.1 KiB
Docker
47 lines
1.1 KiB
Docker
# ==================
|
|
# Étape 1 : Build
|
|
# ==================
|
|
|
|
# Image pour frontend
|
|
FROM node:24-alpine3.22 AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json package-lock.json* ./
|
|
|
|
# Installation des dépendances du projet avec npm
|
|
RUN npm ci
|
|
|
|
# Copie du code source vers le conteneur
|
|
COPY . .
|
|
|
|
# Build
|
|
RUN npm run build
|
|
|
|
# ==================
|
|
# Étape 2 : Runner
|
|
# ==================
|
|
|
|
|
|
FROM nginx:1.28-alpine AS runner
|
|
|
|
# Copie de la configuration de nginx
|
|
COPY --chown=root:root --chmod=755 nginx.conf /etc/nginx/nginx.conf
|
|
|
|
# Copy the static build output from the build stage to Nginx's default HTML serving directory
|
|
COPY --chown=root:root --chmod=755 --from=builder /app/dist/*/browser /usr/share/nginx/html
|
|
|
|
# Create necessary directories with proper permissions for nginx
|
|
RUN mkdir -p /var/log/nginx /var/cache/nginx && \
|
|
chown -R nginx:nginx /var/log/nginx /var/cache/nginx /usr/share/nginx/html
|
|
|
|
# Use a non-root user for security best practices
|
|
USER nginx
|
|
|
|
# Frontend : port 3000
|
|
# Backend : port 8000
|
|
EXPOSE 3000
|
|
|
|
# Start Nginx directly with custom config
|
|
ENTRYPOINT ["nginx", "-c", "/etc/nginx/nginx.conf"]
|
|
CMD ["-g", "daemon off;"] |