From 74ecd21edaef440d56617439024bdb9ad22acf0c Mon Sep 17 00:00:00 2001 From: Puechberty Arthur Date: Fri, 12 Jun 2026 01:26:06 +0200 Subject: [PATCH] add runner --- .dockerignore | 6 ++++++ .env.example | 9 +++++++++ .github/workflows/deploy.yml | 27 +++++++++++++++++++++++++++ Dockerfile | 28 ++++++++++++++++++++++++++++ docker-compose.dev.yml | 19 ------------------- docker-compose.yml | 28 ++++++++++++++++------------ next.config.ts | 1 + package.json | 3 ++- 8 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/deploy.yml create mode 100644 Dockerfile delete mode 100644 docker-compose.dev.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3c1eda2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +.next +npm-debug.log +Dockerfile +docker-compose.yml +.git \ No newline at end of file diff --git a/.env.example b/.env.example index 02e0ec1..05f9b28 100644 --- a/.env.example +++ b/.env.example @@ -3,3 +3,12 @@ NEXT_PUBLIC_BASE_URL=https://reducelink.arthurp.fr # Base de données SQLite DATABASE_URL="file:./dev.db" + +# Port exposé côté machine +APP_PORT=3000 + +# Node environment +NODE_ENV=production + +# Next.js +PORT=3000 \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..ba110a9 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,27 @@ +name: Deploy Docker + +on: + push: + branches: ["main"] + +jobs: + deploy: + runs-on: self-hosted + + steps: + - name: Deploy on server + run: | + set -e + + echo "Go to app folder" + cd /opt/apps/reducelink + + echo "Pull latest code" + git pull origin main + + echo "Build & restart containers" + docker compose down || true + docker compose build + docker compose up -d + + echo "Deploy finished" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..79184ea --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# ===== BUILD ===== +FROM node:20-alpine AS builder + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . + +RUN npm run build + + +# ===== RUN ===== +FROM node:20-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production + +# Standalone output +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static + +EXPOSE 3000 + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index d1adda0..0000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -1,19 +0,0 @@ -services: - reducelink: - image: node:20-alpine - container_name: reducelink - working_dir: /app - volumes: - - .:/app - - node_modules:/app/node_modules - ports: - - "3000:3000" - environment: - - NODE_ENV=development - - DATABASE_URL=file:./prisma/dev.db - - NEXT_PUBLIC_BASE_URL=http://localhost:3000 - command: sh -c "npm install && npx prisma generate && npx prisma migrate dev --name init && npm run dev" - restart: unless-stopped - -volumes: - node_modules: diff --git a/docker-compose.yml b/docker-compose.yml index 2b35e5a..5a8b269 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,22 @@ services: reducelink: - image: node:20-alpine + build: + context: . + dockerfile: Dockerfile + container_name: reducelink - working_dir: /app - volumes: - - .:/app - - node_modules:/app/node_modules + ports: - - "3006:3000" - environment: - - DATABASE_URL=file:./dev.db - - NEXT_PUBLIC_BASE_URL=https://reducelink.arthurp.fr - command: sh -c "apk add --no-cache openssl libc6-compat && npm install && npx prisma generate && npx prisma migrate deploy && npm run build && npm run start" + - "${APP_PORT}:3000" + + env_file: + - .env + restart: unless-stopped -volumes: - node_modules: + healthcheck: + test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index 46dcaf2..1924c2a 100644 --- a/next.config.ts +++ b/next.config.ts @@ -3,6 +3,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { compress: true, poweredByHeader: false, + output: "standalone", async headers() { return [ { diff --git a/package.json b/package.json index f1b117b..146b70a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", + "start": "node .next/standalone/server.js", + "docker": "docker compose up --build", "lint": "eslint" }, "dependencies": {