diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile index 4e1b277..8c0d0c7 100644 --- a/apps/backend/Dockerfile +++ b/apps/backend/Dockerfile @@ -1,11 +1,20 @@ # Start from the latest golang base image -FROM golang:1.24-alpine AS builder +FROM golang:1.24-bullseye AS builder +# Set the Current Working Directory inside the container WORKDIR /app + +# Copy go mod and sum files COPY go.mod go.sum ./ + +# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed RUN go mod download + +# Copy the source from the current directory to the Working Directory inside the container COPY . . -RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -trimpath -o main . + +# Build the Go app +RUN CGO_ENABLED=0 GOOS=linux go build -o main . # Start a new stage from alpine:latest FROM alpine:latest AS runner @@ -20,8 +29,7 @@ ARG CONCURRENT_IMAGES ARG STORAGE_URL ARG STORAGE_TOKEN -RUN apk add --no-cache ca-certificates ffmpeg curl libwebp-tools - +RUN apk add --no-cache ffmpeg ca-certificates libc6-compat ENV GOMEMLIMIT=2750MiB ENV GOGC=100 ENV PGHOST=$PGHOST @@ -38,20 +46,20 @@ WORKDIR /app # Copy the Pre-built binary file from the previous stage COPY --from=builder /app/main /app/. +COPY --from=builder /app/public /app/public COPY ./test.jpg /app/test.jpg COPY ./scripts /app/scripts COPY ./categorie.xml /app/categorie.xml COPY ./caratteristiche.xml /app/caratteristiche.xml RUN chmod +x /app/scripts/*.sh -RUN mkdir -p /app/.bin/webp \ - && ln -s /usr/bin/cwebp /app/.bin/webp/cwebp \ - && ln -s /usr/bin/dwebp /app/.bin/webp/dwebp \ - && ln -s /usr/bin/gif2webp /app/.bin/webp/gif2webp \ - && ln -s /usr/bin/img2webp /app/.bin/webp/img2webp \ - && ln -s /usr/bin/webpmux /app/.bin/webp/webpmux +#COPY --from=builder /app/.env /app/.env +# create folders +RUN mkdir images +RUN mkdir videos +RUN mkdir failed_requests -RUN mkdir -p images videos failed_requests +RUN apk add curl # Expose port 1323 to the outside world EXPOSE 1323 diff --git a/apps/infoalloggi/Dockerfile b/apps/infoalloggi/Dockerfile index 6f69619..614e658 100644 --- a/apps/infoalloggi/Dockerfile +++ b/apps/infoalloggi/Dockerfile @@ -1,81 +1,155 @@ FROM node:22-alpine AS base +# Dependencies stage +# This stage is used to install dependencies and prepare the environment FROM base AS deps RUN apk add --no-cache libc6-compat openssl WORKDIR /app COPY package.json ./ ENV NODE_ENV=production + +RUN echo "base variables: $NODE_ENV is set to $NODE_ENV" RUN npm i --omit=dev +RUN echo "Dependencies installed successfully" + +# Builder stage +# This stage is used to build the application FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . -ENV NODE_ENV=production \ - NEXT_TELEMETRY_DISABLED=1 \ - SKIP_REDIS="true" +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +ENV SKIP_REDIS="true" -ARG BASE_URL NEXT_PUBLIC_BASE_URL NEXT_PUBLIC_STRIPE_PUBLIC_KEY +# Only essential build-time variables +ARG BASE_URL +ENV BASE_URL=$BASE_URL +ARG NEXT_PUBLIC_BASE_URL +ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL -ENV BASE_URL=$BASE_URL \ - NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL \ - NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY \ - STRIPE_SECRET_KEY="mock" \ - STRIPE_WEBHOOK_SECRET="mock" +ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY + +# ARG INTERNAL_BASE_URL +# ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL +# ARG POSTGRES_USER +# ARG POSTGRES_PASSWORD +# ARG POSTGRES_DB +# ARG PGHOST +# ARG PGPORT +# ENV PGHOST=$PGHOST +# ENV POSTGRES_DB=$POSTGRES_DB +# ENV PGPORT=$PGPORT +# ENV POSTGRES_USER=$POSTGRES_USER +# ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +# ENV JWT_SECRET="build-time-mock" +# ENV BACKENDSERVER_URL="http://backend:1323" +ENV STRIPE_SECRET_KEY="mock" +ENV STRIPE_WEBHOOK_SECRET="mock" +# ENV FIC_CLIENT_ID="mock" +# ENV FIC_ACCESS_TOKEN="mock" +# ENV FIC_COMPANY_ID="mock" +# ENV ARUBA_USER="mock" +# ENV ARUBA_PASS="mock" +# ENV EXP_API_USER="mock" +# ENV EXP_API_PASS="mock" +# ENV KEYDB_URL="localhost:6380" +# ENV TILES_URL="localhost:6379" +# ENV SKEBBY_USER="mock" +# ENV SKEBBY_PASS="mock" +# ENV REVALIDATION_SECRET="mock" +# ENV STORAGE_URL="mock" +# ENV STORAGE_TOKEN="mock" RUN SKIP_ENV_VALIDATION=1 npm run build + +RUN echo "Build completed successfully" +RUN echo "Build with BASE_URL=$BASE_URL and NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL" + +# Runner stage +# This stage is used to run the built application FROM base AS runner WORKDIR /app -ENV NODE_ENV=production \ - NEXT_TELEMETRY_DISABLED=1 \ - SKIP_REDIS="false" \ - PORT=3000 +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +ENV SKIP_REDIS="false" -ARG BASE_URL POSTGRES_PASSWORD POSTGRES_DB PGHOST PGPORT JWT_SECRET BACKENDSERVER_URL STRIPE_SECRET_KEY \ - NEXT_PUBLIC_STRIPE_PUBLIC_KEY STRIPE_WEBHOOK_SECRET FIC_CLIENT_ID FIC_ACCESS_TOKEN FIC_COMPANY_ID ARUBA_USER \ - ARUBA_PASS EXP_API_USER EXP_API_PASS KEYDB_URL TILES_URL SKEBBY_USER SKEBBY_PASS STORAGE_URL STORAGE_TOKEN \ - NEXT_PUBLIC_BASE_URL INTERNAL_BASE_URL POSTGRES_USER +# Essential runtime variables +ARG BASE_URL +ENV BASE_URL=$BASE_URL +ARG NEXT_PUBLIC_BASE_URL +ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL +ARG INTERNAL_BASE_URL +ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL +ARG POSTGRES_USER +ARG POSTGRES_PASSWORD +ARG POSTGRES_DB +ARG PGHOST +ARG PGPORT +ENV PGHOST=$PGHOST +ENV POSTGRES_DB=$POSTGRES_DB +ENV PGPORT=$PGPORT +ENV POSTGRES_USER=$POSTGRES_USER +ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD +ARG JWT_SECRET +ENV JWT_SECRET=$JWT_SECRET +ARG BACKENDSERVER_URL +ENV BACKENDSERVER_URL=$BACKENDSERVER_URL +ARG STRIPE_SECRET_KEY +ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY +ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY +ARG STRIPE_WEBHOOK_SECRET +ENV STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET +ARG FIC_CLIENT_ID +ENV FIC_CLIENT_ID=$FIC_CLIENT_ID +ARG FIC_ACCESS_TOKEN +ENV FIC_ACCESS_TOKEN=$FIC_ACCESS_TOKEN +ARG FIC_COMPANY_ID +ENV FIC_COMPANY_ID=$FIC_COMPANY_ID +ARG ARUBA_USER +ENV ARUBA_USER=$ARUBA_USER +ARG ARUBA_PASS +ENV ARUBA_PASS=$ARUBA_PASS +ARG EXP_API_USER +ENV EXP_API_USER=$EXP_API_USER +ARG EXP_API_PASS +ENV EXP_API_PASS=$EXP_API_PASS +ARG KEYDB_URL +ENV KEYDB_URL=$KEYDB_URL +ARG TILES_URL +ENV TILES_URL=$TILES_URL +ARG SKEBBY_USER +ENV SKEBBY_USER=$SKEBBY_USER +ARG SKEBBY_PASS +ENV SKEBBY_PASS=$SKEBBY_PASS +ENV REVALIDATION_SECRET="SWKpgaaLfsyeqV1eOT0WG7TUFBewir8kJXure3O37ki8Lt4Z4IiEgBW4zPHDdM5c" +ARG STORAGE_URL +ENV STORAGE_URL=$STORAGE_URL +ARG STORAGE_TOKEN +ENV STORAGE_TOKEN=$STORAGE_TOKEN -ENV BASE_URL=$BASE_URL \ - NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL \ - INTERNAL_BASE_URL=$INTERNAL_BASE_URL \ - PGHOST=$PGHOST \ - POSTGRES_DB=$POSTGRES_DB \ - PGPORT=$PGPORT \ - POSTGRES_USER=$POSTGRES_USER \ - POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ - JWT_SECRET=$JWT_SECRET \ - BACKENDSERVER_URL=$BACKENDSERVER_URL \ - STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY \ - NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY \ - STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET \ - FIC_CLIENT_ID=$FIC_CLIENT_ID \ - FIC_ACCESS_TOKEN=$FIC_ACCESS_TOKEN \ - FIC_COMPANY_ID=$FIC_COMPANY_ID \ - ARUBA_USER=$ARUBA_USER \ - ARUBA_PASS=$ARUBA_PASS \ - EXP_API_USER=$EXP_API_USER \ - EXP_API_PASS=$EXP_API_PASS \ - KEYDB_URL=$KEYDB_URL \ - TILES_URL=$TILES_URL \ - SKEBBY_USER=$SKEBBY_USER \ - SKEBBY_PASS=$SKEBBY_PASS \ - REVALIDATION_SECRET="SWKpgaaLfsyeqV1eOT0WG7TUFBewir8kJXure3O37ki8Lt4Z4IiEgBW4zPHDdM5c" \ - STORAGE_URL=$STORAGE_URL \ - STORAGE_TOKEN=$STORAGE_TOKEN +RUN apk add --no-cache curl -RUN addgroup -g 1001 -S nodejs +RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 COPY --from=builder /app/public ./public + COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs + EXPOSE 3000 +ENV PORT=3000 + +RUN echo "Starting application with BASE_URL=$BASE_URL and NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL" CMD ["node", "server.js"]