Skip to main content

Frequently Asked Questions

General

What is Vessl?

Vessl is a BYOS (Bring Your Own Server) platform-as-a-service. You connect your own VPS — from any provider — and Vessl handles the deployment pipeline, routing, SSL, databases, and scaling on top of it. You get a Heroku-style developer experience without handing over control of your infrastructure.

How is Vessl different from Heroku, Railway, or Render?

Those platforms run your code on their own infrastructure. Vessl runs your code on servers you own and pay for directly. You get full control over the hardware, location, and cost — Vessl just automates everything on top of it. See the BYOS vs. managed platforms comparison for more detail.

What server providers work with Vessl?

Any VPS you can SSH into on Ubuntu. Popular choices include Hetzner, Contabo, DigitalOcean, Vultr, Linode, Biznet Gio, and AWS EC2. Vessl is provider-agnostic — it only needs SSH access and a public IP.

What OS does my server need?

Ubuntu only. Vessl's provisioning script installs packages via apt and is tested against Ubuntu LTS releases (20.04, 22.04, 24.04). Other Linux distributions are not supported at this time.

Does Vessl touch my existing data or applications?

No. Vessl's provisioning installs Docker, Traefik, and configures the firewall — but it doesn't modify or delete anything already on the server. You can provision Vessl on a server that already has other software running.


Deployment

What languages and frameworks does Vessl support?

Anything Nixpacks can build, which covers Node.js, Python, PHP, Go, Ruby, Rust, Java, and more. If your framework needs a custom setup, you can provide your own Dockerfile and Vessl uses it directly.

Can I deploy from a private GitHub repository?

Yes. Vessl uses a GitHub App (not a personal access token) to access your repositories. You grant access to specific repos or your entire account — the GitHub App handles authentication on every deploy.

How long does a deploy take?

The first deploy of any app typically takes 3–8 minutes (image pull + build). Subsequent deploys are much faster because Docker's layer cache is kept on the build server. Build cache is preserved across deploys by default.

Will my app go down during a deploy?

No. Vessl uses a canary deployment strategy: it starts the new version alongside the old one, health-checks it, and only swaps traffic once the new version is confirmed healthy. If the new version fails its health check, the old version keeps serving.

Can I roll back to a previous version?

Yes. Go to the Deployments tab, find the deployment you want to roll back to, and click Rollback. The previous image is re-deployed immediately — no rebuild needed. Your plan determines how many past deployments are kept (Hobby: 10, Starter: 30, Pro: 100).

Can I deploy the same app to multiple servers?

Not currently on a single app — each application is assigned to one server. To deploy across multiple servers, create separate applications pointing to the same repository and branch.


Databases & Add-ons

What databases does Vessl support?

Vessl can provision PostgreSQL, MySQL, and Redis as managed add-ons. They run as containers on your server within a private Docker network — your app can reach them by the internal hostname Vessl injects, but they're not exposed to the public internet.

You can also connect to an external database (hosted elsewhere) by pasting the connection URL in the add-on picker.

Where does the database data live?

On the same server as your app, in a Docker volume. The data persists across container restarts and redeploys. If the server itself is lost, so is the data — which is why Vessl's backup feature exists.

Can I use my own existing database?

Yes — use the External option when adding an add-on and paste your connection URL. Vessl will inject DATABASE_URL and the parsed DB_HOST, DB_PORT, etc. into your app's environment.

Will adding a database cause downtime?

No. Database add-ons are provisioned independently and injected into your app's environment. Your app picks up the new credentials on its next deploy, not immediately.


Domains & SSL

How do I get a *.shipto.id subdomain?

Every app gets one automatically — no configuration needed. It appears in the Overview tab as soon as the first deploy succeeds.

How do I add my own domain?

  1. Point your domain's A record to your server's IP address.
  2. In Vessl, go to your app's Settings → Custom Domain and enter the domain.
  3. Vessl configures Traefik and issues a Let's Encrypt certificate automatically — usually within 1–3 minutes.

See the Custom domains & SSL guide for details.

Does Vessl handle SSL automatically?

Yes. Vessl uses Traefik with Let's Encrypt's HTTP-01 challenge. Certificates are issued automatically when you add a custom domain and renewed before they expire. You don't need to manage certificates manually.

I'm using Cloudflare — do I need to do anything special?

Yes. Set Cloudflare's proxy for your domain to DNS only (grey cloud) when first adding the domain to Vessl. Let's Encrypt needs to reach your server directly to issue the certificate. Once the certificate is issued, you can switch back to proxied (orange cloud) if you want Cloudflare's CDN.


Scaling

Can I run multiple replicas of my app?

Yes, depending on your plan (Hobby: 1, Starter: 2, Pro: 3). Go to Settings → Horizontal Scaling and set the desired replica count. Vessl starts or stops containers immediately — no redeploy needed.

Does scaling cause downtime?

No. Adding replicas starts new containers behind the load balancer. Removing replicas gracefully drains the old ones.

Can I auto-scale based on load?

Not currently — replica scaling is manual. Set the number of replicas from the dashboard or via the API.


Pricing & Plans

What's on the free plan?

The Hobby plan is free and includes 1 server, 1 project, 3 applications, 2 services, 1 replica, and 10 deployment history entries. Custom domains, auto-deploy, daemons, and backups require a paid plan.

Where can I see full plan details?

On the pricing page.

What happens if I exceed my plan limits?

Vessl will prevent actions that exceed your plan's limits (e.g. adding a 4th app on Hobby). You'll see an upgrade prompt. Existing apps and data are not affected.


Security

Who has access to my server?

Only you. Vessl provisions a deployment key on your server for its own operations, but you retain full SSH access and can revoke Vessl's access at any time by removing the key from authorized_keys.

Are my environment variables encrypted?

Yes. Environment variables are stored encrypted at rest. They're only decrypted inside the container at runtime and are never logged or exposed in the dashboard in plain text (they appear masked after being set).

Is traffic between my app and the database encrypted?

Database add-ons communicate over a private Docker network on the same server — the traffic never leaves the host, so encryption-in-transit isn't needed. If you use an external database over the public internet, enable SSL in your connection string.