Self-Hosting Overview
Minimum hardware
| Resource | Minimum | Recommended | |---|---|---| | CPU | 2 vCPU | 4 vCPU | | RAM | 4 GB | 8 GB | | Disk | 40 GB SSD | 80 GB SSD | | Network | 1 Gbps | 1 Gbps + IPv4 |
A single-region shop with up to a few thousand products and modest traffic comfortably runs on 2 vCPU / 4 GB RAM. Add resources as catalog and traffic grow.
Operating system
Ubuntu 22.04 LTS or 24.04 LTS. Other distros work but the one-click installer and helper scripts assume Ubuntu.
Services
The stack consists of:
| Service | Version | Role | |---|---|---| | Node.js | 20 LTS | Runs all three Next/Medusa processes | | PostgreSQL | 16 | Primary database | | Redis | 7 | Cache + session + job queue | | nginx | 1.24+ | Reverse proxy, TLS termination, static assets | | PM2 | 6 | Process manager |
All can run on the same box for small deployments. For production scale, split DB to a dedicated host.
Topology
┌────────────────────────┐
visitor ───▶ │ nginx :443 (TLS) │
└─┬──────────┬─────────┬─┘
│ │ │
/app/* │ /admin/*+/store/*│ everything else
│ /auth/* │
▼ ▼
admin-panel :3001 nextjs-storefront :8000
│ │
└─────────┬───────────┘
▼
medusa-backend :9000
│
┌──────────┼──────────┐
▼ ▼ ▼
PostgreSQL Redis Local FS
/opt/carphacom/installed
Filesystem layout
/opt/carphacom/
current/ # symlink to active release
releases/<timestamp>/ # immutable releases
medusa-backend/
admin-panel/
nextjs-storefront/
installed/ # installed plugins/themes (per release)
marketplace-files/ # static assets (icons, screenshots)
shared/
logs/
backups/
Networks
Open inbound: :80 (HTTP→HTTPS redirect), :443 (TLS). Optionally :22 (SSH, restricted
by firewall). All other ports are bound to localhost.
Outbound: carphacom.com for marketplace catalog and license verification, :443 to your
configured payment provider (e.g. Stripe), and to your SMTP relay if you send transactional
email.
Where to go next
- One-Click Vultr Install for the fast path.
- Environment Variables for manual configuration.
- Backups & Restore before going live.
- Security Checklist before exposing publicly.