remoteEaze
Deployment

Routing and Domains

Configure same-origin API routing, root-domain admin tools, and optional API subdomains across Traefik, Caddy, and Nginx.

Last updated

remoteEaze works best when the browser-facing app and the normal browser API traffic stay on the same root domain.

URLTarget
https://remote-eaze.example.com/Web app
https://remote-eaze.example.com/api/*API
https://remote-eaze.example.com/admin/redisAPI
https://remote-eaze.example.com/admin/queuesAPI
https://api.remote-eaze.example.com/healthAPI
https://api.remote-eaze.example.com/health/liveAPI
https://api.remote-eaze.example.com/documentationAPI

Why the admin dashboards are better on the root domain

The browser app uses same-origin auth and /api routing by default. In practice, that means:

  1. root-domain /api is the normal browser API path
  2. root-domain /admin/redis and /admin/queues reuse the same browser host and login context more smoothly
  3. api.<host> is ideal for direct health checks and Swagger docs

Important rule: do not strip these paths

The backend already expects these exact paths:

  • /api
  • /admin/redis
  • /admin/queues
  • /documentation
  • /health
  • /health/live

If your proxy strips or rewrites those prefixes unexpectedly, the API will receive the wrong path and routing will fail.

Traefik example

Traefik is the currently tested reverse-proxy reference.

The important routing idea is:

MatchTarget
Host(remote-eaze.example.com) && PathPrefix(/api)API
Host(remote-eaze.example.com) && PathPrefix(/admin/redis)API
Host(remote-eaze.example.com) && PathPrefix(/admin/queues)API
Host(remote-eaze.example.com)Web
Host(api.remote-eaze.example.com)API

Dokploy domain/path values

If you configure domains through Dokploy’s UI, use:

ServiceHostPathInternal PathStrip PathPort
webremote-eaze.example.com//Off8080
apiremote-eaze.example.com/api/Off3000
apiremote-eaze.example.com/admin/redis/Off3000
apiremote-eaze.example.com/admin/queues/Off3000
apiapi.remote-eaze.example.com//Off3000

Caddy example

This example shows the important path rules without extra deployment boilerplate:

remote-eaze.example.com {
	handle /api/* {
		reverse_proxy api:3000
	}

	handle /admin/redis* {
		reverse_proxy api:3000
	}

	handle /admin/queues* {
		reverse_proxy api:3000
	}

	handle {
		root * /srv/remote-eaze-web
		try_files {path} /index.html
		file_server
	}
}

api.remote-eaze.example.com {
	reverse_proxy api:3000
}

Reference:

Nginx example

This example focuses on preserving the incoming path:

server {
    server_name remote-eaze.example.com;

    root /srv/remote-eaze-web;
    index index.html;

    location /api/ {
        proxy_pass http://api:3000;
    }

    location /admin/redis {
        proxy_pass http://api:3000;
    }

    location /admin/queues {
        proxy_pass http://api:3000;
    }

    location / {
        try_files $uri $uri/ /index.html;
    }
}

server {
    server_name api.remote-eaze.example.com;

    location / {
        proxy_pass http://api:3000;
    }
}

Key idea:

  • proxy_pass http://api:3000; preserves the original request URI when used this way

Health and Swagger access

If you expose the optional API hostname, you get clean operational URLs:

  • https://api.remote-eaze.example.com/health
  • https://api.remote-eaze.example.com/health/live
  • https://api.remote-eaze.example.com/documentation

Redis dashboard and Bull Board access

These routes are protected for logged-in system administrators:

  • /admin/redis
  • /admin/queues

If those routes send you to a browser-facing 404 page instead of the dashboard, the root cause is usually that the request is hitting the web app instead of the API service.

Next step

Continue with Post-Deploy Bootstrap.

On this page