Core Concepts
Project folders
Canopy can use project folders from anywhere on your machine. When needed, it creates an internal link so Docker can mount the folder consistently.
Sites
A site maps a project folder to a local domain and an nginx config. Each site can have its own:
- Domain (e.g.
my-app.test) - Template or linked config
- SSL and CORS settings
Domains and hosts
Canopy adds your site domains to your hosts file so they resolve locally (you’ll be prompted for admin access when needed).
Services
Services are shared across all sites. Canopy runs one Docker stack that includes nginx, PHP, databases, cache, and more. You start them once and reuse them for every project.
Templates
Templates are nginx configs Canopy fills in with your domain and project paths. They cover common setups like Laravel, static sites, SPAs, and proxying to dev servers.
Linked configs
If your project already has its own nginx.conf, you can link it instead of using a template. This keeps your config versioned alongside your code.
Local HTTPS
Canopy generates a local certificate authority (CA) and issues certificates for your .test domains. You’ll trust the CA once in Keychain, and then HTTPS works across all sites.
Service proxies
Many services have web UIs (Mailpit, Grafana, RabbitMQ, etc.). Canopy creates local HTTPS proxy domains (like https://mailpit.test) so you can open them without memorizing ports.
What Canopy manages
Canopy handles:
- nginx site configs
- hosts file entries
- SSL certificates
- service ports and restarts
- Docker container lifecycle
Your project files, frameworks, and application code stay in your repo.
Next up
Learn how to create and manage sites in Creating & Managing Sites.