Adding an NGINX reverse proxy so your users just hit one domain/port (e.g. http://localhost
) and NGINX will serve:
-
Frontend at
/
-
Backend API at
/api/
-
Ollama at
/ollama/
(optional, in case you want to expose it too)
๐น Step 1: Create nginx.conf
(reverse proxy)
Make a new folder nginx/
in your project root and add nginx.conf
:
server {
listen 80;
server_name _;
# Serve frontend Angular app
location / {
proxy_pass http://frontend:80;
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;
}
# Proxy backend FastAPI
location /api/ {
proxy_pass http://backend:8000/;
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;
}
# Proxy Ollama (optional)
location /ollama/ {
proxy_pass http://ollama:11434/;
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;
}
}
๐น Step 2: Add Reverse Proxy Service to docker-compose.yml
Extend your compose file:
version: "3.9"
services:
backend:
build: .
container_name: company-recommender-backend
expose:
- "8000"
environment:
- OLLAMA_URL=http://ollama:11434
depends_on:
- ollama
ollama:
image: ollama/ollama:latest
container_name: ollama
expose:
- "11434"
volumes:
- ollama_data:/root/.ollama
frontend:
build: ./frontend
container_name: company-recommender-frontend
expose:
- "80"
environment:
- API_URL=/api # frontend calls backend via proxy
depends_on:
- backend
proxy:
image: nginx:alpine
container_name: reverse-proxy
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- frontend
- backend
- ollama
volumes:
ollama_data:
๐น Step 3: Adjust Angular Runtime Config
Since the reverse proxy maps backend → /api/
, update frontend/src/assets/env.js
:
(function(window) {
window["env"] = window["env"] || {};
window["env"]["API_URL"] = "${API_URL}";
})(this);
In docker-compose.yml
, the frontend service already sets:
environment:
- API_URL=/api
So the Angular app will now call /api/...
, which gets routed to the backend by NGINX.
๐น Step 4: Rebuild & Run
From your project root:
docker-compose up --build
✅ Final Setup
-
Visit →
http://localhost
→ Angular frontend served. -
Frontend API calls →
/api/...
→ routed to backend. -
Optional Ollama calls →
/ollama/...
.
Everything is cleanly under one domain and one port (80) ๐ฏ.
๐ Do you want me to also add HTTPS (SSL/TLS) with Let’s Encrypt support to this proxy so you can put it on a real server/domain securely?
No comments:
Post a Comment