mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-21 00:40:01 +02:00
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# Deploying Services Behind a Reverse Proxy
|
||
|
||
In some environments, you may need to deploy your services behind a reverse proxy. Typically, this involves adding a CNAME record for your service that points to the reverse proxy in your DNS server. The proxy then routes requests to the `pydase` backend on the appropriate web server port.
|
||
|
||
However, in scenarios where you don’t control the DNS server, or where adding new CNAME records is time-consuming, `pydase` supports **service multiplexing** using a path prefix. This means multiple services can be hosted on a single CNAME (e.g., `services.example.com`), with each service accessible through a unique path such as `services.example.com/my-service`.
|
||
|
||
To ensure seamless operation, the reverse proxy must strip the path prefix (e.g., `/my-service`) from the request URL and forward it as the `X-Forwarded-Prefix` header. `pydase` then uses this header to dynamically adjust the frontend paths, ensuring all resources are correctly located.
|
||
|
||
## Example Deployment with Traefik
|
||
|
||
Below is an example setup using [Traefik](https://doc.traefik.io/traefik/), a widely-used reverse proxy. This configuration demonstrates how to forward requests for a `pydase` service using a path prefix.
|
||
|
||
### 1. Reverse Proxy Configuration
|
||
|
||
Save the following configuration to a file (e.g., `/etc/traefik/dynamic_conf/my-service-config.yml`):
|
||
|
||
```yaml
|
||
http:
|
||
routers:
|
||
my-service-route:
|
||
rule: PathPrefix(`/my-service`)
|
||
entryPoints:
|
||
- web
|
||
service: my-service
|
||
middlewares:
|
||
- strip-prefix
|
||
services:
|
||
my-service:
|
||
loadBalancer:
|
||
servers:
|
||
- url: http://127.0.0.1:8001
|
||
middlewares:
|
||
strip-prefix:
|
||
stripprefix:
|
||
prefixes: /my-service
|
||
```
|
||
|
||
This configuration:
|
||
|
||
- Routes requests with the path prefix `/my-service` to the `pydase` backend.
|
||
- Strips the prefix (`/my-service`) from the request URL using the `stripprefix` middleware.
|
||
- Forwards the stripped prefix as the `X-Forwarded-Prefix` header.
|
||
|
||
### 2. Static Configuration for Traefik
|
||
|
||
Ensure Traefik is set up to use the dynamic configuration. Add this to your Traefik static configuration (e.g., `/etc/traefik/traefik.yml`):
|
||
|
||
```yaml
|
||
providers:
|
||
file:
|
||
filename: /etc/traefik/dynamic_conf/my-service-config.yml
|
||
entrypoints:
|
||
web:
|
||
address: ":80"
|
||
```
|
||
|
||
### 3. Accessing the Service
|
||
|
||
Once configured, your `pydase` service will be accessible at `http://services.example.com/my-service`. The path prefix will be handled transparently by `pydase`, so you don’t need to make any changes to your application code or frontend resources.
|