feat: update environment variable handling for BASE_URL and NEXT_PUBLIC_BASE_URL across Docker and application files

This commit is contained in:
Marco Pedone 2025-10-20 16:39:59 +02:00
parent 8e4d73941f
commit 8a17863c85
9 changed files with 15 additions and 25 deletions

View file

@ -27,7 +27,8 @@ ENV SKIP_REDIS="true"
# Only essential build-time variables # Only essential build-time variables
ARG BASE_URL ARG BASE_URL
ENV BASE_URL=$BASE_URL ENV BASE_URL=$BASE_URL
ENV NEXT_PUBLIC_BASE_URL=$BASE_URL ARG NEXT_PUBLIC_BASE_URL
ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL
ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY
ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY
@ -50,7 +51,6 @@ ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD
# Mock/empty values for validation bypass during build # Mock/empty values for validation bypass during build
ENV JWT_SECRET="build-time-mock" ENV JWT_SECRET="build-time-mock"
ENV BACKENDSERVER_URL="http://backend:1323" ENV BACKENDSERVER_URL="http://backend:1323"
ENV SENDGRID_API_KEY="mock"
ENV STRIPE_SECRET_KEY="mock" ENV STRIPE_SECRET_KEY="mock"
ENV STRIPE_WEBHOOK_SECRET="mock" ENV STRIPE_WEBHOOK_SECRET="mock"
ENV FIC_CLIENT_ID="mock" ENV FIC_CLIENT_ID="mock"
@ -84,7 +84,8 @@ ENV SKIP_REDIS="false"
# Essential runtime variables # Essential runtime variables
ARG BASE_URL ARG BASE_URL
ENV BASE_URL=$BASE_URL ENV BASE_URL=$BASE_URL
ENV NEXT_PUBLIC_BASE_URL=$BASE_URL ARG NEXT_PUBLIC_BASE_URL
ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL
ARG INTERNAL_BASE_URL ARG INTERNAL_BASE_URL
ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL
ARG POSTGRES_USER ARG POSTGRES_USER
@ -101,8 +102,6 @@ ARG JWT_SECRET
ENV JWT_SECRET=$JWT_SECRET ENV JWT_SECRET=$JWT_SECRET
ARG BACKENDSERVER_URL ARG BACKENDSERVER_URL
ENV BACKENDSERVER_URL=$BACKENDSERVER_URL ENV BACKENDSERVER_URL=$BACKENDSERVER_URL
ARG SENDGRID_API_KEY
ENV SENDGRID_API_KEY=$SENDGRID_API_KEY
ARG STRIPE_SECRET_KEY ARG STRIPE_SECRET_KEY
ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY
ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY

View file

@ -13,7 +13,6 @@ services:
BACKENDSERVER_URL: http://host.docker.internal:1323 BACKENDSERVER_URL: http://host.docker.internal:1323
TILES_URL: host.docker.internal:6379 TILES_URL: host.docker.internal:6379
KEYDB_URL: host.docker.internal:6380 KEYDB_URL: host.docker.internal:6380
SENDGRID_API_KEY: ${SENDGRID_API_KEY}
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY} NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET}
@ -38,7 +37,6 @@ services:
BACKENDSERVER_URL: http://host.docker.internal:1323 BACKENDSERVER_URL: http://host.docker.internal:1323
TILES_URL: host.docker.internal:6379 TILES_URL: host.docker.internal:6379
KEYDB_URL: host.docker.internal:638 KEYDB_URL: host.docker.internal:638
SENDGRID_API_KEY: ${SENDGRID_API_KEY}
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY} NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY}
STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET}

View file

@ -33,9 +33,7 @@ export const env = createEnv({
NEXT_PUBLIC_BASE_URL: z.string(), NEXT_PUBLIC_BASE_URL: z.string(),
NEXT_PUBLIC_STRIPE_PUBLIC_KEY: z.string(), NEXT_PUBLIC_STRIPE_PUBLIC_KEY: z.string(),
}, },
shared: {
NEXT_PUBLIC_BASE_URL: z.string(),
},
// If you're using Next.js < 13.4.4, you'll need to specify the runtimeEnv manually // If you're using Next.js < 13.4.4, you'll need to specify the runtimeEnv manually
experimental__runtimeEnv: { experimental__runtimeEnv: {
NEXT_PUBLIC_BASE_URL: process.env.NEXT_PUBLIC_BASE_URL, NEXT_PUBLIC_BASE_URL: process.env.NEXT_PUBLIC_BASE_URL,

View file

@ -52,7 +52,7 @@ export const intrestsRouter = createTRPCRouter({
mailType: "generic", mailType: "generic",
props: { props: {
link: { link: {
href: `${env.NEXT_PUBLIC_BASE_URL}/area-riservata/admin/user-view/ricerca/${userId}`, href: `${env.BASE_URL}/area-riservata/admin/user-view/ricerca/${userId}`,
label: "Visualizza utente", label: "Visualizza utente",
}, },
testo: `L'utente ${user.username} (${user.email}) ha mostrato interesse per l'annuncio "${annuncio.titolo_it}" (Codice: ${annuncio.codice}).`, testo: `L'utente ${user.username} (${user.email}) ha mostrato interesse per l'annuncio "${annuncio.titolo_it}" (Codice: ${annuncio.codice}).`,

View file

@ -106,13 +106,13 @@ export const getAnnunciMetaByCod = async ({ cod }: { cod: string }) => {
annuncio.url_immagini && annuncio.url_immagini &&
annuncio.url_immagini.length > 0 && annuncio.url_immagini.length > 0 &&
annuncio.url_immagini[0] annuncio.url_immagini[0]
? `${env.NEXT_PUBLIC_BASE_URL}/go-api/images/get/${annuncio.url_immagini[0]}` ? `${env.BASE_URL}/go-api/images/get/${annuncio.url_immagini[0]}`
: annuncio.og_url || ""; : annuncio.og_url || "";
return { return {
description: annuncio.desc_it || "", description: annuncio.desc_it || "",
ogImage, ogImage,
ogUrl: `${env.NEXT_PUBLIC_BASE_URL}/annuncio/${cod}`, ogUrl: `${env.BASE_URL}/annuncio/${cod}`,
title: annuncio.titolo_it || "", title: annuncio.titolo_it || "",
}; };
} catch (e) { } catch (e) {

View file

@ -1155,12 +1155,6 @@ export const sendServizioEmail = async ({
.where("servizio_annunci.servizio_id", "=", servizioId) .where("servizio_annunci.servizio_id", "=", servizioId)
.execute(); .execute();
console.log("=== EMAIL DEBUG ===");
console.log("BASE_URL:", env.BASE_URL);
console.log("INTERNAL_BASE_URL:", env.INTERNAL_BASE_URL);
console.log("NEXT_PUBLIC_BASE_URL:", env.NEXT_PUBLIC_BASE_URL);
console.log("==================");
const { email, nome } = user; const { email, nome } = user;
await NewMail({ await NewMail({
mailType: "onboardingServizio", mailType: "onboardingServizio",

View file

@ -139,7 +139,7 @@ export const whIntentSucceededHandler = async ({
props: { props: {
link: { link: {
href: `${env.NEXT_PUBLIC_BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`, href: `${env.BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`,
label: "Vai alla ricevuta", label: "Vai alla ricevuta",
}, },
noreply: true, noreply: true,
@ -166,7 +166,7 @@ export const whIntentSucceededHandler = async ({
mailType: "generic", mailType: "generic",
props: { props: {
link: { link: {
href: `${env.NEXT_PUBLIC_BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`, href: `${env.BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`,
label: "Vai alla ricevuta", label: "Vai alla ricevuta",
}, },
noreply: true, noreply: true,
@ -190,7 +190,7 @@ export const whIntentSucceededHandler = async ({
mailType: "generic", mailType: "generic",
props: { props: {
link: { link: {
href: `${env.NEXT_PUBLIC_BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`, href: `${env.BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`,
label: "Vai alla ricevuta", label: "Vai alla ricevuta",
}, },
noreply: true, noreply: true,
@ -207,7 +207,7 @@ export const whIntentSucceededHandler = async ({
await NewMail({ await NewMail({
mailType: "pagamentoConferma", mailType: "pagamentoConferma",
props: { props: {
receiptHref: `${env.NEXT_PUBLIC_BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`, receiptHref: `${env.BASE_URL}/area-riservata/payment-recap/${ordine.ordine_id}`,
}, },
subject: "Pagamento Confermato", subject: "Pagamento Confermato",
to: utente.email, to: utente.email,
@ -251,7 +251,7 @@ export const whIntentFailedHandler = async ({
to: utente.email, to: utente.email,
userId: utente.id, userId: utente.id,
props: { props: {
baseUrl: env.NEXT_PUBLIC_BASE_URL, baseUrl: env.BASE_URL,
}, },
}); });
} }

View file

@ -117,7 +117,7 @@ export const pwResetSendLinkHandler = async ({ email }: { email: string }) => {
await NewMail({ await NewMail({
mailType: "pwResetLink", mailType: "pwResetLink",
props: { props: {
resetlink: `${env.NEXT_PUBLIC_BASE_URL}/auth/password-reset/${token}`, resetlink: `${env.BASE_URL}/auth/password-reset/${token}`,
}, },
subject: `Richiesta di reset password Infoalloggi.it`, subject: `Richiesta di reset password Infoalloggi.it`,
to: email, to: email,

View file

@ -130,6 +130,7 @@ services:
KEYDB_URL: keydb:6379 KEYDB_URL: keydb:6379
TILES_URL: tiles:6379 TILES_URL: tiles:6379
BASE_URL: ${BASE_URL} BASE_URL: ${BASE_URL}
NEXT_PUBLIC_BASE_URL: ${BASE_URL}
SENDGRID_API_KEY: ${SENDGRID_API_KEY} SENDGRID_API_KEY: ${SENDGRID_API_KEY}
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY} NEXT_PUBLIC_STRIPE_PUBLIC_KEY: ${NEXT_PUBLIC_STRIPE_PUBLIC_KEY}