Your servers.
Not our cloud.
Provisore provisions, hardens and deploys to Ubuntu servers on your own provider account. Cancel any time and everything keeps running.

What you keep
Provisore is a control plane. The machines it manages sit on your own provider account, and they stay there.
- The provider invoices you
- 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 stops
- Sites keep serving, certbot keeps renewing on its own timer, cron and queue workers keep running. Provisore talks to the machine over SSH and never sits in the request path. Stop paying and the server carries on as configured.
- The control plane is in the EU
- Deploy history, metrics and logs stay on EU infrastructure, and every third party that touches them is named 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
The rest of the machine
Metrics, logs and uptime checks
A collector on the box reports CPU, memory, disk and inodes. 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 dashboard 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
Every action in the dashboard is an endpoint you can call with a scoped token.
POST /v1/sites/{siteId}/deployments Authorization: Bearer pvs_…
Put your first server on Provisore.
From $12 a month, with 14 days free on every plan. The trial needs a card, and you are not charged until it ends.