diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile index 8c0d0c7..4e1b277 100644 --- a/apps/backend/Dockerfile +++ b/apps/backend/Dockerfile @@ -1,20 +1,11 @@ # Start from the latest golang base image -FROM golang:1.24-bullseye AS builder +FROM golang:1.24-alpine 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 . . - -# Build the Go app -RUN CGO_ENABLED=0 GOOS=linux go build -o main . +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -trimpath -o main . # Start a new stage from alpine:latest FROM alpine:latest AS runner @@ -29,7 +20,8 @@ ARG CONCURRENT_IMAGES ARG STORAGE_URL ARG STORAGE_TOKEN -RUN apk add --no-cache ffmpeg ca-certificates libc6-compat +RUN apk add --no-cache ca-certificates ffmpeg curl libwebp-tools + ENV GOMEMLIMIT=2750MiB ENV GOGC=100 ENV PGHOST=$PGHOST @@ -46,20 +38,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 -#COPY --from=builder /app/.env /app/.env -# create folders -RUN mkdir images -RUN mkdir videos -RUN mkdir failed_requests +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 -RUN apk add curl +RUN mkdir -p images videos failed_requests # Expose port 1323 to the outside world EXPOSE 1323 diff --git a/apps/backend/test.yml b/apps/backend/test.yml new file mode 100644 index 0000000..7d6371a --- /dev/null +++ b/apps/backend/test.yml @@ -0,0 +1,19 @@ +services: + + backend: + image: "test:latest" + ports: + - "1323:1323" + restart: unless-stopped + environment: + STORAGE_URL: http://host.docker.internal:8080 + STORAGE_TOKEN: "test" + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + PGHOST: "host.docker.internal" + PGPORT: "5433" + IMAGEOPTION: "true" + CONCURRENT_IMAGES: ${CONCURRENT_IMAGES} + + diff --git a/apps/infoalloggi/Dockerfile b/apps/infoalloggi/Dockerfile index 614e658..6f69619 100644 --- a/apps/infoalloggi/Dockerfile +++ b/apps/infoalloggi/Dockerfile @@ -1,155 +1,81 @@ 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 -ENV NEXT_TELEMETRY_DISABLED=1 -ENV SKIP_REDIS="true" +ENV NODE_ENV=production \ + NEXT_TELEMETRY_DISABLED=1 \ + SKIP_REDIS="true" -# 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 +ARG BASE_URL NEXT_PUBLIC_BASE_URL NEXT_PUBLIC_STRIPE_PUBLIC_KEY -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" +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" 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 -ENV NEXT_TELEMETRY_DISABLED=1 -ENV SKIP_REDIS="false" +ENV NODE_ENV=production \ + NEXT_TELEMETRY_DISABLED=1 \ + SKIP_REDIS="false" \ + PORT=3000 -# 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 +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 -RUN apk add --no-cache curl +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 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"]