Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions docs/architecture/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Architecture overview
description: Single-binary process layout with embedded Caddy, SQLite, channel-based metrics pipeline, and custom Caddy modules.
---

import { Aside } from '@astrojs/starlight/components';

## One process, many goroutines

SimpleDeploy is a single Go binary. There is no agent, no sidecar, no separate proxy process. Caddy runs as an in-process library, not a child process. SQLite is the only datastore. Everything else is a goroutine inside one PID.
Expand Down
2 changes: 0 additions & 2 deletions docs/architecture/proxy.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Proxy (embedded Caddy)
description: How buildConfig() composes Caddy JSON, custom modules plug in, and TLS modes map to automation policies.
---

import { Aside } from '@astrojs/starlight/components';

Caddy runs in-process as a library. There is no Caddyfile. All config is JSON, built programmatically and pushed via `caddy.Load()`. Source: [/internal/proxy/](https://github.com/vazra/simpledeploy/tree/main/internal/proxy).

## Lifecycle
Expand Down
2 changes: 0 additions & 2 deletions docs/architecture/reconciler.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Reconciler
description: Tick loop, hash-based change detection, concurrency cap, and deploy event lifecycle.
---

import { Aside } from '@astrojs/starlight/components';

The reconciler is the only component allowed to mutate Docker state. Everything else writes a file or a row and lets the loop converge. Source: [/internal/reconciler/reconciler.go](https://github.com/vazra/simpledeploy/blob/main/internal/reconciler/reconciler.go) and [/internal/reconciler/watcher.go](https://github.com/vazra/simpledeploy/blob/main/internal/reconciler/watcher.go).

## Trigger model
Expand Down
2 changes: 0 additions & 2 deletions docs/concepts/apps-and-services.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Apps and services
description: The SimpleDeploy mental model: an app is a Compose project, a service is a container in that project.
---

import { Aside } from '@astrojs/starlight/components';

## Definitions

**App.** A Compose project managed by SimpleDeploy. Lives at `apps_dir/<slug>/docker-compose.yml`. Has exactly one slug, one directory, one project name.
Expand Down
2 changes: 0 additions & 2 deletions docs/concepts/endpoints-and-routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Endpoints and routing
description: How endpoints map (domain, service, port, TLS) to Caddy routes inside the embedded proxy.
---

import { Aside } from '@astrojs/starlight/components';

An **endpoint** is a tuple: `(domain, service, port, tls_mode)`. One app can declare multiple endpoints. Each endpoint becomes one Caddy route. Caddy receives all inbound traffic on `:80` and `:443` and matches by `Host` header.

## Declaring endpoints
Expand Down
2 changes: 0 additions & 2 deletions docs/concepts/how-it-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: How it works
description: A request walkthrough from compose file edit to first byte served, covering reconciler, deployer, and embedded Caddy.
---

import { Aside } from '@astrojs/starlight/components';

Follow one request from "I edited a YAML file" to "the browser got bytes."

## The path
Expand Down
2 changes: 1 addition & 1 deletion docs/concepts/overview.md → docs/concepts/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: What is SimpleDeploy
description: One-page primer on what SimpleDeploy manages and how state flows from compose files to running containers.
---

import { Card, CardGrid, Aside } from '@astrojs/starlight/components';
import { Aside, Card, CardGrid } from '@astrojs/starlight/components';

SimpleDeploy is a single Go binary that runs on one Linux box and manages Docker Compose apps for you. It owns the reverse proxy (embedded Caddy), TLS certificates, metrics, alerts, scheduled backups, and a small dashboard. No agent, no cluster, no control plane.

Expand Down
2 changes: 0 additions & 2 deletions docs/concepts/reconciler.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Desired-state reconciler
description: How the reconciler converges Docker state to match the apps directory and SQLite store.
---

import { Aside } from '@astrojs/starlight/components';

SimpleDeploy is declarative. You describe what you want (compose files in `apps_dir/`, rows in SQLite), and the reconciler keeps Docker matching. Same model as Kubernetes, smaller scope.

## Two states
Expand Down
2 changes: 0 additions & 2 deletions docs/concepts/state-and-storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: State and storage
description: What SimpleDeploy stores, where it lives on disk, and how to back it up.
---

import { Aside } from '@astrojs/starlight/components';

SimpleDeploy keeps state in three places: a SQLite database, an apps directory, and Caddy's own storage for ACME certs. Backups go anywhere you point them.

## Layout
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ title: Writing docs
description: House style for SimpleDeploy docs: markdown layout, components, screenshots, and cross-links.
---

import { Aside, Card, CardGrid, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

The docs site is Astro Starlight. Markdown source lives in `docs/`. The site config and any interactive content live in `docs-site/`. A sync script copies `docs/**/*.md` into `docs-site/src/content/docs/` at build time.

## Source files
Expand Down
2 changes: 1 addition & 1 deletion docs/first-deploy/admin.md → docs/first-deploy/admin.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Create the admin user
description: First-time setup: create the super-admin via the web wizard or the CLI, then issue an API key for remote access.
---

import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

The first time SimpleDeploy starts with no users in the database, it shows a setup wizard. You have two paths.

Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Deploy via the CLI
description: Use simpledeploy apply from your laptop or CI to push compose files to a remote server. Contexts work like kubectl.
---

import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';

The CLI runs in two modes.

| Mode | When | How it works |
Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/compose.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Write a docker-compose.yml
description: Walk-through of writing a Compose file with simpledeploy.* labels for routing, TLS, and multi-service apps. Uses whoami as the example.
---

import { Aside, Steps, FileTree } from '@astrojs/starlight/components';

A SimpleDeploy app is a regular `docker-compose.yml` with a few extra labels under the `simpledeploy.*` namespace. Existing compose files work as-is once you add labels for routing.

## Minimal example
Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Generate config
description: Run simpledeploy init, edit the YAML, and set the three required fields (domain, master_secret, tls.email).
---

import { Steps, Aside } from '@astrojs/starlight/components';

SimpleDeploy reads its config from `/etc/simpledeploy/config.yaml` by default. Generate a starter file, then edit three things.

## Generate
Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/prepare.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Prepare the server
description: What you need before installing SimpleDeploy. VPS sizing, Docker, firewall ports, and DNS records.
---

import { Aside, Steps } from '@astrojs/starlight/components';

Five minutes of prep saves an hour of debugging later.

## Pick a VPS
Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Deploy via the dashboard
description: Use the web UI to add a service, paste your compose file, deploy, and watch live logs stream.
---

import { Steps, Aside } from '@astrojs/starlight/components';

The fastest way to deploy if you already have the dashboard open.

<Steps>
Expand Down
2 changes: 0 additions & 2 deletions docs/first-deploy/verify.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Verify the deployment
description: Confirm the app is running, HTTPS works, logs stream, metrics flow, and set up your first alert.
---

import { Steps, Aside } from '@astrojs/starlight/components';

Five checks to make sure the deploy actually worked.

<Steps>
Expand Down
2 changes: 0 additions & 2 deletions docs/guides/access-control.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: IP access control
description: Restrict which client IPs can reach an app with simpledeploy.access.allow. Allowlist-only, default-allow when empty, 404 for blocked IPs.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';

Restrict which client IPs reach an app with the `simpledeploy.access.allow` label. Useful for admin panels, internal APIs, geo-pinning to known office IPs, or staging environments.

## Semantics
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/api-keys.md → docs/guides/api-keys.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: API keys
description: Create sd_-prefixed API keys for the CLI and automation. Keys inherit the creator's permissions and are shown once.
---

import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

API keys authenticate the CLI, CI pipelines, and any HTTP client against the management API. Format: `sd_` followed by 64 hex characters.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/audit-log.md → docs/guides/audit-log.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Audit log
description: View, filter, and export the activity log. Track config changes, deploys, auth events, and system actions across all apps.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import { Aside, TabItem, Tabs } from '@astrojs/starlight/components';

Every action in SimpleDeploy is recorded in a persistent activity log. Use it for incident review, compliance evidence, or just to check who deployed what.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Custom certificates
description: Upload your own PEM certificate and key for an app endpoint. Use for corporate CAs, mTLS, or certs managed elsewhere.
---

import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

Use a custom certificate when Let's Encrypt won't work for you: corporate CA, internal-only domain, mTLS, or a cert issued by an external ACME tool.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/env-vars.md → docs/guides/env-vars.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Environment variables and secrets
description: Set per-app environment variables via the UI, CLI, or API. Keep secrets out of compose files using a managed .env file.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import { Aside, TabItem, Tabs } from '@astrojs/starlight/components';

Three places env vars can come from for an app:

Expand Down
2 changes: 0 additions & 2 deletions docs/guides/rate-limiting.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Rate limiting
description: Per-app rate limits via compose labels. Limit by IP, header value, or path. Returns 429 with Retry-After when tripped.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';

Rate limiting is per-app, configured with `simpledeploy.ratelimit.*` labels on any service in the compose file.

## Labels
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/registries.md → docs/guides/registries.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Private registries
description: Add credentials for ghcr.io, Docker Hub, AWS ECR, Azure ACR, or any registry. Encrypted at rest with master_secret.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import { Aside, TabItem, Tabs } from '@astrojs/starlight/components';

Add credentials so SimpleDeploy can pull private images. Credentials are encrypted with AES-256-GCM derived from `master_secret` before being stored.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/scaling.md → docs/guides/scaling.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Scaling services
description: Run multiple replicas of a compose service on the same host. Useful for stateless web/worker tiers, with caveats for stateful services.
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import { Aside, TabItem, Tabs } from '@astrojs/starlight/components';

Run more than one replica of a compose service. SimpleDeploy shells out to `docker compose up --scale` and the built-in proxy round-robins requests across the replicas.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/tls.md → docs/guides/tls.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: TLS and HTTPS
description: Pick the right TLS mode for SimpleDeploy. Auto Let's Encrypt, custom certs, off (behind LB), or local CA, configured globally and per-endpoint.
---

import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

SimpleDeploy embeds Caddy. TLS is configured globally for the management UI and per-endpoint for each app.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/users-roles.md → docs/guides/users-roles.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Users and roles
description: Create users with role-based access (super_admin, manage, viewer) and scope non-super_admins to specific apps.
---

import { Tabs, TabItem, Aside, Steps } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

SimpleDeploy ships with three roles. Pick the lowest privilege that gets the job done.

Expand Down
2 changes: 0 additions & 2 deletions docs/install/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Install via Docker
description: Install SimpleDeploy as a Docker container. The universal path for non-Debian distros (Fedora, Arch, Alpine), NAS boxes (Synology, TrueNAS), or a quick trial on any Linux host.
---

import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components';

The universal path. Use Docker when you are on Fedora, Arch, Alpine, a NAS (Synology, TrueNAS), or just want a quick trial. For Debian/Ubuntu production servers, [apt](/install/ubuntu/) is still the recommended install.

<Aside type="note">
Expand Down
2 changes: 0 additions & 2 deletions docs/install/from-source.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Build from source
description: Build SimpleDeploy from source. Requires Go 1.22+ and Node.js 18+. Recommended for contributors and hackers, not production.
---

import { Aside, Steps } from '@astrojs/starlight/components';

<Aside type="caution">
Not recommended for production unless you are patching the codebase. The released binaries are reproducible and signed via CI. Building from source means you also own the upgrade path.
</Aside>
Expand Down
2 changes: 1 addition & 1 deletion docs/install/linux.md → docs/install/linux.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Install on generic Linux
description: Install SimpleDeploy on any Linux distribution from the prebuilt binary tarball, with a manual systemd unit and dedicated user.
---

import { Steps, Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

For distros without an APT package (Fedora, Arch, Alpine, RHEL-likes, etc.). Drop the binary in `/usr/local/bin/`, set up a systemd unit, you are done.

Expand Down
2 changes: 0 additions & 2 deletions docs/install/macos.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Install on macOS
description: Install the SimpleDeploy CLI on macOS via Homebrew. Use it to manage remote Linux servers from your laptop.
---

import { Aside, Steps } from '@astrojs/starlight/components';

<Aside type="caution" title="macOS is for the CLI, not the server">
SimpleDeploy targets Linux for production. Run the server on a Linux VPS. The macOS install is for the CLI client so you can manage remote servers from your laptop, the same way `kubectl` works.
</Aside>
Expand Down
2 changes: 0 additions & 2 deletions docs/install/ubuntu.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Install on Ubuntu / Debian
description: Install SimpleDeploy on Ubuntu or Debian via the official APT repository. Includes systemd setup, firewall config, and verification.
---

import { Steps, Aside } from '@astrojs/starlight/components';

The recommended path for production. The `.deb` package ships a systemd unit and pulls updates through normal `apt upgrade`.

Prefer containers or on a non-Debian distro? See [Install via Docker](/install/docker/).
Expand Down
2 changes: 1 addition & 1 deletion docs/install/upgrading.md → docs/install/upgrading.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Upgrading
description: Upgrade SimpleDeploy via apt, brew, or by replacing the binary. Always back up the SQLite DB first. Schema migrations run automatically.
---

import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';

<Aside type="caution" title="Back up first">
Always back up the SQLite database (and your `apps/` directory) before upgrading. Migrations run forward only. See [Disaster recovery](/operations/disaster-recovery/) for the procedure.
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/archived-apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Archived apps
description: How SimpleDeploy archives apps when their config directory disappears, what's preserved, and how to purge or restore them.
---

import { Aside } from '@astrojs/starlight/components';

When an app's config directory disappears from `apps_dir`, SimpleDeploy does not silently forget it. The running containers are torn down, but the database row, deploy history, audit log, alert rules, backup configs, and access grants are all retained. The app moves to an **archived** state and shows up under "Archived apps" in the sidebar.

This is intentional: filesystem removal is reversible-ish (you can put the directory back or restore from git), and you almost never want to lose months of metrics, audit trail, or backup history just because someone ran `rm -rf` or git pulled a delete.
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/config-sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Config sidecars and sidecar-based recovery
description: How SimpleDeploy mirrors every user-editable setting to YAML files on disk, and how to recover a wiped database from those files.
---

import { Aside } from '@astrojs/starlight/components';

To sync sidecar files to a remote git repository automatically, see [Git sync](./git-sync).

SimpleDeploy continuously mirrors every user-editable setting to plain YAML files called **config sidecars**. If the SQLite database is ever wiped, the server automatically imports the sidecars on the next start. No backup job needed for configuration; the live copy is always on disk.
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/disaster-recovery.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Disaster recovery
description: Restore a SimpleDeploy server from scratch using the system DB backup and per-app backups.
---

import { Aside } from '@astrojs/starlight/components';

When things go badly wrong, the speed of recovery depends entirely on how you set things up beforehand. This page covers three failure modes, ordered by severity.

SimpleDeploy also mirrors every user-editable setting (users, alert rules, backup configs, registries, webhooks) to YAML sidecar files on disk. A wiped database can be recovered from those files without a prior backup. See [Config sidecars and sidecar-based recovery](/operations/config-sidecars/) for the full procedure.
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/git-sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Git sync
description: How to keep your SimpleDeploy app configs in a git repository, synced automatically on every change.
---

import { Aside } from '@astrojs/starlight/components';

Git sync is optional and disabled by default.

When enabled, SimpleDeploy treats your `apps_dir` as a git working tree and commits every config change to a remote repository. Each deploy, env-var edit, or sidecar update triggers a commit and push within seconds. You can also pull remote changes back in, making it possible to manage deployments through git rather than (or alongside) the UI.
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/monitoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Monitoring and observability
description: How to monitor SimpleDeploy itself: server logs, metrics, alerts, and integrations with external observability tools.
---

import { Aside } from '@astrojs/starlight/components';

Monitor SimpleDeploy in three layers. Each catches a different class of failure.

## Layer 1: SimpleDeploy itself
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/production-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Production checklist
description: Pre-flight checks for going live with SimpleDeploy: TLS, master_secret, backups, alerts, firewall, audit log.
---

import { Aside } from '@astrojs/starlight/components';

Run through every box before you put real traffic on a SimpleDeploy host. Skipping items will burn you later.

<Aside type="caution">
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/security-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Activity & Audit Log
description: Per-app and global activity feed tracking every config change, deploy outcome, auth event, and system action in SimpleDeploy.
---

import { Aside } from '@astrojs/starlight/components';

The activity log is a persistent, queryable record of everything that changes in SimpleDeploy: who did what, when, and for which app.

## Where to find it
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/state-on-disk.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: State on disk
description: How SimpleDeploy stores configuration on the filesystem, which files are authoritative, where secrets live, and how to recover from a corrupted database.
---

import { Aside } from '@astrojs/starlight/components';

SimpleDeploy treats the filesystem as the source of truth for all portable configuration. The SQLite database is a cache that can be rebuilt from disk at any time. This page describes the on-disk layout, the authority boundary, the secrets boundary, and recovery procedures.

## File layout
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Troubleshooting
description: Common issues with SimpleDeploy and how to diagnose them: TLS, deploys, backups, proxy, auth.
---

import { Aside } from '@astrojs/starlight/components';

Each entry follows: **symptom -> diagnostic command -> fix**.

## Deploy hangs at "pulling image"
Expand Down
2 changes: 0 additions & 2 deletions docs/operations/upgrade-rollback.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: Upgrade and rollback
description: Safely upgrade SimpleDeploy. Rollback procedures if a release breaks something in your environment.
---

import { Aside } from '@astrojs/starlight/components';

SimpleDeploy is a single binary with embedded UI. Upgrades replace the binary and run any pending DB migrations on startup.

<Aside type="caution">
Expand Down
2 changes: 0 additions & 2 deletions docs/start/how-it-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ title: How it works
description: Architecture overview. Single Go binary running embedded Caddy, a directory-watching reconciler, SQLite state, plus metrics, backups, alerts, and auth.
---

import { Aside } from '@astrojs/starlight/components';

SimpleDeploy is one process. Inside it, several subsystems share state through a SQLite database and coordinate via channels.

```mermaid
Expand Down
Loading
Loading