From f52e53519c05e4a8fb3992770f81cb4831f0cfc0 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 17 May 2026 00:59:59 -0400 Subject: [PATCH] fix frontend redirection --- Dockerfile.production | 2 +- apps/admin/package.json | 4 +-- apps/dashboard/package.json | 4 +-- apps/marketplace/package.json | 4 +-- apps/public-site/next.config.js | 10 +++++++ apps/public-site/package.json | 4 +-- docker-compose.production.yml | 52 +++++++++------------------------ 7 files changed, 32 insertions(+), 48 deletions(-) diff --git a/Dockerfile.production b/Dockerfile.production index 6ca3772..ed81395 100644 --- a/Dockerfile.production +++ b/Dockerfile.production @@ -39,6 +39,6 @@ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/apps ./apps COPY --from=builder /app/packages ./packages -EXPOSE 3000 3001 3002 3003 4000 +EXPOSE 3000 4000 CMD ["npm", "run", "start", "--workspace", "@rentaldrivego/api"] diff --git a/apps/admin/package.json b/apps/admin/package.json index 80668f9..0503036 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -4,11 +4,11 @@ "private": true, "scripts": { "predev": "npm run build --workspace @rentaldrivego/types", - "dev": "next dev -p 3002", + "dev": "next dev -p 3003", "prebuild": "npm run build --workspace @rentaldrivego/types", "build": "next build", "prestart": "npm run build --workspace @rentaldrivego/types", - "start": "next start -p 3002", + "start": "next start -p 3003", "type-check": "tsc --noEmit" }, "dependencies": { diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 2cae28e..1e78e92 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -4,11 +4,11 @@ "private": true, "scripts": { "predev": "npm run build --workspace @rentaldrivego/types", - "dev": "next dev -p 3001", + "dev": "next dev -p 3002", "prebuild": "npm run build --workspace @rentaldrivego/types", "build": "next build", "prestart": "npm run build --workspace @rentaldrivego/types", - "start": "next start -p 3001", + "start": "next start -p 3002", "type-check": "tsc --noEmit" }, "dependencies": { diff --git a/apps/marketplace/package.json b/apps/marketplace/package.json index 8a759c5..be998ed 100644 --- a/apps/marketplace/package.json +++ b/apps/marketplace/package.json @@ -4,11 +4,11 @@ "private": true, "scripts": { "predev": "npm run build --workspace @rentaldrivego/types", - "dev": "next dev -p 3000", + "dev": "next dev -p 3001", "prebuild": "npm run build --workspace @rentaldrivego/types", "build": "next build", "prestart": "npm run build --workspace @rentaldrivego/types", - "start": "next start -p 3000", + "start": "next start -p 3001", "type-check": "tsc --noEmit" }, "dependencies": { diff --git a/apps/public-site/next.config.js b/apps/public-site/next.config.js index 00e8c46..0dea00a 100644 --- a/apps/public-site/next.config.js +++ b/apps/public-site/next.config.js @@ -7,6 +7,16 @@ const nextConfig = { domains: ['res.cloudinary.com'], }, transpilePackages: ['@rentaldrivego/types'], + async rewrites() { + return [ + { source: '/marketplace', destination: 'http://localhost:3001/marketplace' }, + { source: '/marketplace/:path*', destination: 'http://localhost:3001/marketplace/:path*' }, + { source: '/dashboard', destination: 'http://localhost:3002/dashboard' }, + { source: '/dashboard/:path*', destination: 'http://localhost:3002/dashboard/:path*' }, + { source: '/admin', destination: 'http://localhost:3003/admin' }, + { source: '/admin/:path*', destination: 'http://localhost:3003/admin/:path*' }, + ] + }, } module.exports = nextConfig \ No newline at end of file diff --git a/apps/public-site/package.json b/apps/public-site/package.json index 722e52a..fcb117e 100644 --- a/apps/public-site/package.json +++ b/apps/public-site/package.json @@ -4,11 +4,11 @@ "private": true, "scripts": { "predev": "npm run build --workspace @rentaldrivego/types", - "dev": "next dev -p 3003", + "dev": "next dev -p 3000", "prebuild": "npm run build --workspace @rentaldrivego/types", "build": "next build", "prestart": "npm run build --workspace @rentaldrivego/types", - "start": "next start -p 3003", + "start": "next start -p 3000", "type-check": "tsc --noEmit" }, "dependencies": { diff --git a/docker-compose.production.yml b/docker-compose.production.yml index 9b23783..bb93e93 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -91,45 +91,19 @@ services: restart: unless-stopped labels: - traefik.enable=true - # marketplace (port 3000) — /marketplace path, priority 20 - - traefik.http.routers.marketplace.rule=Host(`${PUBLIC_SITE_DOMAIN}`) && PathPrefix(`/marketplace`) - - traefik.http.routers.marketplace.priority=20 - - traefik.http.routers.marketplace.entrypoints=websecure - - traefik.http.routers.marketplace.tls=true - - traefik.http.routers.marketplace.tls.certresolver=letsencrypt - - traefik.http.routers.marketplace.service=marketplace-svc - - traefik.http.services.marketplace-svc.loadbalancer.server.port=3000 - # dashboard (port 3001) — /dashboard path, priority 20 - - traefik.http.routers.dashboard.rule=Host(`${PUBLIC_SITE_DOMAIN}`) && PathPrefix(`/dashboard`) - - traefik.http.routers.dashboard.priority=20 - - traefik.http.routers.dashboard.entrypoints=websecure - - traefik.http.routers.dashboard.tls=true - - traefik.http.routers.dashboard.tls.certresolver=letsencrypt - - traefik.http.routers.dashboard.service=dashboard-svc - - traefik.http.services.dashboard-svc.loadbalancer.server.port=3001 - # admin (port 3002) — /admin path, priority 20 - - traefik.http.routers.admin.rule=Host(`${PUBLIC_SITE_DOMAIN}`) && PathPrefix(`/admin`) - - traefik.http.routers.admin.priority=20 - - traefik.http.routers.admin.entrypoints=websecure - - traefik.http.routers.admin.tls=true - - traefik.http.routers.admin.tls.certresolver=letsencrypt - - traefik.http.routers.admin.service=admin-svc - - traefik.http.services.admin-svc.loadbalancer.server.port=3002 - # public site (port 3003) — root domain, priority 10 - - traefik.http.routers.public-site.rule=Host(`${PUBLIC_SITE_DOMAIN}`) || Host(`www.${PUBLIC_SITE_DOMAIN}`) - - traefik.http.routers.public-site.priority=10 - - traefik.http.routers.public-site.entrypoints=websecure - - traefik.http.routers.public-site.tls=true - - traefik.http.routers.public-site.tls.certresolver=letsencrypt - - traefik.http.routers.public-site.service=public-site-svc - - traefik.http.services.public-site-svc.loadbalancer.server.port=3003 - # tenant branded sites (port 3003) — {slug}.rentaldrivego.ma subdomains - - traefik.http.routers.public-site-tenants.rule=HostRegexp(`{subdomain:[a-z0-9-]+}.${PUBLIC_SITE_DOMAIN}`) - - traefik.http.routers.public-site-tenants.priority=10 - - traefik.http.routers.public-site-tenants.entrypoints=websecure - - traefik.http.routers.public-site-tenants.tls=true - - traefik.http.routers.public-site-tenants.tls.certresolver=letsencrypt - - traefik.http.routers.public-site-tenants.service=public-site-svc + # all frontend traffic → port 3000 (public-site proxies /marketplace, /dashboard, /admin internally) + - traefik.http.routers.frontend.rule=Host(`${PUBLIC_SITE_DOMAIN}`) || Host(`www.${PUBLIC_SITE_DOMAIN}`) + - traefik.http.routers.frontend.entrypoints=websecure + - traefik.http.routers.frontend.tls=true + - traefik.http.routers.frontend.tls.certresolver=letsencrypt + - traefik.http.routers.frontend.service=frontend-svc + - traefik.http.services.frontend-svc.loadbalancer.server.port=3000 + # tenant branded sites — {slug}.rentaldrivego.ma subdomains + - traefik.http.routers.frontend-tenants.rule=HostRegexp(`{subdomain:[a-z0-9-]+}.${PUBLIC_SITE_DOMAIN}`) + - traefik.http.routers.frontend-tenants.entrypoints=websecure + - traefik.http.routers.frontend-tenants.tls=true + - traefik.http.routers.frontend-tenants.tls.certresolver=letsencrypt + - traefik.http.routers.frontend-tenants.service=frontend-svc pgmanage: image: cmdpromptinc/pgmanage-enterprise:latest