From 81f8ac0215fd167accd04552c1418998e878e822 Mon Sep 17 00:00:00 2001 From: miczek Date: Thu, 15 Oct 2026 05:15:10 +0300 Subject: [PATCH] fix(shop): use production API via same-origin nginx proxy Hardcoded localhost:5000 broke shop.zea.lt; wire env fileReplacements and proxy /api + /uploads to the API container. --- docker/docker-compose.yml | 2 ++ docker/nginx-spa.conf | 19 +++++++++++++++++++ src/admin/angular.json | 8 +++++++- src/admin/src/app/core/constants.ts | 8 +++++--- .../environments/environment.production.ts | 7 +++++++ src/admin/src/environments/environment.ts | 6 ++++++ src/shop/angular.json | 8 +++++++- src/shop/src/app/core/constants.ts | 6 ++++-- .../environments/environment.production.ts | 2 ++ src/shop/src/environments/environment.ts | 1 + 10 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 src/admin/src/environments/environment.production.ts create mode 100644 src/admin/src/environments/environment.ts diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 662a409..c13a2d4 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -79,6 +79,7 @@ services: depends_on: - api networks: + - iled - homelab labels: - "traefik.enable=true" @@ -95,6 +96,7 @@ services: depends_on: - api networks: + - iled - homelab labels: - "traefik.enable=true" diff --git a/docker/nginx-spa.conf b/docker/nginx-spa.conf index 749eb19..f787450 100644 --- a/docker/nginx-spa.conf +++ b/docker/nginx-spa.conf @@ -4,6 +4,25 @@ server { root /usr/share/nginx/html; index index.html; + # Browser calls same-origin /api and /uploads; proxy to API container. + location /api/ { + proxy_pass http://api:8080/api/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /uploads/ { + proxy_pass http://api:8080/uploads/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location / { try_files $uri $uri/ /index.html; } diff --git a/src/admin/angular.json b/src/admin/angular.json index 25713ad..3b03902 100644 --- a/src/admin/angular.json +++ b/src/admin/angular.json @@ -47,7 +47,13 @@ "maximumError": "8kB" } ], - "outputHashing": "all" + "outputHashing": "all", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.production.ts" + } + ] }, "development": { "optimization": false, diff --git a/src/admin/src/app/core/constants.ts b/src/admin/src/app/core/constants.ts index 6b54a1c..baa5dcb 100644 --- a/src/admin/src/app/core/constants.ts +++ b/src/admin/src/app/core/constants.ts @@ -1,3 +1,5 @@ -export const API_URL = 'http://localhost:5000/api/v1'; -export const API_BASE_URL = 'http://localhost:5000'; -export const SHOP_URL = 'http://localhost:4200'; +import { environment } from '../../environments/environment'; + +export const API_URL = environment.apiUrl; +export const API_BASE_URL = environment.apiBaseUrl; +export const SHOP_URL = environment.shopUrl; diff --git a/src/admin/src/environments/environment.production.ts b/src/admin/src/environments/environment.production.ts new file mode 100644 index 0000000..cadffd0 --- /dev/null +++ b/src/admin/src/environments/environment.production.ts @@ -0,0 +1,7 @@ +export const environment = { + production: true, + // Same-origin; nginx proxies /api and /uploads to the API service. + apiUrl: '/api/v1', + apiBaseUrl: '', + shopUrl: 'https://shop.zea.lt', +}; diff --git a/src/admin/src/environments/environment.ts b/src/admin/src/environments/environment.ts new file mode 100644 index 0000000..08cc268 --- /dev/null +++ b/src/admin/src/environments/environment.ts @@ -0,0 +1,6 @@ +export const environment = { + production: false, + apiUrl: 'http://localhost:5000/api/v1', + apiBaseUrl: 'http://localhost:5000', + shopUrl: 'http://localhost:4200', +}; diff --git a/src/shop/angular.json b/src/shop/angular.json index c58dcfa..0fd7b7e 100644 --- a/src/shop/angular.json +++ b/src/shop/angular.json @@ -47,7 +47,13 @@ "maximumError": "8kB" } ], - "outputHashing": "all" + "outputHashing": "all", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.production.ts" + } + ] }, "development": { "optimization": false, diff --git a/src/shop/src/app/core/constants.ts b/src/shop/src/app/core/constants.ts index 05ee959..2642d3a 100644 --- a/src/shop/src/app/core/constants.ts +++ b/src/shop/src/app/core/constants.ts @@ -1,6 +1,8 @@ -export const API_URL = 'http://localhost:5000/api/v1'; +import { environment } from '../../environments/environment'; -export const API_BASE_URL = 'http://localhost:5000'; +export const API_URL = environment.apiUrl; + +export const API_BASE_URL = environment.apiBaseUrl; export const SESSION_KEY = 'iled_session'; diff --git a/src/shop/src/environments/environment.production.ts b/src/shop/src/environments/environment.production.ts index 885b19c..04c8ab1 100644 --- a/src/shop/src/environments/environment.production.ts +++ b/src/shop/src/environments/environment.production.ts @@ -1,6 +1,8 @@ export const environment = { production: true, + // Same-origin; nginx proxies /api and /uploads to the API service. apiUrl: '/api/v1', + apiBaseUrl: '', openPanelApiUrl: '', openPanelClientId: '', }; diff --git a/src/shop/src/environments/environment.ts b/src/shop/src/environments/environment.ts index 181fd67..5c45893 100644 --- a/src/shop/src/environments/environment.ts +++ b/src/shop/src/environments/environment.ts @@ -1,6 +1,7 @@ export const environment = { production: false, apiUrl: 'http://localhost:5000/api/v1', + apiBaseUrl: 'http://localhost:5000', // Set after deploying OpenPanel (self-host) and creating a client: // openPanelApiUrl: 'http://localhost:3000/api', openPanelApiUrl: '',