Deploy LogisticsX to a production VPS using a hand-maintained Docker Compose stack under deploy/, fronted by host nginx. Deployment is automated via GitHub Actions (push to prod); manual steps are documented for first setup.
Internet -> Nginx (80/443 with SSL, on the host)
|-- api.domain.com -> API (:7000)
|-- id.domain.com -> Identity Server (:7001)
|-- admin.domain.com -> Admin Portal (:7002)
|-- tms.domain.com -> TMS Portal (:7003)
|-- customer.domain.com -> Customer Portal (:7004)
|-- domain.com -> Website (:7005)
+-- portainer.domain.com-> Portainer (:9000, separate stack)
|
v
External PostgreSQL
All app container ports bind to 127.0.0.1; nginx is the only public entry point.
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB | 8 GB |
| Storage | 40 GB SSD | 80 GB SSD |
| OS | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
- VPS Setup - install Docker + nginx, configure the server and Portainer
- Docker Compose Deployment - configure and run the stack (automated or manual)
Create DNS A records pointing to your VPS IP:
api.yourdomain.com -> YOUR_VPS_IP
id.yourdomain.com -> YOUR_VPS_IP
admin.yourdomain.com -> YOUR_VPS_IP
tms.yourdomain.com -> YOUR_VPS_IP
customer.yourdomain.com -> YOUR_VPS_IP
portainer.yourdomain.com -> YOUR_VPS_IP
yourdomain.com -> YOUR_VPS_IP
- VPS with SSH access
- External PostgreSQL reachable from the VPS
- Domain with DNS configured
- Stripe API keys (for payments)
- Resend API key (for emails)
- Mapbox access token (for maps)
| Guide | Description |
|---|---|
| VPS Setup | Initial server configuration |
| Docker Compose Deployment | Configure and run the stack |
| Environment Variables | Configuration reference |