diff --git a/docs/docs/deployment-self-hosting/core-configuration/initial-setup.md b/docs/docs/deployment-self-hosting/core-configuration/initial-setup.md index 11b4731c61f2..fe695614f316 100644 --- a/docs/docs/deployment-self-hosting/core-configuration/initial-setup.md +++ b/docs/docs/deployment-self-hosting/core-configuration/initial-setup.md @@ -1,10 +1,13 @@ --- -title: "Initial Setup" -description: "How to initialise the instance and create the first superuser." +title: 'Initial Setup' +description: 'How to initialise the instance and create the first superuser.' sidebar_position: 10 --- -The application is built using Django which comes with a handy set of admin pages available at `/admin/`. To access these, you'll need to create a superuser. This user can also be used to access the admin pages or the application itself if you have the frontend application running as well. This user can be created using the instructions below, depending on your installation: +The application is built using Django which comes with a handy set of admin pages available at `/admin/`. To access +these, you'll need to create a superuser. This user can also be used to access the admin pages or the application itself +if you have the frontend application running as well. This user can be created using the instructions below, depending +on your installation: ## Local Installation @@ -15,14 +18,23 @@ python manage.py createsuperuser ## Cloud Environments (e.g. Heroku, ECS) -Once the app has been deployed, you can initialise your installation by accessing `/api/v1/users/config/init/`. This will show a page with a basic form to set up some initial data for the platform. Each of the parameters in the form are described below. +Once the app has been deployed, you can initialise your installation by accessing `/api/v1/users/config/init/`. This +will show a page with a basic form to set up some initial data for the platform. Each of the parameters in the form are +described below. -| Parameter name | Description | -| --------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| Username | A unique username to give the installation superuser | -| Email | The email address to give the installation superuser | -| Password | The password to give the installation superuser | -| Site name | A human-readable name for the site, e.g. 'Flagsmith' | +| Parameter name | Description | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Username | A unique username to give the installation superuser | +| Email | The email address to give the installation superuser | +| Password | The password to give the installation superuser | +| Site name | A human-readable name for the site, e.g. 'Flagsmith' | | Site domain[^1] | The domain that the frontend of the site will be running on, e.g. app.flagsmith.com. This will be used for e.g. password reset emails. | -[^1]: It is important that this is correct as it is used in the password reset emails to construct the reset link. \ No newline at end of file +[^1]: It is important that this is correct as it is used in the password reset emails to construct the reset link. + +## Automated setup + +For repeatable, headless deployments — such as Docker, Kubernetes, or CI/CD pipelines — you can use +[Provisioning](/deployment-self-hosting/core-configuration/provisioning) to declaratively define users, organisations, +projects, and more in YAML files. This replaces the need for manual UI setup and is the recommended approach for +infrastructure-as-code workflows. diff --git a/docs/docs/deployment-self-hosting/core-configuration/provisioning.md b/docs/docs/deployment-self-hosting/core-configuration/provisioning.md new file mode 100644 index 000000000000..21b918405eb2 --- /dev/null +++ b/docs/docs/deployment-self-hosting/core-configuration/provisioning.md @@ -0,0 +1,480 @@ +--- +title: 'Provisioning' +description: 'Declaratively configure your Flagsmith instance using YAML files.' +sidebar_position: 15 +--- + +# Provisioning + +Provisioning lets you declaratively define the desired state of a Flagsmith instance in YAML files. On startup (or on +demand), the `provision` management command reads these files and creates any entities that do not already exist. + +Use provisioning when you want **repeatable, headless setup** in IaC scenarios. For interactive setup, see the +[Initial Setup](/deployment-self-hosting/core-configuration/initial-setup) page. For ongoing flag management via API, +see the [Terraform provider](https://github.com/Flagsmith/terraform-provider-flagsmith). + +## Quick start + +1. Create a YAML file at `provisioning/bootstrap.yaml`: + +```yaml +version: '1.0' + +app_domain: '${APP_DOMAIN:localhost:8000}' + +users: + - email: '${ADMIN_EMAIL:admin@example.com}' + is_superuser: true + +organisations: + - name: '${ORGANISATION_NAME:Default Organisation}' + members: + - email: '${ADMIN_EMAIL:admin@example.com}' + role: ADMIN + +projects: + - name: '${PROJECT_NAME:Default Project}' + organisation: '${ORGANISATION_NAME:Default Organisation}' +``` + +2. Run the provisioner: + +```bash +python manage.py provision +``` + +3. Expected output: + +``` +Created user "admin@example.com". +Please go to the following page and choose a password: http://localhost:8000/password-reset/confirm/…/… +Created organisation "Default Organisation". +Created project "Default Project". +Provisioning complete: 3 created, 0 skipped. +``` + +## Provisioning files + +### YAML format + +Each provisioning file is a YAML document with a required `version` field, optional top-level settings, and one or more +entity lists. Files must use the `.yaml` or `.yml` extension. + +```yaml +version: '1.0' + +app_domain: 'flagsmith.example.com' + +users: + - email: 'admin@example.com' + is_superuser: true + +organisations: + - name: 'My Organisation' + # ... +``` + +### Top-level settings + +| Key | Description | Default | +| ------------ | ---------------------------------------------------------------------------------------------------------------- | ------------------- | +| `version` | Schema version (required). Currently `"1.0"`. | | +| `app_domain` | The domain where the Flagsmith frontend is served. Used for password reset links, invite emails, and other URLs. | `app.flagsmith.com` | + +`app_domain` sets the Django `Site.domain` value. If you have already set the `FLAGSMITH_DOMAIN` environment variable, +that takes precedence. + +### File discovery + +When you point the provisioner at a directory, it reads every `.yaml` / `.yml` file in that directory (non-recursively) +and processes them **in alphabetical order**. Use numeric prefixes to control ordering: + +``` +provisioning/ + 00-users.yaml + 10-organisations.yaml + 20-projects.yaml + 30-features.yaml +``` + +### Environment variable interpolation + +Use `${VAR}` or `${VAR:default}` anywhere in a YAML value. The provisioner resolves these from the process environment +before parsing the YAML. + +```yaml +users: + - email: '${ADMIN_EMAIL:admin@example.com}' # falls back to admin@example.com + is_superuser: true + +organisations: + - name: '${ORGANISATION_NAME}' # required — fails if unset +``` + +### Entity references + +Use string values to reference entities defined elsewhere. The provisioner resolves references after all files have been +loaded, so you can split definitions across files freely. + +```yaml +# In 10-organisations.yaml +organisations: + - name: 'Acme Corp' + +# In 20-projects.yaml +projects: + - name: 'Web App' + organisation: 'Acme Corp' # references the organisation by name + environments: + - name: 'Development' + - name: 'Production' +``` + +## Entity kinds + +The table below summarises every supported entity kind. Required fields are marked with **bold**. All entities support +an optional `description` field. + +| Kind | Idempotency key | Required fields | Optional fields | +| ---------------- | ----------------------- | -------------------------- | -------------------------------------- | +| `user` | `email` | **email** | `is_superuser` | +| `organisation` | `name` | **name** | `members`, `subscription` | +| `project` | `name` + `organisation` | **name**, **organisation** | `environments`, `features`, `segments` | +| `environment` | `name` + `project` | **name** | (nested under `project`) | +| `feature` | `name` + `project` | **name** | `default_enabled`, `initial_value` | +| `segment` | `name` + `project` | **name** | `rules` | +| `master_api_key` | `name` + `organisation` | **name**, **organisation** | `is_admin` | + +### Processing order + +Entities are processed in dependency order regardless of where they appear in the YAML files: + +``` +users → organisations (+ members, subscription) → master_api_keys → projects → environments → segments → features +``` + +### User + +Creates a Flagsmith user account. If `is_superuser` is true, the user is created as a Django superuser with no password; +a password-reset link is printed to the console. + +```yaml +users: + - email: 'admin@example.com' + is_superuser: true + + - email: 'developer@example.com' +``` + +### Organisation + +Creates an organisation and optionally adds members and configures a subscription. + +```yaml +organisations: + - name: 'Acme Corp' + members: + - email: 'admin@example.com' + role: ADMIN + - email: 'developer@example.com' + role: USER + subscription: + plan: 'enterprise' + seats: 20 +``` + +### Project + +Creates a project within an organisation. Environments, features, and segments can be nested inline or defined as +separate top-level entities referencing the project. + +```yaml +projects: + - name: 'Web App' + organisation: 'Acme Corp' + environments: + - name: 'Development' + - name: 'Staging' + - name: 'Production' + features: + - name: 'dark_mode' + default_enabled: false + - name: 'api_url' + initial_value: 'https://api.example.com' + segments: + - name: 'beta_users' + rules: + - type: ALL + conditions: + - property: 'is_beta' + operator: EQUAL + value: 'true' +``` + +### Environment + +Environments are typically nested under a project, but can also be defined at the top level. + +```yaml +environments: + - name: 'QA' + project: 'Web App' +``` + +### Feature + +Features with `default_enabled` act as boolean flags. Features with `initial_value` act as remote config. + +```yaml +features: + - name: 'maintenance_mode' + project: 'Web App' + default_enabled: false + + - name: 'items_per_page' + project: 'Web App' + initial_value: '25' +``` + +### Segment + +Segments define rules with conditions that use operators such as `EQUAL`, `NOT_EQUAL`, `CONTAINS`, `NOT_CONTAINS`, +`GREATER_THAN`, `LESS_THAN`, `GREATER_THAN_INCLUSIVE`, `LESS_THAN_INCLUSIVE`, `REGEX`, `PERCENTAGE_SPLIT`, `IN`, and +`IS_SET` / `IS_NOT_SET`. + +```yaml +segments: + - name: 'enterprise_customers' + project: 'Web App' + rules: + - type: ALL + conditions: + - property: 'plan' + operator: EQUAL + value: 'enterprise' +``` + +### Master API key + +Creates a master API key for an organisation. The key value is **only available at creation time** — only the prefix and +hash are stored. The provisioner prints the full key to the console on creation. + +```yaml +master_api_keys: + - name: 'CI/CD Pipeline Key' + organisation: 'Acme Corp' + is_admin: true +``` + +Output: + +``` +Created master API key "CI/CD Pipeline Key": flg_masXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` + +:::caution + +Store the master API key securely — it cannot be retrieved after provisioning completes. + +::: + +## Management command reference + +```bash +python manage.py provision [OPTIONS] +``` + +| Option | Description | Default | +| -------------- | ----------------------------------------------------------------- | --------------- | +| (no arguments) | Provision from the default directory | `provisioning/` | +| `--directory` | Read all YAML files from the given directory (alphabetical order) | | +| `--file` | Provision from a single YAML file | | +| `--dry-run` | Validate files and print what would be created, without writing | | + +Examples: + +```bash +# Use the default provisioning directory +python manage.py provision + +# Use a custom directory +python manage.py provision --directory /etc/flagsmith/provisioning/ + +# Provision from a single file +python manage.py provision --file provisioning/bootstrap.yaml + +# Validate without making changes +python manage.py provision --dry-run +``` + +### Output format + +The command prints one line per entity action and a summary at the end: + +``` +Created user "admin@example.com". +Skipped organisation "Acme Corp" (already exists). +Created project "Web App". +Created environment "Development" in project "Web App". +Created environment "Production" in project "Web App". +Created feature "dark_mode" in project "Web App". +Provisioning complete: 4 created, 1 skipped. +``` + +## Idempotency + +The provisioner uses **create-only / skip-if-exists** semantics. Each entity kind has an idempotency key (see the +[Entity kinds](#entity-kinds) table). If an entity with the same key already exists, the provisioner skips it and logs a +message. It does **not** update or delete existing entities. + +This means you can safely re-run the provisioner — for example, on every container startup — without duplicating data or +overwriting manual changes. + +| Scenario | Behaviour | +| ---------------------------------- | ------------------------------------------ | +| Entity does not exist | Created | +| Entity already exists (same key) | Skipped | +| Entity was modified after creation | Not overwritten — manual changes preserved | +| Entity was deleted | Re-created on next run | + +## Use case guides + +### Self-hosted bootstrap + +The provisioner replaces the existing `bootstrap` management command for new deployments. The same environment variables +work via interpolation: + +| Existing variable | Provisioning equivalent | +| -------------------------------- | ------------------------------------------- | +| `ADMIN_EMAIL` | `${ADMIN_EMAIL:admin@example.com}` | +| `ORGANISATION_NAME` | `${ORGANISATION_NAME:Default Organisation}` | +| `PROJECT_NAME` | `${PROJECT_NAME:Default Project}` | +| `ALLOW_ADMIN_INITIATION_VIA_CLI` | No longer needed — use `provision` command | + +The Docker entrypoint (`run-docker.sh`) calls `provision` in the `migrate-and-serve` flow. The web-based initialisation +form at `/api/v1/users/config/init/` remains available for interactive setup (controlled by +`ALLOW_ADMIN_INITIATION_VIA_URL`). + +**Default bootstrap file** + +A `provisioning/bootstrap.yaml` file ships with Flagsmith and replicates the current `bootstrap` behaviour: + +```yaml +version: '1.0' + +app_domain: '${APP_DOMAIN:localhost:8000}' + +users: + - email: '${ADMIN_EMAIL:admin@example.com}' + is_superuser: true + +organisations: + - name: '${ORGANISATION_NAME:Default Organisation}' + members: + - email: '${ADMIN_EMAIL:admin@example.com}' + role: ADMIN + +projects: + - name: '${PROJECT_NAME:Default Project}' + organisation: '${ORGANISATION_NAME:Default Organisation}' +``` + +### Kubernetes / Helm + +Mount provisioning YAML files as a ConfigMap or Secret and point the provisioner at the mount path. + +**ConfigMap example:** + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagsmith-provisioning +data: + 00-bootstrap.yaml: | + version: "1.0" + users: + - email: "admin@acme.com" + is_superuser: true + organisations: + - name: "Acme Corp" + members: + - email: "admin@acme.com" + role: ADMIN + projects: + - name: "Production" + organisation: "Acme Corp" + environments: + - name: "Production" + - name: "Staging" +``` + +**Helm values snippet:** + +```yaml +api: + extraVolumes: + - name: provisioning + configMap: + name: flagsmith-provisioning + extraVolumeMounts: + - name: provisioning + mountPath: /etc/flagsmith/provisioning/ + extraEnv: + - name: PROVISIONING_DIRECTORY + value: /etc/flagsmith/provisioning/ +``` + +### Flagsmith on Flagsmith + +Automate the creation of the project and flags needed to run +[Flagsmith on Flagsmith](/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith). + +```yaml +version: '1.0' + +projects: + - name: 'Flagsmith on Flagsmith' + organisation: '${ORGANISATION_NAME:Default Organisation}' + environments: + - name: 'Production' + features: + - name: 'oauth_google' + initial_value: '{"clientId": "${GOOGLE_OAUTH_CLIENT_ID}"}' + - name: 'dark_mode' + default_enabled: true + +master_api_keys: + - name: 'Flagsmith on Flagsmith Key' + organisation: '${ORGANISATION_NAME:Default Organisation}' + is_admin: true +``` + +After provisioning, copy the master API key from the output and set `FLAGSMITH_ON_FLAGSMITH_API_KEY` on the frontend. + +### CI/CD integration + +Provision master API keys for headless pipelines. The provisioner prints the key value at creation time; capture it in +your script: + +```bash +# Provision and capture output +OUTPUT=$(python manage.py provision --file provisioning/ci.yaml) + +# Extract the master API key +API_KEY=$(echo "$OUTPUT" | grep "Created master API key" | grep -oP 'flg_mas\S+') + +# Use the key in subsequent API calls +curl -H "Authorization: Api-Key $API_KEY" \ + http://localhost:8000/api/v1/organisations/ +``` + +## Environment variables reference + +| Variable | Description | Default | +| -------------------------------- | ------------------------------------------------------------------------ | ---------------------- | +| `PROVISIONING_DIRECTORY` | Directory to read provisioning YAML files from | `provisioning/` | +| `ADMIN_EMAIL` | Email for the initial superuser (used via interpolation) | `admin@example.com` | +| `ORGANISATION_NAME` | Name for the initial organisation (used via interpolation) | `Default Organisation` | +| `PROJECT_NAME` | Name for the initial project (used via interpolation) | `Default Project` | +| `ALLOW_ADMIN_INITIATION_VIA_URL` | Enable the web-based initialisation form at `/api/v1/users/config/init/` | `true` | diff --git a/docs/docs/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith.md b/docs/docs/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith.md index d8a06b9d323f..1f9428b21aa4 100644 --- a/docs/docs/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith.md +++ b/docs/docs/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith.md @@ -1,26 +1,48 @@ --- -title: "Running Flagsmith on Flagsmith" -description: "How to configure a self-hosted instance to use its own flags for feature management." +title: 'Running Flagsmith on Flagsmith' +description: 'How to configure a self-hosted instance to use its own flags for feature management.' sidebar_position: 50 --- -Flagsmith uses Flagsmith to control features on the frontend dashboard. If you are self-hosting the platform, you will sometimes see features greyed out, or you may want to disable specific features, e.g. logging in via Google and GitHub. If you are using your own Flagsmith environment, then you will need to have a replica of our flags in order to control access to those features. +Flagsmith uses Flagsmith to control features on the frontend dashboard. If you are self-hosting the platform, you will +sometimes see features greyed out, or you may want to disable specific features, e.g. logging in via Google and GitHub. +If you are using your own Flagsmith environment, then you will need to have a replica of our flags in order to control +access to those features. ## Setup Process -To do this, first create a new project within your self-hosted Flagsmith application. This is the project that we will use to control the features of the self-hosted Flagsmith instance. We will then point the self-hosted frontend dashboard at this Flagsmith project in order to control what features show for your self-hosted Flagsmith instance. +To do this, first create a new project within your self-hosted Flagsmith application. This is the project that we will +use to control the features of the self-hosted Flagsmith instance. We will then point the self-hosted frontend dashboard +at this Flagsmith project in order to control what features show for your self-hosted Flagsmith instance. ## Environment Variables -Once you have created the project, you need to set the following [Frontend](https://github.com/Flagsmith/flagsmith-frontend) environment variables in order to configure this: +Once you have created the project, you need to set the following +[Frontend](https://github.com/Flagsmith/flagsmith-frontend) environment variables in order to configure this: - `FLAGSMITH_ON_FLAGSMITH_API_KEY` - - The Flagsmith Client-side Environment Key we use to manage features - Flagsmith runs on Flagsmith. This will be the API key for the project you created as instructed above. + - The Flagsmith Client-side Environment Key we use to manage features - Flagsmith runs on Flagsmith. This will be the + API key for the project you created as instructed above. - `ENABLE_FLAGSMITH_REALTIME` - Determines whether the Flagsmith on Flagsmith SDK uses Realtime. - `FLAGSMITH_ON_FLAGSMITH_API_URL` - - The API URL which the Flagsmith frontend dashboard should communicate with. This will most likely be the domain name of the Flagsmith API you are self-hosting: Flagsmith runs on Flagsmith. E.g. For our SaaS hosted platform, the variable is `https://edge.api.flagsmith.com/api/v1/`. For example, if you were running everything locally using the standard [docker-compose setup](https://github.com/Flagsmith/flagsmith-docker), you would use `http://localhost:8000/api/v1/` + - The API URL which the Flagsmith frontend dashboard should communicate with. This will most likely be the domain name + of the Flagsmith API you are self-hosting: Flagsmith runs on Flagsmith. E.g. For our SaaS hosted platform, the + variable is `https://edge.api.flagsmith.com/api/v1/`. For example, if you were running everything locally using the + standard [docker-compose setup](https://github.com/Flagsmith/flagsmith-docker), you would use + `http://localhost:8000/api/v1/` ## Verification and Usage -Once you have set this up, you should see the Flagsmith frontend requesting its own flags from the API (you can look in your browser developer console to see this). You can now start creating flags and overriding the default behaviours of the platform. For example, if you wanted to disable Google OAuth authentication, you would create a flag called `oauth_google` and disable it. \ No newline at end of file +Once you have set this up, you should see the Flagsmith frontend requesting its own flags from the API (you can look in +your browser developer console to see this). You can now start creating flags and overriding the default behaviours of +the platform. For example, if you wanted to disable Google OAuth authentication, you would create a flag called +`oauth_google` and disable it. + +## Automated setup with provisioning + +You can automate the Flagsmith-on-Flagsmith setup using +[Provisioning](/deployment-self-hosting/core-configuration/provisioning). A provisioning YAML file can create the +required project, environments, and flags in a single step — see the +[Flagsmith on Flagsmith provisioning guide](/deployment-self-hosting/core-configuration/provisioning#flagsmith-on-flagsmith) +for a complete example. diff --git a/docs/docs/deployment-self-hosting/index.md b/docs/docs/deployment-self-hosting/index.md index 952db1dd7eea..84dd61fcd177 100644 --- a/docs/docs/deployment-self-hosting/index.md +++ b/docs/docs/deployment-self-hosting/index.md @@ -1,16 +1,18 @@ --- -title: "Deployment and Self-hosting Overview" -description: "Learn how to deploy and self-host Flagsmith in your own infrastructure." +title: 'Deployment and Self-hosting Overview' +description: 'Learn how to deploy and self-host Flagsmith in your own infrastructure.' sidebar_position: 1 --- # Deployment and Self-hosting -Welcome to the Flagsmith deployment and self-hosting guide. This section provides comprehensive information on how to deploy and manage your own Flagsmith instance in your infrastructure. +Welcome to the Flagsmith deployment and self-hosting guide. This section provides comprehensive information on how to +deploy and manage your own Flagsmith instance in your infrastructure. ## What is Self-hosting? -Self-hosting Flagsmith allows you to run the complete Flagsmith platform within your own infrastructure, giving you full control over your data, security policies, and deployment environment. This is ideal for organisations that require: +Self-hosting Flagsmith allows you to run the complete Flagsmith platform within your own infrastructure, giving you full +control over your data, security policies, and deployment environment. This is ideal for organisations that require: - **Data sovereignty**: Keep your feature flag data within your own infrastructure - **Custom integrations**: Integrate with your existing tooling and workflows @@ -22,64 +24,97 @@ Self-hosting Flagsmith allows you to run the complete Flagsmith platform within Flagsmith supports multiple deployment methods to suit different infrastructure requirements: ### Quick Start Options -- **[One-click installers](/deployment-self-hosting/hosting-guides/one-click-installers)**: Get up and running quickly with pre-configured deployment options -- **[Docker deployment](/deployment-self-hosting/hosting-guides/docker)**: Containerised deployment using Docker and Docker Compose -- **[Manual installation](/deployment-self-hosting/hosting-guides/manual-installation)**: Step-by-step installation guide for custom deployments + +- **[One-click installers](/deployment-self-hosting/hosting-guides/one-click-installers)**: Get up and running quickly + with pre-configured deployment options +- **[Docker deployment](/deployment-self-hosting/hosting-guides/docker)**: Containerised deployment using Docker and + Docker Compose +- **[Manual installation](/deployment-self-hosting/hosting-guides/manual-installation)**: Step-by-step installation + guide for custom deployments ### Cloud Platform Support + - **[AWS deployment](/deployment-self-hosting/hosting-guides/cloud-providers/aws)**: Deploy on Amazon Web Services -- **[Google Cloud Platform](/deployment-self-hosting/hosting-guides/cloud-providers/google-cloud)**: Deploy on Google Cloud Platform +- **[Google Cloud Platform](/deployment-self-hosting/hosting-guides/cloud-providers/google-cloud)**: Deploy on Google + Cloud Platform - **[Aptible](/deployment-self-hosting/hosting-guides/cloud-providers/aptible)**: Deploy on Aptible platform ### Enterprise Orchestration -- **[Kubernetes and OpenShift](/deployment-self-hosting/hosting-guides/kubernetes-openshift)**: Full Kubernetes deployment with Helm charts and operators -- **[Enterprise Edition](/deployment-self-hosting/enterprise-edition)**: Additional features and capabilities for enterprise deployments + +- **[Kubernetes and OpenShift](/deployment-self-hosting/hosting-guides/kubernetes-openshift)**: Full Kubernetes + deployment with Helm charts and operators +- **[Enterprise Edition](/deployment-self-hosting/enterprise-edition)**: Additional features and capabilities for + enterprise deployments ## Core Configuration Once deployed, you'll need to configure your Flagsmith instance: -- **[Initial Setup](/deployment-self-hosting/core-configuration/initial-setup)**: Create your first superuser and initialise the platform -- **[Environment Variables](/deployment-self-hosting/core-configuration/environment-variables)**: Configure application settings and connections -- **[Email Setup](/deployment-self-hosting/core-configuration/email-setup)**: Configure email notifications and password resets -- **[Caching Strategies](/deployment-self-hosting/core-configuration/caching-strategies)**: Optimise performance with Redis and other caching options -- **[Running Flagsmith on Flagsmith](/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith)**: Use Flagsmith to manage Flagsmith itself +- **[Initial Setup](/deployment-self-hosting/core-configuration/initial-setup)**: Create your first superuser and + initialise the platform +- **[Provisioning](/deployment-self-hosting/core-configuration/provisioning)**: Declaratively configure users, + organisations, projects, and more using YAML files +- **[Environment Variables](/deployment-self-hosting/core-configuration/environment-variables)**: Configure application + settings and connections +- **[Email Setup](/deployment-self-hosting/core-configuration/email-setup)**: Configure email notifications and password + resets +- **[Caching Strategies](/deployment-self-hosting/core-configuration/caching-strategies)**: Optimise performance with + Redis and other caching options +- **[Running Flagsmith on Flagsmith](/deployment-self-hosting/core-configuration/running-flagsmith-on-flagsmith)**: Use + Flagsmith to manage Flagsmith itself ## Scaling and Performance As your usage grows, you'll need to consider scaling and performance: -- **[Sizing and Scaling](/deployment-self-hosting/scaling-and-performance/sizing-and-scaling)**: Understand resource requirements and scaling strategies -- **[Monitoring](/deployment-self-hosting/scaling-and-performance/monitoring)**: Set up monitoring and alerting for your deployment -- **[Asynchronous Task Processor](/deployment-self-hosting/scaling-and-performance/asynchronous-task-processor)**: Configure background task processing -- **[Using InfluxDB for Analytics](/deployment-self-hosting/scaling-and-performance/using-influxdb-for-analytics)**: Set up analytics storage +- **[Sizing and Scaling](/deployment-self-hosting/scaling-and-performance/sizing-and-scaling)**: Understand resource + requirements and scaling strategies +- **[Monitoring](/deployment-self-hosting/scaling-and-performance/monitoring)**: Set up monitoring and alerting for your + deployment +- **[Asynchronous Task Processor](/deployment-self-hosting/scaling-and-performance/asynchronous-task-processor)**: + Configure background task processing +- **[Using InfluxDB for Analytics](/deployment-self-hosting/scaling-and-performance/using-influxdb-for-analytics)**: Set + up analytics storage - **[Load Testing](/deployment-self-hosting/scaling-and-performance/load-testing)**: Test your deployment under load ## Administration and Maintenance Ongoing administration tasks to keep your deployment running smoothly: -- **[Using the Django Admin](/deployment-self-hosting/administration-and-maintenance/using-the-django-admin)**: Access and manage your deployment through the admin interface -- **[Upgrades and Rollbacks](/deployment-self-hosting/administration-and-maintenance/upgrades-and-rollbacks)**: Safely upgrade your deployment and roll back if needed -- **[Troubleshooting](/deployment-self-hosting/administration-and-maintenance/troubleshooting)**: Common issues and their solutions +- **[Using the Django Admin](/deployment-self-hosting/administration-and-maintenance/using-the-django-admin)**: Access + and manage your deployment through the admin interface +- **[Upgrades and Rollbacks](/deployment-self-hosting/administration-and-maintenance/upgrades-and-rollbacks)**: Safely + upgrade your deployment and roll back if needed +- **[Troubleshooting](/deployment-self-hosting/administration-and-maintenance/troubleshooting)**: Common issues and + their solutions ## Edge Proxy For high-performance deployments: -- **[Edge Proxy](/deployment-self-hosting/edge-proxy)**: Deploy edge proxies for improved performance and reduced latency +- **[Edge Proxy](/deployment-self-hosting/edge-proxy)**: Deploy edge proxies for improved performance and reduced + latency ## Getting Started To get started with self-hosting Flagsmith: -1. **Choose your deployment method**: Start with [Docker](/deployment-self-hosting/hosting-guides/docker) for a quick setup, or use [one-click installers](/deployment-self-hosting/hosting-guides/one-click-installers) for cloud platforms -2. **Configure your environment**: Set up [environment variables](/deployment-self-hosting/core-configuration/environment-variables) and [email configuration](/deployment-self-hosting/core-configuration/email-setup) -3. **Initialise your instance**: Create your first superuser using the [initial setup guide](/deployment-self-hosting/core-configuration/initial-setup) -4. **Scale as needed**: Monitor your deployment and scale using the [scaling guides](/deployment-self-hosting/scaling-and-performance/sizing-and-scaling) +1. **Choose your deployment method**: Start with [Docker](/deployment-self-hosting/hosting-guides/docker) for a quick + setup, or use [one-click installers](/deployment-self-hosting/hosting-guides/one-click-installers) for cloud + platforms +2. **Configure your environment**: Set up + [environment variables](/deployment-self-hosting/core-configuration/environment-variables) and + [email configuration](/deployment-self-hosting/core-configuration/email-setup) +3. **Initialise your instance**: Create your first superuser using the + [initial setup guide](/deployment-self-hosting/core-configuration/initial-setup) +4. **Scale as needed**: Monitor your deployment and scale using the + [scaling guides](/deployment-self-hosting/scaling-and-performance/sizing-and-scaling) ## Support -If you encounter issues during deployment or need assistance with enterprise features, please refer to our [troubleshooting guide](/deployment-self-hosting/administration-and-maintenance/troubleshooting) or contact our support team. +If you encounter issues during deployment or need assistance with enterprise features, please refer to our +[troubleshooting guide](/deployment-self-hosting/administration-and-maintenance/troubleshooting) or contact our support +team. -For enterprise deployments with additional features and support, consider the [Enterprise Edition](/deployment-self-hosting/enterprise-edition). \ No newline at end of file +For enterprise deployments with additional features and support, consider the +[Enterprise Edition](/deployment-self-hosting/enterprise-edition).