A website is a thing, not a config file.

nginx or Apache installed from the hub, and from then on a site is what you would call a site: a domain, a folder, whether it answers, the certificate it presents and for how long, its own logs and its own backups. One form makes it, one job writes it, and Vigia never rewrites a site it did not make.

Vigia creating a site: the job card with each step in its own words — the folder, the owner, the server block, the certificate, the reload
A site being made: one job, each step in its own words, the reload last.
/ NEW SITE, ONE FORM

Five answers, one job, a site that answers.

The form is one control a row; nothing on it needs a crystal ball. Rehearse first runs the whole job against Let's Encrypt's test service, so a mistake does not spend one of the five real certificates a name gets a week.

What the site is

Static files, a PHP pool, a container picked from what Docker publishes, a reverse proxy, or an app on a port kept running by a systemd unit Vigia writes.

Domain, folder, owner

As you type the domain, the box is asked whether the name points at it — the commonest failed certificate is a name that does not resolve there yet — and the answer is on the form, not discovered inside the job.

Where HTTPS comes from

Let's Encrypt through the acme folder every Vigia site serves on port 80, or your own certificate — one already on the box, or the certificate and key pasted in, checked to belong together before anything is written.

The door

The proof comes in on 80, so the form says whether 80 and 443 are open before you start. Open 80 + 443 lets them in through the same guarded change the Firewall screen makes. Nothing is opened unasked.

The job

The folder and its owner, the server block, the certificate, the web server's own test of the file, and the reload — each step on the card as it happens.

/ WHERE IT ALL SITS

Vigia opens the door only when you say.

A site nobody can reach is not a site, so the Websites screen reads the firewall's word on 80 and 443 beside the sites. When either is closed the band says so. Leave them shut and the site answers the box only; open them and it answers the world — through the same guarded change the Firewall screen makes, never silently.

Everything the job writes, it writes over the SSH login Vigia already has: the folder, the server block, the certificate, the protection. Nothing is installed on the box, and a site Vigia did not make is never rewritten.

The firewall, on the Security page
/ THE SITE, ONCE IT LIVES

Everything about it, read from the box itself.

No agent on the server, no analytics script in the pages, no third party in between: what the page shows comes from the site's own files and logs, over SSH.

Names and redirects, as one line and a few rows.

The names a site answers to, one of them chosen as its own, so every other name — www to the apex, the old domain to the new — sends there with a 301, path kept. Redirects as rows: a path to a path or to another site, 301 or 302, with or without everything under it. They live in one file beside the site, tested by the web server before they go live and put back if it refuses.

Protection is one transaction.

The protect file, the rate-limit zones, the include line added once, the server's own test — and everything put back if any step fails, so a half-applied protection never exists.

Traffic, read from the site's own log.

Requests by day — by the hour on the one-day reading — piled by status class; bytes out, where a spike under a flat line is one big file or a scraper; the top paths, the top visitors and the agents; and what share of it all is bots. On one small site, three of the top six paths were /.env, /.env.backup and /.env.bak — the internet knocking, and the 4xx they got is the answer.

The head of the page carries the live state — whether it answers and in how many milliseconds, the certificate and the days it has left, the requests today — and the findings worth a look, such as a site that redirects to https but sends no HSTS header, with Settings one click away.

The files, edited where they are.

You never need FTP for a site again. The Files tab is the site's folder and nothing above it: browse, upload from your computer, download, delete, permissions, extract an archive — all over the SSH login Vigia already has. A text file opens in the editor beside the pane; save writes the bytes back with the mode and owner the file had, and the change is live on the next request.

Its own logs, live.

Every site has its own access and error logs, and Vigia reads them as the site's, not the server's: the lines as they arrive, following live, filterable, with the request that is failing right now on screen while you fix it.

Backed up on a schedule. Switched off without losing anything.

Back up now makes one tar under /var/backups/lens/sites — the folder, the server block, the protection, Vigia's certificate when the block names it, and the database when wp-config.php or .env names one — and Put back restores it on this box or another. A scheduled backup is a plan on the box like any other: the same tar, when, how many to keep, and where — S3 and its houses, Azure, Google Cloud Storage, SFTP, FTP or WebDAV — encrypted before the push to a key only you hold, run by cron with nothing from this computer. A site switched off stops answering; its files, certificate and logs stay exactly where they are, and one switch brings it back.

/ A WEEK ON A SMALL SITE

What the log says when you read it as the site's.

Traffic is the site's own access log, over a day, a week or a month — never a script in the pages, never a third party. The reading beside it is a week of one small site: a quiet site, a few hundred real visits, and the internet trying the doors it always tries.

The 4xx column is not a problem to fix. It is the box answering no.

# example.com · 7 days · from /var/log/nginx/example.com.access.log requests 4,812 by day: ▂▃▂▅▃▂▇ bytes out 1.9 GB one spike: a 640 MB download, Thursday bots 61% by agent top paths / 1,204 200 /blog/ 318 200 /.env 296 404 # the internet knocking /.env.backup 241 404 /wp-login.php 198 404 # not a WordPress site /.env.bak 177 404 live answers yes · 23 ms https valid · 82 days no HSTS header — Settings

The web server is one card on the hub

Install nginx or Apache, and the Websites tool appears in the rail the moment the daemon runs.

Web, mail, containers, VPN and more