From 1ce08448ec66646ebf31317cf8007cdfd45aa63f Mon Sep 17 00:00:00 2001 From: charles-gauthereau Date: Tue, 30 Jun 2026 16:56:28 +0200 Subject: [PATCH] fix: Dockerfile --- docker-compose.prod.yml | 10 ++--- docker/dockerfile/Dockerfile | 47 ++++++++++++----------- knip.json | 3 ++ package.json | 1 + pnpm-lock.yaml | 73 ++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 26 deletions(-) create mode 100644 knip.json diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a3912b17..51d945cb 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,10 +1,10 @@ services: app: - # build: - # context: . - # dockerfile: docker/dockerfile/Dockerfile - # target: prod - image: portabase/portabase:1 + build: + context: . + dockerfile: docker/dockerfile/Dockerfile + target: prod +# image: portabase/portabase:1 ports: - "8887:80" environment: diff --git a/docker/dockerfile/Dockerfile b/docker/dockerfile/Dockerfile index 58049f6d..0ae0f496 100644 --- a/docker/dockerfile/Dockerfile +++ b/docker/dockerfile/Dockerfile @@ -1,11 +1,33 @@ -FROM --platform=$BUILDPLATFORM node:22-bullseye AS base +FROM --platform=$BUILDPLATFORM node:22-slim AS runtime-base -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ bash \ tzdata \ libc6 \ + nginx \ + gnupg \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /etc/apt/keyrings \ + && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \ + | gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \ + > /etc/apt/sources.list.d/pgdg.list + +RUN apt-get update && apt-get install -y --no-install-recommends \ + postgresql-18 \ + postgresql-client-18 \ + postgresql-contrib-18 \ + && rm -rf /var/lib/apt/lists/* + +ENV PATH="/usr/lib/postgresql/18/bin:${PATH}" + + +FROM runtime-base AS build-base + +RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ g++ \ make \ @@ -13,25 +35,9 @@ RUN apt-get update && apt-get install -y \ automake \ libtool \ git \ - nginx \ && rm -rf /var/lib/apt/lists/* -RUN mkdir -p /etc/apt/keyrings \ - && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \ - | gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg \ - && echo "deb [signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt bullseye-pgdg main" \ - > /etc/apt/sources.list.d/pgdg.list - -RUN apt-get update && apt-get install -y \ - postgresql-18 \ - postgresql-client-18 \ - postgresql-contrib-18 \ - && rm -rf /var/lib/apt/lists/* - -ENV PATH="/usr/lib/postgresql/18/bin:${PATH}" - - FROM --platform=$BUILDPLATFORM golang:1.23-bookworm AS tusd-base ARG TUSD_VERSION=2.8.0 @@ -51,7 +57,7 @@ FROM scratch AS tusd-dist COPY --from=tusd-base /tusddist/tusd /tusd -FROM base AS build-env +FROM build-base AS build-env RUN corepack enable && corepack prepare pnpm@latest --activate @@ -83,7 +89,7 @@ COPY . . ENV NEXT_TELEMETRY_DISABLED=1 RUN pnpm run build -FROM base AS prod +FROM runtime-base AS prod WORKDIR /app ENV NODE_ENV=production @@ -105,7 +111,6 @@ COPY --from=builder /app/drizzle.config.ts ./ COPY --from=builder --chown=1001:1001 /app/.next/standalone ./ COPY --from=builder --chown=1001:1001 /app/.next/static ./.next/static COPY --chown=1001:1001 src/db ./src/db -COPY --from=deps /app/node_modules ./node_modules COPY --from=tusd-dist /tusd /usr/local/bin/tusd RUN chmod +x /usr/local/bin/tusd diff --git a/knip.json b/knip.json new file mode 100644 index 00000000..0ff4842d --- /dev/null +++ b/knip.json @@ -0,0 +1,3 @@ +{ + "ignoreDependencies": ["pino-pretty"] +} \ No newline at end of file diff --git a/package.json b/package.json index ba4affd2..a30a11d7 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "eslint": "^9.39.4", "eslint-config-next": "^16.2.6", "framer-motion": "^12.40.0", + "pino-pretty": "^13.1.3", "postcss": "8.5.10", "postcss-load-config": "^6.0.1", "release-it": "^19.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a877e33..167a6623 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -264,6 +264,9 @@ importers: framer-motion: specifier: ^12.40.0 version: 12.42.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + pino-pretty: + specifier: ^13.1.3 + version: 13.1.3 postcss: specifier: 8.5.10 version: 8.5.10 @@ -4136,6 +4139,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -4320,6 +4326,9 @@ packages: date-fns@4.4.0: resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debounce@2.2.0: resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} engines: {node: '>=18'} @@ -4888,6 +4897,9 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-copy@4.0.3: + resolution: {integrity: sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==} + fast-deep-equal@2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} @@ -4912,6 +4924,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} @@ -5229,6 +5244,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hermes-estree@0.25.1: resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} @@ -5559,6 +5577,10 @@ packages: jose@6.2.3: resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6383,6 +6405,10 @@ packages: pino-abstract-transport@3.0.0: resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + pino-pretty@13.1.3: + resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + hasBin: true + pino-std-serializers@7.1.0: resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} @@ -6544,6 +6570,9 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -6835,6 +6864,9 @@ packages: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -7096,6 +7128,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + strnum@2.4.1: resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} @@ -11205,6 +11241,8 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -11381,6 +11419,8 @@ snapshots: date-fns@4.4.0: {} + dateformat@4.6.3: {} + debounce@2.2.0: {} debug@3.2.7: @@ -12127,6 +12167,8 @@ snapshots: extend@3.0.2: {} + fast-copy@4.0.3: {} + fast-deep-equal@2.0.1: {} fast-deep-equal@3.1.3: {} @@ -12153,6 +12195,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.2: {} fast-xml-builder@1.2.0: @@ -12551,6 +12595,8 @@ snapshots: he@1.2.0: {} + help-me@5.0.0: {} + hermes-estree@0.25.1: {} hermes-parser@0.25.1: @@ -12883,6 +12929,8 @@ snapshots: jose@6.2.3: {} + joycon@3.1.1: {} + js-tokens@4.0.0: {} js-yaml@4.2.0: @@ -13609,6 +13657,22 @@ snapshots: dependencies: split2: 4.2.0 + pino-pretty@13.1.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 4.0.3 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pump: 3.0.4 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + pino-std-serializers@7.1.0: {} pino@10.3.1: @@ -13765,6 +13829,11 @@ snapshots: proxy-from-env@1.1.0: {} + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode@2.3.1: {} pvtsutils@1.3.6: @@ -14162,6 +14231,8 @@ snapshots: ajv-formats: 2.1.1(ajv@8.20.0) ajv-keywords: 5.1.0(ajv@8.20.0) + secure-json-parse@4.1.0: {} + selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -14545,6 +14616,8 @@ snapshots: strip-json-comments@3.1.1: {} + strip-json-comments@5.0.3: {} + strnum@2.4.1: dependencies: anynum: 1.0.1