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.

The Provisore dashboard listing three servers with their addresses and status, recent deploy and backup activity, and the sites running on them.
LaravelPHPNode.jsSwiftNginxMySQLPostgreSQLRedisUbuntuLet's EncryptGitHubHetzner

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.

shared/nginx/server-body.conf
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.

The deployments tab for a Laravel site, showing three releases with their commit messages, durations and outcomes, and a deploy risk summary above them.

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.

deploy.sh, api.lumen.dk
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.

Server observability in Provisore, showing CPU at 26 percent, memory at 30 percent of 7.8 GB, disk at 43 percent of 80 GB, and swap at 0 percent of 4 GB.

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.