docs: add production checklist (#4964)

* docs: added first checklist draft

* docs: formatting

* docs: increase list

* docs: added monitoring and links

* docs: typos and links

* best practise approach

* added missing links

* Update docs/docs/self-hosting/manage/production.md

Co-authored-by: Florian Forster <florian@zitadel.com>

* added checkboxes

* changed name and separated checklist

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* fixing links

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* Update docs/docs/self-hosting/manage/productionchecklist.md

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

Co-authored-by: Florian Forster <florian@zitadel.com>
Co-authored-by: Elio Bischof <eliobischof@gmail.com>
Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
Christian Jakob 2023-01-23 13:39:05 +01:00 committed by GitHub
parent 598a4d2d4b
commit b06878c2a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 1 deletions

View File

@ -1,10 +1,14 @@
--- ---
title: Production Checklist title: Production Setup
--- ---
As soon as you successfully deployed ZITADEL as a proof of concept using one of our [deployment guides](/docs/self-hosting/deploy/overview), As soon as you successfully deployed ZITADEL as a proof of concept using one of our [deployment guides](/docs/self-hosting/deploy/overview),
you are ready to configure ZITADEL for production usage. you are ready to configure ZITADEL for production usage.
## TL;DR
We created a [Production Checklist](./productionchecklist.md) as a technical step by step guide.
## High Availability ## High Availability
We recommend running ZITADEL highly available using an orchestrator that schedules ZITADEL on multiple servers, We recommend running ZITADEL highly available using an orchestrator that schedules ZITADEL on multiple servers,
@ -135,3 +139,4 @@ DefaultInstance:
- Learn how to configure ZITADEL via the [Console user interface](/guides/manage/console/overview). - Learn how to configure ZITADEL via the [Console user interface](/guides/manage/console/overview).
- Probably, you also want to [apply your custom branding](/guides/manage/customize/branding), [hook into certain events](/guides/manage/customize/behavior), [customize texts](/guides/manage/customize/texts) or [add metadata to your users](/guides/manage/customize/user-metadata). - Probably, you also want to [apply your custom branding](/guides/manage/customize/branding), [hook into certain events](/guides/manage/customize/behavior), [customize texts](/guides/manage/customize/texts) or [add metadata to your users](/guides/manage/customize/user-metadata).
- If you want to automatically create ZITADEL resources, you can use the [ZITADEL Terraform Provider](/guides/manage/terraform/basics). - If you want to automatically create ZITADEL resources, you can use the [ZITADEL Terraform Provider](/guides/manage/terraform/basics).

View File

@ -0,0 +1,60 @@
---
title: Production Checklist
---
To apply best practices to your production setup we created a step by step checklist you may wish to follow.
### Infrastructure Configuration
- [ ] make use of configmanagement such as Terraform to provision all of the below
- [ ] use version control to store the provisioning
- [ ] use a secrets manager to save your sensible informations
- [ ] reduce the manual interaction with your platform to an absolute minimum
#### HA Setup
- [ ] High Availability for ZITADEL containers
- [ ] use container orchestrator such as Kubernetes or
- [ ] use serverless architecture such as Knative or a hyperscaler equivalent (e.g. CloudRun from Google)
- [ ] separate `zitadel init` and `zitadel setup` for fast startup times when [scaling](/docs/self-hosting/manage/updating_scaling) ZITADEL
- [ ] High Availability for database
- [ ] follow the [Production Checklist](https://www.cockroachlabs.com/docs/stable/recommended-production-settings.html) for CockroachDB if you selfhost the database or use [CockroachDB cloud](https://www.cockroachlabs.com/docs/cockroachcloud/create-an-account.html)
- [ ] configure backups on a regular basis for the Database
- [ ] test a restore scenario before going live
- [ ] secure database connections from outside your network and/or use an internal subnet for database connectivity
- [ ] High Availability for critical infrastructure components (depending on your setup)
- [ ] Loadbalancer
- [ ] [Reverse Proxies](https://zitadel.com/docs/self-hosting/manage/reverseproxy/reverse_proxy)
- [ ] Web Application Firewall
#### Networking
- [ ] Use a Layer 7 Web Application Firewall to secure ZITADEL that supports **[HTTP/2](/docs/self-hosting/manage/http2)**
- [ ] secure the access by IP if needed
- [ ] secure the access by rate limits for specific endpoints (e.g. API vs frontend) to secure availability on high load. See the [ZITADEL Cloud rate limits](https://zitadel.com/docs/apis/ratelimits) for reference.
- [ ] doublecheck your firewall for IPv6 connectivity and change accordingly
### ZITADEL configuration
- [ ] configure a valid [SMTP Server](/docs/guides/manage/console/instance-settings#smtp) and test emails
- [ ] Add [Custom Branding](/docs/guides/manage/customize/branding) if required
- [ ] configure a valid [SMS Service](/docs/guides/manage/console/instance-settings#sms) such as Twilio if needed
- [ ] configure your privacy policy, terms of service and a help Link if needed
- [ ] secure your [masterkey](https://zitadel.com/docs/self-hosting/manage/configure)
- [ ] declare and apply zitadel configuration using the zitadel terraform [provider](https://github.com/zitadel/terraform-provider-zitadel)
### Security
- [ ] use a FQDN and a trusted valid certificate for external [TLS](/docs/self-hosting/manage/tls_modes#http2) connections
- [ ] make use of different service accounts to secure ZITADEL within your hyperscaler or Kubernetes
- [ ] make use of a CDN service if needed to ease maintainability and firewall/DNS/WAF configuration
- [ ] make use of a [security scanner](https://owasp.org/www-community/Vulnerability_Scanning_Tools) to test your application and cluster
### Monitoring
Use an appropriate monitoring solution to have an overview about your ZITADEL instance. In particular you may want to watch out for things like:
- [ ] CPU and memory of ZITADEL and the database
- [ ] open database connections
- [ ] running instances of ZITADEL and the database
- [ ] latency of requests
- [ ] requests per second
- [ ] requests by URL/endpoint
- [ ] lifetime of TLS certificates
- [ ] ZITADEL and database logs
- [ ] ZITADEL [metrics](/docs/apis/observability/metrics)

View File

@ -271,6 +271,7 @@ module.exports = {
collapsed: false, collapsed: false,
items: [ items: [
"self-hosting/manage/production", "self-hosting/manage/production",
"self-hosting/manage/productionchecklist",
"self-hosting/manage/configure/configure", "self-hosting/manage/configure/configure",
"self-hosting/manage/reverseproxy/reverse_proxy", "self-hosting/manage/reverseproxy/reverse_proxy",
"self-hosting/manage/custom-domain", "self-hosting/manage/custom-domain",