Update next.config.js for standalone output and enhance README with Docker instructions and installation updates
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 2m13s

This commit is contained in:
Julien Froidefond
2025-12-19 10:38:53 +01:00
parent 5418447d29
commit ba5835866c
7 changed files with 206 additions and 6 deletions

62
.dockerignore Normal file
View File

@@ -0,0 +1,62 @@
# Dependencies
node_modules
.pnpm-store
.pnpm-debug.log*
# Next.js
.next
out
dist
# Production
build
# Misc
.DS_Store
*.pem
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Local env files
.env*.local
.env
# Testing
coverage
.nyc_output
# IDE
.vscode
.idea
*.swp
*.swo
*~
# Git
.git
.gitignore
# Docker
Dockerfile
docker-compose.yml
.dockerignore
# Documentation
README.md
*.md
# Logs
logs
*.log
# Temporary files
*.tmp
*.temp
# CSV files
*.csv

View File

@@ -0,0 +1,20 @@
name: Deploy with Docker Compose
on:
push:
branches:
- main # adapte la branche que tu veux déployer
jobs:
deploy:
runs-on: mac-orbstack-runner # le nom que tu as donné au runner
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Deploy stack
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
run: |
docker compose up -d --build

61
Dockerfile Normal file
View File

@@ -0,0 +1,61 @@
# Stage 1: Dependencies
FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Copy package files
COPY package.json pnpm-lock.yaml* ./
# Install pnpm if not available
RUN corepack enable && corepack prepare pnpm@latest --activate
# Install dependencies
RUN pnpm install --frozen-lockfile
# Stage 2: Builder
FROM node:20-alpine AS builder
WORKDIR /app
# Copy dependencies from deps stage
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Enable pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# Set environment variable for build
ENV NEXT_TELEMETRY_DISABLED 1
# Create public directory if it doesn't exist
RUN mkdir -p public
# Build the application
RUN pnpm run build
# Stage 3: Runner
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Copy necessary files from builder
# Create public directory first
RUN mkdir -p ./public
# Copy public directory (will work now that we have public/.gitkeep in source)
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]

View File

@@ -5,27 +5,54 @@ Application Next.js pour extraire aléatoirement un certain nombre de personnes
## Installation ## Installation
```bash ```bash
npm install pnpm install
``` ```
## Développement ## Développement
```bash ```bash
npm run dev pnpm dev
``` ```
Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur. Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur.
## Docker
### Build et lancement avec Docker Compose
```bash
docker-compose up --build
```
L'application sera accessible sur [http://localhost:3000](http://localhost:3000)
### Build manuel
```bash
docker build -t people-randomizr .
docker run -p 3000:3000 people-randomizr
```
### Arrêter les conteneurs
```bash
docker-compose down
```
## Fonctionnalités ## Fonctionnalités
- Upload de fichier CSV via l'interface
- Stockage des données dans le localStorage du navigateur
- Affichage de toutes les personnes du CSV - Affichage de toutes les personnes du CSV
- Filtrage par poste avec recherche
- Extraction aléatoire d'un nombre configurable de personnes - Extraction aléatoire d'un nombre configurable de personnes
- Affichage des résultats avec nom, description et type - Affichage des résultats avec nom, description et type
- Thème tech moderne avec glassmorphism
## Structure ## Structure
- `app/page.tsx` - Page principale avec l'interface utilisateur - `app/page.tsx` - Page principale avec l'interface utilisateur
- `app/api/people/route.ts` - API route pour charger les données du CSV - `lib/csv-parser-client.ts` - Parser CSV côté client
- `lib/csv-parser.ts` - Parser pour le fichier CSV - `Dockerfile` - Configuration Docker multi-stage
- `group-dev-ad.csv` - Fichier source des données - `docker-compose.yml` - Configuration Docker Compose

28
docker-compose.yml Normal file
View File

@@ -0,0 +1,28 @@
version: "3.8"
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: people-randomizr
ports:
- "4399:3000"
environment:
- NODE_ENV=production
- NEXT_TELEMETRY_DISABLED=1
restart: unless-stopped
healthcheck:
test:
[
"CMD",
"wget",
"--quiet",
"--tries=1",
"--spider",
"http://localhost:3000",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s

View File

@@ -1,5 +1,7 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = {} const nextConfig = {
output: 'standalone',
}
module.exports = nextConfig module.exports = nextConfig

0
public/.gitkeep Normal file
View File