- type
- concept
- created
- Tue Apr 07 2026 02:00:00 GMT+0200 (Central European Summer Time)
- updated
- Tue Apr 07 2026 02:00:00 GMT+0200 (Central European Summer Time)
- sources
- raw/notes/techContext
- tags
- deployment urls nginx production infrastructure
Deployment URLs
abstract
All B2BPaper services are accessible via `b2bpaper.xdvu.com` with the marketplace mounted at `/mvp/`, reverse-proxied through Nginx with Let's Encrypt SSL.Overview
The wiki/entities/b2bpaper platform is deployed on a single Contabo VPS and accessed through Nginx-proxied URLs on the b2bpaper.xdvu.com domain. All public access goes through HTTPS. Internal services bind to 127.0.0.1 and are not directly accessible from the internet.
Public URLs
| URL | Purpose | Notes |
|---|---|---|
https://b2bpaper.xdvu.com/mvp/ |
Marketplace root | Redirects to Swagger docs |
https://b2bpaper.xdvu.com/mvp/api/docs/ |
Swagger UI | OpenAPI documentation via drf-spectacular |
https://b2bpaper.xdvu.com/mvp/admin/ |
Django Admin | Staff-only admin interface |
https://b2bpaper.xdvu.com/mvp/static/ |
Static files | CSS, JS, images served by Nginx |
https://b2bpaper.xdvu.com/mvp/app/ |
Angular frontend | Built SPA served as static files |
Internal URLs
| URL | Purpose | Notes |
|---|---|---|
http://127.0.0.1:8910 |
Gunicorn (Django) | Internal only, proxied by Nginx |
Django Configuration
The marketplace is mounted at /mvp/ using Django's script name mechanism:
FORCE_SCRIPT_NAME = '/mvp'-- tells Django it is served under a subpathSTATIC_URL = '/mvp/static/'-- static file URL prefix matches the mount point
SSL
The domain uses a Let's Encrypt certificate via a wildcard cert on b2bpaper.xdvu.com (shared with tracker.xdvu.com). All HTTP traffic is redirected to HTTPS.
API Prefix
Within the /mvp/ mount, the API is prefixed with /api/v1/:
- Full API path:
https://b2bpaper.xdvu.com/mvp/api/v1/<endpoint>/ - Example:
https://b2bpaper.xdvu.com/mvp/api/v1/surplus-items/
Critical Rules
- Never use raw IP addresses in URLs shared with users -- always use the domain
- Never use
localhost-- always bind to0.0.0.0when starting services - All public access through Nginx -- never expose gunicorn directly
Sources
- raw/notes/techContext -- deployment URL table and Nginx configuration details
Related
- wiki/concepts/nginx-mvp-routing -- how Nginx routes requests to these URLs
- wiki/concepts/pm2-process-layout -- how the backend process is managed
- wiki/concepts/django-app-layout -- the backend that serves the API
- wiki/concepts/angular-frontend-stack -- the frontend served at /mvp/app/
- wiki/entities/b2bpaper -- the platform these URLs expose