Skip to content

Sites & Deployments

Each site has 10 nested sections:

TabWhat’s here
OverviewStatus, domain, server, recent deployments
FilesIn-browser file manager and code editor
DeploymentsDeployment history, logs, rollback
DatabasesDatabases linked to this site
PHPPHP version picker, FPM pool settings
LogsReal-time and historical access/error logs
AnalyticsPage views, bandwidth, top paths
SSLCertificate status, force-renew
BackupsSite-scoped backup jobs and snapshots
SettingsDomain aliases, environment variables, danger zone

Sites can be deployed from:

  • Git — GitHub, GitLab, Bitbucket (webhook-triggered or manual)
  • Template — one of 13 built-in starter templates
  • ZIP — upload an archive
  • WordPress — WP-CLI managed install

Every deployment follows a 6-stage pipeline:

1. clone Clone or extract source to a release directory
2. build Run build commands (npm run build, cargo build, etc.)
3. release-dir Create /srv/sites/{site}/releases/{timestamp}/
4. env-write Write encrypted env vars to .env in the release dir
5. symlink-swap Atomically swap /srv/sites/{site}/current → new release
6. prune Remove releases older than the last 5

The symlink swap is atomic — no downtime between old and new version.

Go to Deployments, find any previous release, click Roll back.
The current symlink points back to the old release directory.

Long-running processes (queue workers, WebSocket servers) are managed as daemons:

  • Go to Sites → [site] → Settings → Daemons
  • Set command, working directory, environment, restart policy
  • Tundra writes a systemd unit and manages it via the agent

Cron-style tasks run on the server’s local timezone:

# Examples
0 2 * * * php artisan schedule:run
*/5 * * * * node scripts/sync.js