TemplateV4 is a starter app built with .NET, Angular, PostgreSQL, and Docker. It includes sign-in, administration, background jobs, email, file storage, and optional business modules.
The easiest deployment path is Docker Compose on EasyPanel or Coolify. Both platforms run the same four parts:
- Web serves the website and sends API requests to the backend.
- API handles browser requests.
- Worker handles background jobs and email.
- Migrator prepares the database before the app starts.
Check out the intended public repository revision on the deployment server. The server builds Web, API, Worker, and Migrator from this checkout. Private modules are resolved as compiled packages during the coordinated build. Read Modules before configuring a private client.
Follow the guide for your platform:
Connect the platform to the source checkout and use compose.production.yaml.
Keep the checkout and Compose project name stable so updates reuse the same data
volumes.
Copy the names from
deploy/compose-platforms/.env.example
into your platform's environment settings. At minimum, provide:
- the public admin-portal URL;
- a strong database password;
- a production RSA signing key;
- private S3-compatible file storage credentials; and
- real email server credentials.
Keep these values secret. Do not copy development keys, passwords, databases, or storage into production.
Point your public HTTPS domain to the Web service on port 8080. The hosting
platform should manage HTTPS certificates. Do not expose the API, Worker, Migrator,
or PostgreSQL directly to the internet.
PostgreSQL uses one postgres login and POSTGRES_PASSWORD for Migrator, API,
and Worker. For the first deployment, PostgreSQL becomes ready, the Migrator
updates the database, and then API, Worker, and Web start. If migration fails,
fix it before starting the rest of the app.
For a new installation, start with one API instance. Find the one-time setup token
in the protected API logs, open /bootstrap on your website, and create the first
administrator. Confirm that /bootstrap no longer works before adding more API
instances.
Before every update:
- Back up PostgreSQL, file storage, signing keys, and Data Protection keys.
- Check out the intended source revision.
- Disable automatic platform deployments and run
sh deploy/private-module-deploy.shfrom the preserved checkout with the platform's Compose file, environment file, project directory, and project name. The helper stops writers, resolves packages, builds images, backs up PostgreSQL, runs Migrator, and starts the workloads. - Check service health, then reopen the site.
Do not use docker compose down -v; -v removes persistent data volumes.
See Deployment and operations for security, monitoring, TLS, backups, recovery, and troubleshooting.
Install the versions listed in framework.json, plus Docker and
a trusted .NET development HTTPS certificate. Then run:
npm ci --prefix src/TemplateV4.Angular
npm ci --prefix documentation
dotnet tool restore
node tools/framework.mjs devAspire starts the app and its local services. Use the Web address shown by Aspire.
Local keys, Mailpit, and compose.yaml are for development only.