feat: dockerfile + docker-compose + déploiement VPS gestion.materiaux-destock.fr

This commit is contained in:
2026-06-07 00:27:16 +02:00
parent 51f87c0672
commit 99c3380d00
7 changed files with 114 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
# Auth
NEXTAUTH_URL=https://gestion.materiaux-destock.fr
NEXTAUTH_SECRET=<générer avec: openssl rand -base64 32>
# Shopify (remplir lors du Plan 2)
SHOPIFY_STORE_DOMAIN=materiaux-destock.myshopify.com
SHOPIFY_ADMIN_API_TOKEN=shpat_...
# Google Sheets (remplir lors du Plan 3)
GOOGLE_SERVICE_ACCOUNT_EMAIL=...@....iam.gserviceaccount.com
GOOGLE_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n..."
GOOGLE_SHEETS_ID=
# Base de données
DATABASE_URL="file:./data/app.db"
# Seed (premier déploiement uniquement)
SEED_ADMIN_PASSWORD=
+1
View File
@@ -42,3 +42,4 @@ yarn-error.log*
next-env.d.ts
/src/generated/prisma
.env.production
+48
View File
@@ -0,0 +1,48 @@
# Étape 1 : dépendances
FROM node:20-alpine AS deps
WORKDIR /app
RUN apk add --no-cache python3 make g++
COPY package*.json ./
RUN npm ci
# Étape 2 : build
FROM node:20-alpine AS builder
WORKDIR /app
RUN apk add --no-cache python3 make g++
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV DATABASE_URL="file:./data/app.db"
RUN npx prisma generate
RUN npm run build
# Étape 3 : image de production
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN apk add --no-cache python3 make g++
RUN addgroup --system --gid 1001 nodejs \
&& adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/prisma.config.ts ./prisma.config.ts
COPY --from=builder /app/node_modules/.bin/prisma ./node_modules/.bin/prisma
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma
COPY --from=builder /app/node_modules/better-sqlite3 ./node_modules/better-sqlite3
COPY --from=builder /app/node_modules/@prisma/adapter-better-sqlite3 ./node_modules/@prisma/adapter-better-sqlite3
COPY --from=builder /app/node_modules/dotenv ./node_modules/dotenv
COPY scripts/start.sh ./start.sh
RUN mkdir -p data && chown -R nextjs:nodejs data .
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["sh", "start.sh"]
+15
View File
@@ -0,0 +1,15 @@
services:
app:
build: .
image: gestion-materiaux-destock:latest
restart: unless-stopped
env_file:
- .env
volumes:
- ./data:/app/data
networks:
- web
networks:
web:
external: true
+3 -1
View File
@@ -1,4 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
const nextConfig = {
output: 'standalone',
};
export default nextConfig;
+23
View File
@@ -0,0 +1,23 @@
import { PrismaClient } from '@prisma/client'
import { hash } from 'bcryptjs'
const prisma = new PrismaClient()
const password = process.env.SEED_ADMIN_PASSWORD
if (!password) {
console.error('SEED_ADMIN_PASSWORD requis')
process.exit(1)
}
await prisma.user.upsert({
where: { email: 'mathieu.fort@gmail.com' },
update: {},
create: {
email: 'mathieu.fort@gmail.com',
name: 'Mathieu',
password: await hash(password, 12),
role: 'admin',
},
})
console.log('✅ Compte admin créé : mathieu.fort@gmail.com')
await prisma.$disconnect()
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
set -e
echo "▶ Migration base de données…"
node_modules/.bin/prisma migrate deploy
echo "▶ Démarrage du serveur…"
exec node server.js