bootload

📖 DOCS

Public IPs & raw TCP

Most services are HTTP, and bootload routes those through its shared gateway by domain — no dedicated IP needed (see custom domains, or just --publish for an automatic HTTPS URL). But a raw TCP service — a database, a game server, an SMTP relay, anything that isn't HTTP — needs its own dedicated public IPv4 to listen on. That's what public IPs are for.

Claim a dedicated IP

bootload ip allocate

This reserves a dedicated IPv4 for your project, billed at the equivalent of €3/month, prorated by the second you hold it. List what you have:

bootload ip list

Expose a TCP port

Deploy (or redeploy) the service with a raw TCP mapping onto your allocated IP:

bootload deploy --image postgres:16 --name db --tcp 5432

--tcp <public-port>[:<container-port>] binds <your-ip>:<public-port> straight through to the container (the container port defaults to the public one). If your project holds more than one IP, say which to bind with --ip <addr>:

bootload deploy --image my/game --name arena --tcp 7777 --ip 203.0.113.10

The IP must already be allocated to the project — bootload refuses a TCP route on an IP you don't hold (bootload ip allocate first). Clients then connect to <your-ip>:<public-port> directly; raw TCP isn't proxied or TLS-terminated for you, so terminate TLS in your own service if you need it.

Release an IP

When you're done, release it to stop billing:

bootload ip release <ip>

A release is refused while the IP still has TCP routes — remove the service (or its TCP route) first, then release. Once released, the IP goes back to the pool.

HTTP vs TCP, at a glance

Want… Use…
A web app on a domain --domain example.com (custom domains)
A web app, any URL is fine --publish (automatic HTTPS under the platform wildcard)
A database / game / SMTP / TCP bootload ip allocate + --tcp <port>