feat: mise à jour du Dockerfile et du docker-compose pour le développement et la production, ajout de la licence et amélioration des pages légales

This commit is contained in:
Puechberty Arthur
2026-04-01 22:20:48 +02:00
parent b54744a6d8
commit 45a9c53687
8 changed files with 106 additions and 41 deletions
+16 -24
View File
@@ -1,34 +1,26 @@
# === Étape 1 : Build ===
FROM node:20-alpine AS builder
FROM node:22-alpine AS base
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1
# Copier les fichiers de dépendances pour profiter du cache Docker
COPY package*.json ./
# Installer uniquement ce qu'il faut pour le build
FROM base AS deps
COPY package.json package-lock.json ./
RUN npm ci
# Copier tout le code
FROM deps AS dev
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev", "--", "--hostname", "0.0.0.0", "--port", "3000"]
# Build Next.js pour la production
FROM deps AS builder
COPY . .
RUN npm run build
# === Étape 2 : Runner léger ===
FROM node:20-alpine AS runner
WORKDIR /app
# Copier uniquement ce qui est nécessaire pour la prod
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
# Mode production
FROM base AS runner
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
# Lancer le serveur Next.js
CMD ["npm", "start"]
CMD ["node", "server.js"]
+25
View File
@@ -0,0 +1,25 @@
Copyright (c) 2026 Arthur
Licence pour tous les projets Arthur
1. Définition
Cette licence définit les droits et obligations concernant l'utilisation, la modification et la redistribution du code fourni par l'auteur.
2. Autorisation d'utilisation
Vous êtes libre d'utiliser ce code pour vos projets personnels ou commerciaux. L'utilisation doit inclure une mention de l'auteur dune manière libre (ex: "inspiré de ArthurP").
3. Modification
Vous pouvez modifier, adapter ou améliorer le code pour vos besoins. Les modifications doivent être identifiées comme telles et ne doivent pas être présentées comme l'original.
4. Redistribution
- Le code original **ne peut pas être redistribué tel quel**.
- Les versions modifiées peuvent être partagées, sous réserve de mentionner l'auteur original.
5. Usage commercial
Lusage commercial des versions modifiées est autorisé. Vous pouvez générer des revenus avec votre version modifiée.
6. Attribution
L'auteur original doit être cité dune manière libre, mais visible, sur tout projet utilisant ce code ou ses dérivés.
7. Responsabilité
Le code est fourni "tel quel", sans garantie daucune sorte. Lauteur décline toute responsabilité pour tout dommage direct ou indirect résultant de lutilisation du code.
+25 -5
View File
@@ -1,11 +1,31 @@
services:
web:
build: .
hub-dev:
profiles: ["dev"]
build:
context: .
target: dev
container_name: hub-dev
ports:
- "3000:3000"
volumes:
- ./:/app
- .:/app
- /app/node_modules
- /app/.next
environment:
- NODE_ENV=development
command: npm run dev
NEXT_TELEMETRY_DISABLED: "1"
NODE_ENV: development
hub-prod:
profiles: ["prod"]
build:
context: .
target: runner
container_name: hub-prod
restart: unless-stopped
ports:
- "3000:3000"
env_file:
- .env
environment:
NEXT_TELEMETRY_DISABLED: "1"
NODE_ENV: production
+35 -7
View File
@@ -65,13 +65,41 @@ export default function RootLayout({
<div className="flex-1">
{children}
</div>
<footer className="w-full border-t border-zinc-200 bg-zinc-50 py-4 text-center text-sm text-zinc-500">
<nav aria-label="Liens légaux" className="flex flex-wrap justify-center gap-4">
<Link href="/legal/mentions-legales" className="hover:underline">Mentions légales</Link>
<Link href="/legal/confidentialite" className="hover:underline">Confidentialité</Link>
<Link href="/legal/cgu" className="hover:underline">CGU</Link>
</nav>
<div className="mt-2">© {new Date().getFullYear()} ArthurP</div>
<footer className="w-full border-t border-zinc-200 bg-zinc-50">
<div className="mx-auto grid max-w-6xl grid-cols-1 gap-10 px-6 py-12 text-sm text-zinc-600 md:grid-cols-3">
<div>
<h2 className="text-base font-semibold text-zinc-900">Navigation</h2>
<nav aria-label="Navigation principale" className="mt-4 flex flex-col gap-2">
<Link href="/" className="hover:text-zinc-900 hover:underline">Accueil</Link>
<Link href="/#projets" className="hover:text-zinc-900 hover:underline">Projets</Link>
<a href="https://contact.arthurp.fr" target="_blank" rel="noopener noreferrer" className="hover:text-zinc-900 hover:underline">Contact</a>
</nav>
</div>
<div>
<h2 className="text-base font-semibold text-zinc-900">ArthurP.fr</h2>
<div className="mt-4 flex flex-col gap-2">
<a href="https://arthurp.fr" target="_blank" rel="noopener noreferrer" className="hover:text-zinc-900 hover:underline">arthurp.fr</a>
<a href="https://github.com/arthur-pbty" target="_blank" rel="noopener noreferrer" className="hover:text-zinc-900 hover:underline">GitHub</a>
<a href="mailto:contact@arthurp.fr" className="hover:text-zinc-900 hover:underline">contact@arthurp.fr</a>
<a href="https://contact.arthurp.fr" target="_blank" rel="noopener noreferrer" className="hover:text-zinc-900 hover:underline">contact.arthurp.fr</a>
</div>
</div>
<div>
<h2 className="text-base font-semibold text-zinc-900">Légal</h2>
<nav aria-label="Liens légaux" className="mt-4 flex flex-col gap-2">
<Link href="/legal/mentions-legales" className="hover:text-zinc-900 hover:underline">Mentions légales</Link>
<Link href="/legal/confidentialite" className="hover:text-zinc-900 hover:underline">Confidentialité</Link>
<Link href="/legal/cgu" className="hover:text-zinc-900 hover:underline">CGU</Link>
</nav>
</div>
</div>
<div className="border-t border-zinc-200 px-6 py-5 text-center text-sm text-zinc-500">
<p>© {new Date().getFullYear()} Arthur P. Tous droits réservés.</p>
<p className="mt-1">Fait avec passion et auto-hébergé sur Proxmox.</p>
</div>
</footer>
</div>
</body>
+1 -1
View File
@@ -9,7 +9,7 @@ export default function CGU() {
</Link>
<h1 className="text-2xl font-bold mb-4">Conditions Générales dUtilisation</h1>
<p className="mb-2">Lutilisation des outils proposés sur arthurp.fr est libre et gratuite. Léditeur ne saurait être tenu responsable dun usage inapproprié ou des conséquences liées à lutilisation des outils.</p>
<p className="mb-2">En utilisant ce site, vous acceptez ces conditions. Pour toute question, contactez-moi à contact [at] arthurp.fr.</p>
<p className="mb-2">En utilisant ce site, vous acceptez ces conditions. Pour toute question, contactez-moi via contact.arthurp.fr ou par e-mail à contact@arthurp.fr.</p>
</main>
</div>
);
+1 -1
View File
@@ -9,7 +9,7 @@ export default function Confidentialite() {
</Link>
<h1 className="text-2xl font-bold mb-4">Politique de confidentialité</h1>
<p className="mb-2">Aucune donnée personnelle nest collectée à des fins commerciales. Les outils proposés peuvent utiliser des cookies techniques pour le bon fonctionnement du site.</p>
<p className="mb-2">Aucune information nest transmise à des tiers. Pour toute question, contactez-moi à contact [at] arthurp.fr.</p>
<p className="mb-2">Aucune information nest transmise à des tiers. Pour toute question, contactez-moi via contact.arthurp.fr ou par e-mail à contact@arthurp.fr.</p>
</main>
</div>
);
+2 -2
View File
@@ -10,8 +10,8 @@ export default function MentionsLegales() {
<h1 className="text-2xl font-bold mb-4">Mentions légales</h1>
<p className="mb-2">Conformément à la loi, voici les informations légales du site arthurp.fr.</p>
<ul className="mb-4 list-disc pl-6">
<li><strong>Éditeur :</strong> Arthur P. (contact via Discord ou formulaire sur le site)</li>
<li><strong>Contact :</strong> contact [at] arthurp.fr</li>
<li><strong>Éditeur :</strong> Arthur P.</li>
<li><strong>Contact :</strong> contact.arthurp.fr ou contact@arthurp.fr</li>
</ul>
<p className="text-zinc-500 text-sm">Ce site est un projet personnel, sans but commercial.</p>
</main>
+1 -1
View File
@@ -141,7 +141,7 @@ export default function Home() {
<p className="mb-10 max-w-2xl text-center text-lg text-zinc-600">
Découvre tous mes outils, projets et ressources en ligne: bots Discord, générateurs, QCM, linktree et plus encore. Un point daccès unique pour tout ce que je développe et partage.
</p>
<div className="grid w-full grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3">
<div id="projets" className="grid w-full scroll-mt-24 grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3">
{projects.map((project) => (
<div key={project.title} className="flex flex-col rounded-2xl border border-zinc-200 bg-zinc-50 shadow-sm hover:shadow-lg transition-shadow overflow-hidden">
<Image