Skip to main content

Architecture

Product shape

edox-ops is a Typer CLI that orchestrates host preparation, per-project nginx configuration, static deploys, and consistency checks. Git-backed or operator-managed configuration on the host (projects.json) is the desired-state source of truth for which sites exist and how they are served.

On-host layout

PathPurpose
/etc/edox-ops/projects.jsonManaged project metadata
/var/www/docs/<slug>/Published documentation root
/var/www/docs/.edox-ops-backups/<slug>/Pre-deploy snapshots
/etc/nginx/sites-available/edox-ops-<slug>Generated vhost
/etc/nginx/sites-enabled/edox-ops-<slug>Symlink when enabled

Python package map

ModuleRole
cli.pyTyper commands
bootstrap.pyHost package install and nginx.prepare
doctor.pyHost and project readiness
project_ops.pyProject lifecycle, deploy, restore, nginx enable
project_state.pyAtomic JSON state store
project_consistency.pyShared validate/doctor checks
nginx_render.py / nginx_ops.pyVhost template and reload
exec.pySubprocess wrapper (test seam)
validators.pySlug, domain, path safety

See the API reference for generated module documentation.

Deploy model

Publishing uses rsync into a staging directory, then an atomic swap into root_path. Non-empty trees are backed up before --delete sync. Failed deploys can restore from the backup taken in the same run.

Documentation site (this repository)

The edox-ops project dogfoods a dual documentation layout:

  • Docusaurus (website/) — product guides and blog
  • Sphinx (docs-api/) — Python API under /api/

See Documentation in this repo.