Your servers.
Not our cloud.
Provisore sets up hardened Ubuntu servers on your own provider account and deploys Laravel, PHP, Node, Swift and static sites to them without downtime. It also runs the SSL, queues, databases, backups and monitoring. Cancel and the servers keep running.
Plans from $12 a month. Your provider bills you for the servers directly.

What a PaaS cannot promise
Heroku and Fly ask for less setup than Provisore does. Neither gives you the machine, and owning it decides who bills you, who has root and what happens when you stop paying us.
- Your provider sends the bill
- Create a server on your own Hetzner account, or point Provisore at a box you already run on DigitalOcean, AWS, or anything else reachable over SSH. We don't resell compute. The hosting bill is between you and your provider.
- Cancel, and nothing goes down
- Provisore works over SSH and never sits in the request path, so everything that lives on the box carries on without us. What runs on our side stops.Keeps running
- nginx, PHP-FPM pools, and the systemd units behind queues and daemons
- Cron entries, in /etc/cron.d, run by cron itself
- Certificates on the usual HTTP challenge, renewed by certbot's own timer
- The release that is live, and the ones kept behind it on disk
Stops- Deploys from the app and the API
- Scheduled backups, though every archive already in your bucket is yours
- Uptime checks, alerts, metrics and log search
- Renewal for certificates issued over DNS, which calls back to us
- You still have root
- Provisore acts through a sudo user it creates, and your own access is untouched. What it writes is ordinary nginx, systemd, cron and bash in the usual places, and the deploy script is yours to edit. Config it manages it also rewrites on the next apply, so those files are better changed in Provisore than on the box.
The control plane itself runs on Hetzner in Germany. Deploy history, metrics and logs stay in the EU, and every third party that receives anything is named, with what it receives, in the sub-processor list.
From a bare Ubuntu box to production
One command connects a server. Everything after it is the same three stages, whatever you are shipping.
Provision
Paste one line on a fresh Ubuntu 24.04 or 26.04 box. It installs a keypair, reports back, and Provisore takes it from there over SSH.
$ curl -fsSL 'https://provisore.com/v1/server-bootstrap/<token>' | bash
- A provisore sudo user, and sudoers to go with it
- SSH password login and root login switched off
- UFW, fail2ban, unattended-upgrades and swap
- nginx and certbot on any server that serves traffic
- Disk and memory alert rules seeded at 85% and 90%
- Your team's SSH keys attached to the new account
Serve
Every site gets its own vhost, its own PHP-FPM pool or systemd unit, and a certificate. Provisore writes the server body, wraps it in the shared listen and TLS block, and runs nginx -t before it reloads anything.
root /home/provisore/api.lumen.dk/current/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/provisore-api.lumen.dk.sock; }
Deploy
Each release builds in its own directory and goes live by symlink swap. A health check runs after the swap and puts the previous release back if the new one does not answer. Old releases stay on disk, so a rollback is the same swap the other way.

One pipeline, five runtimes
Laravel, plain PHP, Node, Swift and static builds. Each one gets the packages it needs, a systemd unit or PHP-FPM pool, and a deploy script you can edit.
composer install --no-dev --prefer-dist npm ci && npm run build php artisan migrate --force php artisan config:cache route:cache $ACTIVATE_RELEASE sudo systemctl reload php8.4-fpm
Open the app to what needs you
Provisore watches deploys, certificates, processes, backups and the servers under them, and puts anything wrong in one list with its fix beside it.
- Today
- The app opens here. A deploy that failed, a certificate that did not issue, a worker that crashed, a backup that did not run and an open incident each get a row. Redeploy, Retry certificate, Restart and Back up now are one click, or E from the keyboard, and H snoozes a row for a day.
- The fleet, live
- The sidebar lists every server and the sites on it, with status as it changes, a spinner on anything deploying and the step a provisioning run has reached. Pin the servers you work on, and filter the list once it is long.
- ⌘K runs things
- Deploy a site, follow its log, restart nginx or PHP-FPM, or run a recipe. The site or server on screen comes first, and an action that cannot run says why.
- A console that stays open
- Job output, live log tails and terminals open as tabs in a dock along the bottom. They keep streaming while you move between pages, and anything started from Today or ⌘K lands there.
- A terminal in the browser
- Open a shell on a server from ⌘K or its menu, with no SSH key to attach. It asks which account to run as, confirms your password, records that it happened but not what was typed, and reaps the shell when you close the tab.
- Settings beside the page
- ⌘. opens a site's inspector: branch, deploy on push, PHP version, linked databases and maintenance mode, edited in place. Each change applies at once, and the toast that confirms it can undo it.
The rest of the machine
Metrics, logs and uptime checks
A collector on the box reports CPU, memory, disk, swap, inodes and network traffic. Log search runs across the fleet. HTTP checks run from outside the server, so a dead nginx shows up as down even when the machine itself is fine.

Certificates that renew themselves
Let's Encrypt for every domain and alias, issued at deploy and renewed by certbot's timer on your server.
Backups to a bucket you own
Scheduled database dumps and file archives to any S3-compatible storage. Restores start from the app and stream their log while they run.
Queues and daemons, supervised
Horizon, queue workers and long-running services run as systemd units that restart on failure.
An API for all of it
The app runs on a versioned REST API. A scoped token can deploy, provision and manage servers and sites from CI or a script.
POST /v1/sites/{siteId}/deployments Authorization: Bearer pvs_… Idempotency-Key: ci-run-4812
Put your first server on Provisore.
14 days free on every plan. The trial takes a card and charges nothing until it ends.