Start · one paste, no terminal

A blog on HTTPS in one paste

Type the domain. Copy the file this page writes. Paste it into the server form at your cloud provider. About three minutes after the machine boots, open the address and type the code. That is the whole install, and nothing in it is a command.

things to type
2 a domain, then a code
terminal
0 never opened
from boot to blog
~3 minutes
certificate
auto Let's Encrypt, via Caddy
monthly cost
$4–6 the cheapest server they sell
providers
any with Ubuntu and cloud-init

01Before you paste

Two things have to exist first, and both are done outside this page.

  1. A domain, pointed at the server

    The file asks Let's Encrypt for a certificate the moment the machine boots, and Let's Encrypt looks your domain up to do it. So the A record has to point at the server's IP address by then. Providers that hand out the address before the machine exists (DigitalOcean's reserved IP, Hetzner's primary IP, UpCloud's floating IP) make this a two-minute job; otherwise create the server, read its IP, set the record, and paste the same file into a rebuild. If the record arrives late, Caddy keeps retrying and the certificate comes when the name resolves.

    No domain yet? Leave the field empty. The blog comes up on plain http:// at the server's IP address, and you claim it at http://<ip>/setup with the same code. Add the domain later from Settings.

  2. An account at a provider

    Any of them. The smallest Ubuntu 24.04 machine they sell is enough: this blog is one process over two SQLite files, and it idles at about 50 MB of memory. The provider's own form has a box for a file like this one; its name differs and section 03 says where it is for each.

02Make the file

Nothing here leaves your browser. The page fetches the project's own cloud-init file from GitHub, fills in your domain, and draws a setup code from your browser's random number generator.

The blog's address becomes https:// + this, and the certificate is issued for exactly this name. www. is not added.

What the file does. It installs Docker from Ubuntu's own packages, pulls the published quireink/quireink image, and starts it behind Caddy, which asks Let's Encrypt for the certificate and renews it by itself. Your posts and pictures live in /var/lib/quire on the server's disk. Every line of it is readable: the file on GitHub is what this page fetches, and the only two lines it changes are DOMAIN and SETUP_CODE.

03Boot, then claim

  1. Paste, and create the server

    Pick Ubuntu 24.04 and the smallest size. The field to paste into is listed under the file above once it is written; on every provider it is a plain text box on the create form, and the file goes in whole, first line to last.

  2. Wait about three minutes

    The machine boots, installs Docker, pulls the image and asks for the certificate. Opening the address too early shows a connection error or a browser warning; that is the certificate not being there yet. Give it a minute and reload.

  3. Open the address and type the code

    Go to https://your-domain/setup. The page says the blog has no owner yet and asks for the setup code. Type it, then choose a username, an email and a password. The next screen shows a QR code for the authenticator app on your phone and ten recovery codes, once; put those where you will still have them in two years.

    Ten wrong codes from one address shut the door for a quarter of an hour, and the code stops working for good the moment the account exists. There is nothing to clean up afterwards.

  4. Write

    Everything else is in the admin: the site's name, its language and timezone, the newsletter, comments, the look. The guide takes it from here, and section 03 of it is the same install done by hand, for the day you want to know what the file did.