Install guide

What self-hosting actually involves

A summary of the real work, in order, so you can judge it before you buy anything. The official documentation is the authority and every section below links to the page it summarises — this page exists to show you the shape of the job, including the parts that are work.

Your client portal. Your server. Your data.

1. A server

Any Linux VPS with a public IPv4 address. A fresh one is best, and it must not already be running nginx or Apache, because ClientOS brings its own web server and needs ports 80 and 443. The docs name Hetzner, DigitalOcean, Vultr, Linode and AWS Lightsail; any provider works.

Server requirements from getclientos.com/docs/installation, checked 29 October 2026.
Resource Minimum Recommended
Operating system Ubuntu 22.04 or Debian 12 Ubuntu 24.04 LTS
CPU 1 vCPU 2 vCPU
Memory 2 GB 4 GB
Free disk 10 GB 20 GB or more, SSD
Network Public IPv4, ports 80 and 443 open —

The installer checks memory and disk before it starts and stops with a clear message if the server is too small; below 2 GB it refuses, and on a small server it adds a 4 GB swap file. The docs call a 2 vCPU, 4 GB server "comfortable for a typical agency".

2. One DNS record, added first

ClientOS runs on one domain — say clients.youragency.com — with the client portal at /, the admin at /admin and the API at /v1. It needs a single A record pointing that name at your server’s IP address.

Type   Name      Value          TTL
A      clients   203.0.113.5    Auto (or 300)

Three things the docs are specific about, each of which will otherwise cost you an hour:

  • Add it before you install. The installer checks the record against public DNS and against your actual server before it downloads anything.
  • On Cloudflare, set it to DNS only — the grey cloud. Let’s Encrypt has to reach your server directly for the first certificate, and the orange-cloud proxy blocks that. You can turn the proxy on afterwards.
  • Delete a stale AAAA record on that name unless it is your server’s own IPv6 address. Let’s Encrypt tries IPv6 first, and a wrong AAAA record stops the certificate.

The domain has to be public, must not already be serving a website, and your licence binds to it — a key can change domain three times in its life, so pick the one you mean to keep.

3. One command

Your licence page at vibemonk.com gives you an install command with your key already in it. SSH into the server, paste it, press enter.

$ ssh root@YOUR_SERVER_IP
$ curl -fsSL https://license.vibemonk.com/v1/licensing/install/clientos \
    | sudo bash -s -- --license-key CLOS-XXXX-XXXX-XXXX-XXXX

It checks your key, downloads the installer and verifies its fingerprint, unpacks it to /opt/clientos, installs Docker if it is missing, adds swap on a small server, and writes your configuration with freshly generated passwords. Then it prints a link to finish in the browser.

If you would rather not pipe a script into bash, the same installer is downloadable as a .tar.gz from your licence page — upload it, unpack it, run sudo ./install.sh --license-key …. Both paths run exactly the same checks. For a provisioning script, add --domain, --email and --yes to skip the browser step without skipping the checks.

One constraint worth knowing early: ClientOS installs only on a server your domain reaches over the internet. Before anything downloads, the licence server checks from outside that your domain answers on that machine — so a laptop, a home network or an unpointed domain cannot install it.

4. Finish in the browser

Open the link the terminal printed, enter your domain and an email address for certificate renewal warnings, and press Connect. The licence server verifies your domain from the internet and binds your key to it; only then is ClientOS downloaded, with every file checked against its fingerprint. HTTPS takes a minute or two, then your browser moves on to the setup page by itself.

The setup page at /admin/setup is guarded by a setup key the installer printed — it stops a stranger who finds your fresh server from claiming it first. If you lose it, sudo clientos setup-key shows it again. Seven steps: welcome, licence, your agency, region (currency and timezone), two brand colours, your owner account (password at least 12 characters), review. About two minutes.

Once anyone on your team has signed in, setup closes for good. There is also a command-line route to create the owner, which refuses to run after any staff member has signed in, so it cannot be used as a back door later.

5. Connect email, then everything else

This is where the time actually goes. The docs put first run at 20 to 40 minutes, most of it spent in your email provider’s dashboard adding SPF and DKIM records, and they give the order for a reason:

  1. 01

    Email, first

    Resend, or any SMTP server — Google Workspace, Microsoft 365, Zoho, Amazon SES. There is no fallback: until one is connected, sign-in codes, invitations and notifications cannot be sent.

  2. 02

    Sender and a test

    Set the sender name and an address on the domain you verified, then send a test to your own inbox before you trust it.

  3. 03

    File storage

    Already working on your server. If you would rather keep files in a Cloudflare R2 bucket, decide now — before anything is uploaded — because existing files have to be copied over by hand.

  4. 04

    Turnstile

    Optional but recommended. Cloudflare Turnstile protects your public signup and free checkout pages from bots.

  5. 05

    Payments, test keys first

    Connect Stripe, PayPal, NOWPayments, CoinGate or BTCPay Server with test keys, make a test purchase, confirm the order and the webhook arrived — then switch to live keys and repeat with a small real payment you refund.

  6. 06

    Two-factor, then your team

    Turn on 2FA for your own account. Only then invite anyone: an invitation sent before email works never arrives.

6. Backups — the part you have to do yourself

If you read one section of this page, read this one. ClientOS gives you a one-command backup, but the docs are explicit that nothing runs it until you schedule it.

$ sudo clientos backup
# writes three files into backups/ and keeps the newest seven of each:
#   db-DATE.dump       your whole database
#   files-DATE.tar.gz  every file stored on the server
#   env-DATE           deploy/.env, including CREDENTIAL_SECRET

# then schedule it — daily at 03:00:
$ echo '0 3 * * * root /usr/local/bin/clientos backup >/var/log/clientos-backup.log 2>&1' \
    | sudo tee /etc/cron.d/clientos-backup
  • Copy the folder off the server. A backup on the same disk is lost with the disk. Another server, your own machine, or a bucket via rclone — and keep the copies private, because the env files hold your secrets.
  • Restore one before your first real client goes in, and again every few months. The docs put it well: a backup you have never restored is a hope, not a backup.
  • Check that recent files exist. A backup job that silently stopped weeks ago is the most common failure.
  • If you move files to Cloudflare R2, clientos backup no longer covers them and the bucket needs backing up separately.

Living with it: the clientos command

From getclientos.com/docs/operations, checked 29 October 2026. Run with sudo.
CommandWhat it does
clientos statusThe version, what is running and whether it is healthy
clientos updateTakes a backup, downloads the newest release your licence covers, restarts. Migrations run before the new API starts
clientos rollbackBack to the release before the last update, once
clientos backupDatabase, files and settings into backups/
clientos restore FILE…Puts a backup back; asks you to type restore to confirm
clientos logs [service]Follows the logs, of everything or one service
clientos domain NEWMoves ClientOS, and your licence, to another domain
clientos setup-keyShows the setup page’s key again

Updates also run from the admin at Settings → License → Updates, and the docs note that the admin never gets root access for this — it leaves a request that a small service on the server picks up. A release that changes existing data will say so in its notes and wants clientos update --stop-first, which costs about a minute of downtime instead of the old version writing old-style data into the new database.

Point an uptime monitor at https://YOUR_DOMAIN/v1/health: it returns 200 with PostgreSQL and Redis reported, and 503 when the database cannot be reached. Docker restarts a container whose process crashes, but not one that is running and unhealthy.

Install questions

What do I need to run it?

A Linux VPS with 2 to 4 GB of RAM running Ubuntu 22.04 or 24.04 or Debian 12, a domain you can add one A record to, your licence key, and an email account to send from — Resend or your own SMTP server. One command installs everything else, including Docker, PostgreSQL, file storage and HTTPS.

Source: getclientos.com FAQ and docs/installation.

How long does installing it take?

The docs put the install at about 10 minutes — one command, then connecting your domain in the browser — and the setup page that follows at about two minutes. Allow 20 to 40 minutes in total for first run, because most of that time is spent in your email provider’s dashboard adding SPF and DKIM records.

Source: getclientos.com docs/installation and docs/first-run.

I am not technical. Can someone set it up for me?

Yes. Installing is one command, but on the Premium and Custom packages the ClientOS team installs it on your server, connects email and payments, and hands over a working portal.

Source: getclientos.com FAQ.

What happens if my server cannot reach the licence server?

ClientOS keeps working and your team sees a warning saying when the grace period ends, which is seven days after the last successful check-in. After that — or immediately if the key is revoked or released — the admin becomes read-only. The client portal keeps working, checkout and webhooks keep working, and nothing is deleted.

Source: getclientos.com docs/operations.

Do backups happen automatically?

No, and this is worth knowing before you go live. One command — clientos backup — writes the database, your files and your settings into a folder, but the docs are explicit that nothing runs it for you until you schedule it. They give a cron line for a daily 03:00 backup and tell you to copy the folder off the server.

Source: getclientos.com docs/operations.

This page is a summary, written 29 October 2026. The official ClientOS documentation is the authority and is kept current — follow it, not this, when you actually install. If the two ever disagree, the docs are right and this page is out of date; tell us in a GitHub issue and we will fix it.

Or skip the server and just look at it

The instant demo emails you a login to a live, fully installed ClientOS with sample clients, orders and invoices. Read-only, 3 days, no call and no card.