Running a COLLAB site
This guide is for whoever installs and runs a COLLAB site, starting with the owner of collab.genesisl1.com. It says what the server does and what it does not, names its parts, and walks the path from uploading the release archive to a site that members use. The pages after it cover each step in detail.
COLLAB 2.2 is an alpha. Its contracts and its server kit had AI-assisted reviews and no external audit, and every page of the site says so: with the Alpha badge beside the COLLAB wordmark and, unless the operator switches it off, the alpha strip at its top.
What stays serverless
The site that members use is static. Its pages, scripts and styles come from the release, and one
file, config.js, tells them which contracts to read. Everything else happens in the visitor's
browser:
- every read of the chain goes from the browser to a GenesisL1 RPC endpoint;
- every transaction is signed in the visitor's own wallet and sent through it;
- every DAO, vote, token and pool lives on chain, not on the server.
The pages keep working when the admin service or the prerender job is stopped. Where the server has no cached copy of something yet, the page reads it from the chain instead.
What the server adds
server/install.sh adds operator tooling around the static files. None of it is needed to use a
DAO, but it makes the site faster, lets search engines find its DAOs, and gives the operator one
place to run it from.
| Part | What it does |
|---|---|
| nginx | Serves the site over HTTPS with a Let's Encrypt certificate, answers the other names with a 301 to the main one, and adds the security headers, caching and compression. |
| The admin page and its service | /admin: deploy the contracts from your wallet, publish them on this site, choose what the site shows, and watch the server's status. |
| The prerender job | Every 10 minutes and on request: a static page and a preview image for every DAO, the sitemap, and a cache under /data/ of logos, descriptions, the token list and the L1 price. |
| The price snapshot | The prerender job fetches the L1 price from CoinGecko on the server, so no visitor's browser contacts CoinGecko for the default display in US dollars. |
| The content policy step | Keeps the pages' Content-Security-Policy and nginx's header in step with config.js when a setting changes what the site may load. |
| certbot | Renews the certificate by itself and reloads nginx afterwards. |
What the server never holds
- No keys. The Deploy tab sends each transaction through your browser wallet and never asks for a key. Members' keys stay in their own wallets.
- No funds. Treasuries, shares, tokens and pools are contracts on GenesisL1. The server cannot move, freeze or change any of them.
- No power over DAOs. The DAO factory and every DAO it creates have no owner, the deploying account included.
What the server does control is what this site shows: which deployment config.js names, and the
site settings. Whoever holds the admin token, or root on the server, could point the pages at other
contracts. Anyone can check which contracts a COLLAB site uses with its Check tab (/admin/check),
which needs no sign-in. Root could change that tab too, so a visitor who does not trust the server
first compares the files it serves with the release's SHA256SUMS. The
Operator security checklist lists what to protect.
The parts
Users
| User | Runs | May write |
|---|---|---|
root | the installer, the content policy step (collab-apply.service), certbot | everything; the policy step writes only the release's pages and COLLAB's own nginx file |
collab | the admin service | /var/www/collab/shared/: config.js, site.json, the deployment record, history, status files, and the run requests in jobs/ |
collab-prerender | the prerender job | shared/prerender/, shared/data/ and shared/jobs/ only |
www-data | nginx's workers | nothing of COLLAB's: it only reads |
The installer creates collab and collab-prerender as system users without a login shell.
collab-prerender is not in the collab group, so it cannot read the admin token.
Services
| Unit | What it does |
|---|---|
collab-admin.service | the admin API, as collab, on 127.0.0.1:8411 behind nginx |
collab-prerender.service | one run of the prerender job, as collab-prerender |
collab-prerender.timer | starts the prerender job every 10 minutes |
collab-prerender.path | starts it as soon as the admin page asks for a run |
collab-apply.path and collab-apply.service | the content policy step, as root, on request |
certbot.timer | certbot's own renewal timer, with COLLAB's reload hook |
Paths
/var/www/collab/
releases/<version>/ the installed releases (root's: only the installer and the policy step write them)
current -> releases/<version>
shared/ config.js, site.json, deployments/, history/, status/ (collab)
prerender/ the prerender job's pages, preview images and sitemap (collab-prerender)
data/ its cache, served at /data/ (collab-prerender)
jobs/ its requests, status, log, lock and caches
acme/ Let's Encrypt's webroot
/etc/collab/ collab.env (the settings, the admin token and two secrets), prerender.env
/etc/nginx/sites-available/collab.conf, linked as sites-enabled/zz-collab.conf
/usr/local/sbin/collab the helper: sudo collab status, logs, prerender, admin-token, applyInstalling COLLAB on a server has the full list, with owners and modes.
From upload to a working site
- Prepare. A Debian or Ubuntu server with ports 80 and 443 open, and the DNS of every name pointing at it. See Before you install.
- Install. Upload the archive to
/var/www/html, check it, extract it and runsudo ./collab-2.2.0/server/install.sh. The extracted folder can be deleted afterwards. See Installing COLLAB on a server. - Sign in. Open
https://collab.genesisl1.com/adminwith the admin token the installer printed. See The admin page. - Deploy. The Deploy tab sends the 20 contract creations from your wallet and verifies them. See Deploy the protocol from /admin.
- Publish. Its last step, Publish to this site, makes every page read the new contracts. See Publish, unpublish and check.
- Prerender. The prerender job runs at once and writes the static pages; Status shows its progress. See Static pages, data files and prices.
- Choose what the site shows. The alpha strip's text, an announcement, featured and hidden DAOs, verified tokens, links, analytics and the RPC endpoints. See Site settings.
- Check. Run
deploy/check_site.pyagainst the live site, then create a small test DAO and run one proposal through. See Status, logs and the collab command. - Keep it running. Upgrades, backups, certificates and security: see Upgrades, rollbacks and backups, Domains, redirects and certificates and Operator security checklist.
Until step 5 every page says that COLLAB is not deployed on this site yet, with a link to the admin page.
Without the server kit
The site can also be hosted as plain static files, on any web server, on Netlify or Cloudflare Pages, or on IPFS. Deploying and checking still work from the admin page in the browser; publishing, the site settings form and the prerender job then become manual steps. See Hosting without the server kit.