Docs Guides
Deploy a project
sitesolide deploy, run in a project's folder, puts it live at https://<slug>.<zone>. Run it again to ship each change.
Your laptop
sitesolide deploy
built code, over SSH or a token
Your server
Unit
generated from the manifest
Caddy block
checked with the others
restart, then verify over HTTPS
Live site
https://<slug>.<zone>
Choose a static site or an app
Link to the section Choose a static site or an appThe manifest, sitesolide.json, decides which one a project is:
| Kind | Declares | On the server |
|---|---|---|
| Static site | publicDir, no start | Caddy serves the files, nothing runs |
| App | start, or services | its own system account, a systemd unit and a Caddy block |
An app can be in any language: anything that listens on its port.
Write the manifest
Link to the section Write the manifestsitesolide detect prints the manifest it infers from the folder. It recognises a Go module, a FastAPI or Flask app, a JavaScript or TypeScript server, and a generated or static site. Its notes name the secrets the code reads and the network calls it makes.
sitesolide detect
sitesolide detect --write writes it as sitesolide.json, never over an existing one. Or write it by hand. The smallest static site:
{ "slug": "blog", "publicDir": "public" }
The smallest app:
{
"slug": "api",
"port": 3030,
"start": "/usr/local/bin/bun run server.ts",
"publicDir": "public"
}
slugbecomes the address: lowercase letters, digits and hyphens.startis an absolute path: the unit has a minimalPATH.portlies between 3000 and 3099. Left out,deploypicks a free one and writes it intositesolide.json: commit it./must answer 200, not a redirect, or the deploy fails.
Preview the deploy
Link to the section Preview the deployA dry run reads the server and prints the unit and Caddy block an app would get. It changes nothing, does not run the build, and needs the owner's SSH access.
sitesolide deploy --dry-run
The deploy runs the manifest's build on your workstation, sends the code, restarts the service, and checks the site over HTTPS:
sitesolide deploy
-> verify
https://api.example.com/ 200
It fails when / does not answer, or when a service falls within ten seconds of its restart.
Check status and logs
Link to the section Check status and logssitesolide status shows what the server runs, one line per unit, with its memory. sitesolide logs shows the project's journal, every service interleaved:
sitesolide logs --follow
Know what a deploy costs
Link to the section Know what a deploy costs- A short 502. The new code replaces the running version in place: until the new process listens, visitors get a 502.
- No rollback. Nothing keeps the previous version. To go back, deploy the previous commit.
- Caddy comes back. A block Caddy refuses brings back the previous configuration.
- Data stays. A deploy never touches the data folder, but a schema the new version migrated stays migrated.
A static site has no 502: its files are sent in place and nothing restarts.
Remove a project
Link to the section Remove a projectWarning
Removal is for good. It deletes the project's units, its served folder with its data, its secret files and its system account. Its backup snapshots are kept.
From the project's folder, --confirm takes the slug typed back. --dry-run lists every step and removes nothing:
sitesolide remove --confirm <slug> --dry-run
sitesolide remove --confirm <slug>
Next steps
Link to the section Next steps- Workers and scheduled jobs: run processes that serve no page.
- Secrets: give the app its keys without committing them.
- Custom domains: serve the project on its own domain.
- Manifest reference: every key of
sitesolide.json.