iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
TypeScript · Avancé

OpenFiler

Construire une plateforme de gestion de fichiers complète — upload, authentification, analytics, sécurité fail2ban et déploiement Docker.

Next.js 15TypeScriptSQLiteBetter AuthTailwind CSS v4
GitHub
01Setup et configuration02Authentification avec Better Auth03Base de données SQLite04Système d'upload de fichiers05Dashboard et interface06Corbeille et liens de partage07Déploiement Docker
Chapitre 7·20 min

Déploiement Docker

OpenFiler se déploie en une commande avec Docker Compose. Le Dockerfile est multi-stage pour produire une image légère.

Dockerfile

Dockerfile
# Étape 1 — build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
 
# Étape 2 — production
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
 
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
 
EXPOSE 3000
CMD ["node", "server.js"]

Le mode standalone de Next.js produit un dossier autonome — pas besoin de node_modules en production.

Pour l'activer :

next.config.js
module.exports = {
  output: 'standalone',
}

Docker Compose

docker-compose.yml
services:
  openfiler:
    build: .
    ports:
      - "3000:3000"
    environment:
      - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
      - BETTER_AUTH_URL=${BETTER_AUTH_URL}
      - BETTER_AUTH_TRUSTED_ORIGINS=${BETTER_AUTH_TRUSTED_ORIGINS}
      - DATABASE_URL=/data/openfiler.db
      - NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL}
    volumes:
      - openfiler_data:/data
      - openfiler_uploads:/app/upload
 
volumes:
  openfiler_data:
  openfiler_uploads:

Deux volumes persistants :

  • openfiler_data — la base SQLite survit aux redémarrages
  • openfiler_uploads — les fichiers uploadés aussi

Déploiement

Terminal
# Copier et remplir les variables
cp .env.example .env
nano .env
 
# Build et démarrage en arrière-plan
docker-compose up -d --build
 
# Vérifier les logs
docker-compose logs -f
 
# Arrêter
docker-compose down

Variables d'environnement en production

En production, BETTER_AUTH_URL et NEXT_PUBLIC_APP_URL doivent pointer vers votre domaine :

.env (production)
BETTER_AUTH_SECRET=clé-longue-aléatoire-64-chars-minimum
BETTER_AUTH_URL=https://files.mondomaine.fr
BETTER_AUTH_TRUSTED_ORIGINS=https://files.mondomaine.fr
DATABASE_URL=/data/openfiler.db
NEXT_PUBLIC_APP_URL=https://files.mondomaine.fr

Reverse proxy (Nginx)

Si vous servez OpenFiler derrière Nginx :

nginx.conf
server {
  listen 80;
  server_name files.mondomaine.fr;
 
  client_max_body_size 70M;  # légèrement supérieur à la limite d'upload (64MB)
 
  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

client_max_body_size 70M est essentiel — sans ça, Nginx bloque les uploads avant même qu'ils n'arrivent à Next.js.

Précédent
Corbeille et liens de partage

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main