snapshot of https://github.com/mattermost/mattermost.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "Mattermost Agents Admin Guide"
|
||||
---
|
||||
import AgentsAdminGuideBody from '../../agents/docs/_admin_guide_partial.mdx';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
<AgentsAdminGuideBody />
|
||||
|
||||
## Additional configuration guides
|
||||
|
||||
- [Configure Agents with AWS Bedrock](/agents/docs/aws_bedrock_setup)
|
||||
|
||||
<Tip>
|
||||
|
||||
- To access the contents of files using Agents, a Mattermost system admin must [enable document search by content](/administration-guide/configure/environment-configuration-settings#enable-document-search-by-content) in the System Console.
|
||||
- Looking for demo? [Try it yourself](https://mattermost.com/demo/copilot/)!
|
||||
- Download the [Mattermost datasheet](https://mattermost.com/mattermost-copilot-datasheet/) to learn more about integrating with industry-leading large language models (LLMs).
|
||||
- Mattermost Agents is formerly known as Mattermost Copilot.
|
||||
|
||||
</Tip>
|
||||
File diff suppressed because it is too large
Load Diff
200
docs/main/administration-guide/configure/azure-blob-storage.mdx
Normal file
200
docs/main/administration-guide/configure/azure-blob-storage.mdx
Normal file
@@ -0,0 +1,200 @@
|
||||
---
|
||||
title: "Configure Azure Blob Storage as the Mattermost file store"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Mattermost can store user uploads -- attachments, profile images, plugin assets, emoji, compliance exports -- in an Azure Storage account. This guide walks an administrator through the steps to provision the Azure side and point a Mattermost server at it via the System Console.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- An Azure subscription with a storage account and a container already created.
|
||||
- Either the Azure portal, or the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) (`az`) installed and signed in with `az login`. Both are documented below.
|
||||
- A Mattermost deployment (v11.9 or later) with System Console access for a System Admin account.
|
||||
|
||||
If you plan to migrate existing files from another backend, take a backup of the current storage location (S3 bucket, local disk, etc.) before changing the configuration. Switching the file driver does not migrate existing files automatically.
|
||||
|
||||
## Step 1: Choose an authentication mode
|
||||
|
||||
Mattermost supports two ways for the server to authenticate to Azure. Pick the one that fits how the server runs:
|
||||
|
||||
- **Shared key**: the server signs each request with the [Storage Account access key](/administration-guide/configure/environment-configuration-settings#azure-storage-account-key). Works anywhere Mattermost runs (on-premises, non-Azure cloud, local development) because it does not depend on the host having an Azure identity. The trade-off is that the key is a long-lived secret stored in `config.json`.
|
||||
- **Default credential (Microsoft Entra ID)**: the server obtains a token from Microsoft Entra ID and signs requests with it. No long-lived secret in Mattermost configuration. This is the recommended mode for deployments running on Azure, where the host environment already provides an identity (managed identity on Azure VM / App Service / AKS, workload identity for federated workloads, or a service principal).
|
||||
|
||||
The Azure-side setup differs slightly between the two modes. Follow the subsection that matches your choice; you can switch modes later by changing the [Azure authentication](/administration-guide/configure/environment-configuration-settings#azure-authentication) setting in the System Console.
|
||||
|
||||
### Option A: Shared key
|
||||
|
||||
Retrieve the Storage Account access key.
|
||||
|
||||
**Azure portal**
|
||||
|
||||
1. Open the storage account, then **Security + networking** > **Access keys**.
|
||||
2. Select **Show** next to `key1` (or `key2`) and copy the value.
|
||||
|
||||
**Azure CLI**
|
||||
|
||||
```bash
|
||||
az storage account keys list \
|
||||
--account-name acmemattermost \
|
||||
--resource-group mm-prod-files \
|
||||
--query "[0].value" -o tsv
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
Treat the shared key as a secret -- anyone with it has full access to the storage account (every container and all data it holds). A shared key can't be scoped to a single container, to specific operations, or to a resource group; if you need least-privilege access, use [Option B: Default credential (Microsoft Entra ID)](#option-b-default-credential-microsoft-entra-id) with a container-scoped **Storage Blob Data Contributor** role instead. Azure provides two keys so you can rotate without downtime: update Mattermost to `key2`, regenerate `key1`, then swap on the next rotation cycle. Plan a rotation cadence that matches your organisation's policy.
|
||||
|
||||
</Note>
|
||||
|
||||
### Option B: Default credential (Microsoft Entra ID)
|
||||
|
||||
The server uses `DefaultAzureCredential` from the Azure SDK, which discovers a working identity at runtime in this order. The first source that returns a token is used.
|
||||
|
||||
1. `EnvironmentCredential` -- service-principal environment variables.
|
||||
2. `WorkloadIdentityCredential` -- federated workload identity.
|
||||
3. `ManagedIdentityCredential` -- the platform-provided managed identity.
|
||||
4. `AzureCLICredential` -- the signed-in `az` session, useful for local development.
|
||||
|
||||
Whichever identity the SDK selects, **that** identity needs **Storage Blob Data Contributor** (or a custom role with the equivalent `read/write/list/delete` data-plane actions) on the storage account or container. Without it, `TestConnection` returns `AuthorizationPermissionMismatch`.
|
||||
|
||||
Pick the identity source that matches the host:
|
||||
|
||||
| Host | Identity source |
|
||||
|:---|:---|
|
||||
| Azure VM, App Service, AKS, Container Apps | Assign a **system-assigned** or **user-assigned managed identity** to the compute resource. `DefaultAzureCredential` resolves to `ManagedIdentityCredential` with no extra configuration. For user-assigned identities, set `AZURE_CLIENT_ID` in the server's environment so the SDK picks the right one. |
|
||||
| AKS with workload-identity federation | Annotate the Mattermost `ServiceAccount` with the client ID and configure the OIDC issuer per the [AKS workload identity guide](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview). `DefaultAzureCredential` resolves to `WorkloadIdentityCredential`. |
|
||||
| Non-Azure host or container | Create a service principal and set `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, and `AZURE_CLIENT_SECRET` (or `AZURE_CLIENT_CERTIFICATE_PATH`) in the server's environment. `DefaultAzureCredential` resolves to `EnvironmentCredential`. |
|
||||
| Local development on an admin's workstation | Sign in with `az login`. `DefaultAzureCredential` resolves to `AzureCLICredential`. |
|
||||
|
||||
To prepare the account you're going to use, you'll need to assign the role from the Azure Portal or using the Azure CLI, as shown below (substitute the principal of the identity Mattermost will authenticate as):
|
||||
|
||||
```bash
|
||||
STORAGE_ACCOUNT_ID=$(az storage account show \
|
||||
--name acmemattermost \
|
||||
--resource-group mm-prod-files \
|
||||
--query id -o tsv)
|
||||
|
||||
# For a managed identity (system-assigned on a VM/App Service/AKS pod):
|
||||
az role assignment create \
|
||||
--assignee-object-id "<principalId-of-the-managed-identity>" \
|
||||
--assignee-principal-type ServicePrincipal \
|
||||
--role "Storage Blob Data Contributor" \
|
||||
--scope "$STORAGE_ACCOUNT_ID"
|
||||
|
||||
# For a service principal:
|
||||
az role assignment create \
|
||||
--assignee "<appId-of-the-service-principal>" \
|
||||
--role "Storage Blob Data Contributor" \
|
||||
--scope "$STORAGE_ACCOUNT_ID"
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
Granting the role requires **User Access Administrator** or **Owner** on the storage account; `Contributor` is not enough. Plan to have an administrator with that role run the `az role assignment create` step. If you scope the role to a single container instead of the whole storage account, replace `--scope "$STORAGE_ACCOUNT_ID"` with `--scope "$STORAGE_ACCOUNT_ID/blobServices/default/containers/<container>"`.
|
||||
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
|
||||
Azure RBAC role assignments can take 30-120 seconds to propagate. If the first `TestConnection` returns `AuthorizationPermissionMismatch` immediately after the role assignment, wait a minute and retry before assuming a misconfiguration.
|
||||
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
|
||||
Mattermost holds the credential, not the token. Microsoft Entra ID access tokens are short-lived, but the Azure SDK caches each token and refreshes it automatically before it expires, so routine token rotation never interrupts file access while the server is running. Access stops only if the underlying identity or its authorization changes or is removed.
|
||||
|
||||
</Note>
|
||||
|
||||
## Step 2: Configure Mattermost
|
||||
|
||||
Sign in as a System Admin and open **System Console > Environment > File Storage**.
|
||||
|
||||
1. **File storage system**: select **Azure Blob Storage**. The Azure-specific fields appear and the S3/local fields are hidden.
|
||||
2. **Azure cloud**: select the Azure cloud that hosts the storage account:
|
||||
|
||||
- **Azure Commercial** (default): the global Azure cloud (`{account}.blob.core.windows.net`). Only the storage account name is required.
|
||||
- **Azure Government**: the US Government cloud (`{account}.blob.core.usgovcloudapi.net`). Only the storage account name is required.
|
||||
- **Custom Endpoint**: any other Azure cloud (for example, Azure China), an Azurite emulator, or a reverse proxy. Provide the full Blob service URL via **Azure endpoint** below.
|
||||
|
||||
3. **Azure Storage account**: the storage account name (for example, `acmemattermost`).
|
||||
4. **Azure container**: the container name (for example, `mattermost`).
|
||||
5. **Azure path prefix**: optional. Set this if you want Mattermost to write under a sub-path inside the container, for example `prod/`. Leave empty to use the container root.
|
||||
6. **Azure authentication**: select the mode you set up in step 1:
|
||||
|
||||
- **Shared key** (default): Mattermost signs each request with the Storage Account access key. Choose this if you completed [Option A: Shared key](#option-a-shared-key).
|
||||
- **Default credential (Microsoft Entra ID)**: Mattermost authenticates as the identity provided by the host environment. Choose this if you completed [Option B: Default credential (Microsoft Entra ID)](#option-b-default-credential-microsoft-entra-id). The **Azure Storage account key** field below is hidden because the access key is not used in this mode.
|
||||
|
||||
7. **Azure Storage account key** (visible only when **Azure authentication** is **Shared key**): paste the shared key from [Option A: Shared key](#option-a-shared-key).
|
||||
8. **Azure endpoint** (visible only when **Azure cloud** is set to **Custom Endpoint**): the full Blob service URL, including scheme and storage account. Mattermost passes this URL to the Azure SDK unchanged, so the storage account must already be embedded in the hostname (vhost-style, for example `https://acmemattermost.blob.core.chinacloudapi.cn/`) or in the path (path-style, for example `http://localhost:10000/devstoreaccount1/` for Azurite). The chosen authentication mode signs against the host this URL points at, so the host must serve the storage account named above.
|
||||
9. **Enable secure Azure Blob Storage connections** (visible only when **Azure cloud** is **Azure Commercial** or **Azure Government**): keep this enabled (the default). The Custom Endpoint cloud determines the scheme from the **Azure endpoint** URL, so this toggle is hidden for that mode.
|
||||
10. **Azure request timeout (milliseconds)**: default is `30000` (30 seconds). Increase only if your network needs more time for large objects.
|
||||
|
||||
Save the settings and click **Test Connection**. Mattermost issues a no-op write/read/delete against the configured container using the credentials submitted in the form. A green `Connection was successful` message confirms the credentials, container name, and endpoint all work. A red error message includes the underlying reason; common ones are listed in [Troubleshooting](#troubleshooting).
|
||||
|
||||
<Warning>
|
||||
|
||||
**Restart required.** The Mattermost server caches the file storage backend at startup and does not re-create it when the file storage configuration changes. After saving, restart every Mattermost server in the deployment (`systemctl restart mattermost`, recycle the container, or roll the deployment in your cluster) for the new driver to take effect. **Test Connection** works before the restart because it builds a temporary backend from the submitted form values.
|
||||
|
||||
</Warning>
|
||||
|
||||
<Warning>
|
||||
|
||||
Switching the file driver does **not** migrate existing files. If you are moving an existing deployment from Amazon S3, see [Migrate existing files from Amazon S3](#migrate-existing-files-from-amazon-s3) below before changing the driver. For migrations from local disk, copy the directory contents into the Azure container using `azcopy` ([docs](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10)). In either case, files uploaded before the switch are unreachable once the driver changes unless they are present at the same key in the destination.
|
||||
|
||||
</Warning>
|
||||
|
||||
## Step 3: Verify
|
||||
|
||||
1. After the restart, reload the System Console or any channel.
|
||||
2. Upload an attachment in any channel. A small image is a good test, because Mattermost stores three blobs for an image (original, preview, thumbnail), which exercises the upload path more thoroughly than a plain file.
|
||||
3. The post should render the attachment and preview as usual.
|
||||
4. In the Azure portal, open the container and confirm new blobs appeared under the path `<YYYYMMDD>/teams/<team>/channels/<channel>/users/<user>/<file_id>/` (the same layout the local-disk and S3 backends use). For an image you will see `<name>.<ext>`, `<name>_preview.<ext>`, and `<name>_thumb.<ext>`.
|
||||
|
||||
## Migrate existing files from Amazon S3
|
||||
|
||||
If you are switching an existing deployment from S3 to Azure Blob Storage, the file content must be present in the Azure container at the same key Mattermost would have written to. Mattermost itself does not move files between backends, so this is an out-of-band copy that you run once before flipping the driver.
|
||||
|
||||
Mattermost writes blobs at the same relative path on every backend:
|
||||
|
||||
```text
|
||||
{path-prefix}/{YYYYMMDD}/teams/{teamID}/channels/{channelID}/users/{userID}/{fileID}/{filename}
|
||||
```
|
||||
|
||||
This means a straight key-for-key copy from the S3 bucket to the Azure container is sufficient. If you use `AmazonS3PathPrefix` on the S3 side, set `AzurePathPrefix` to the same value on the Azure side (or rewrite the prefix during the copy).
|
||||
|
||||
There are multiple ways to accomplish this. The recommended way is using the [Azure Storage Mover service](https://learn.microsoft.com/en-us/azure/storage-mover/cloud-to-cloud-migration), which provides a cloud-to-cloud migration from Amazon S3 to Azure Blob Storage.
|
||||
|
||||
There are alternative tools that can also help, like [rclone](https://rclone.org/azureblob/) and [AzCopy](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-s3).
|
||||
|
||||
## (Optional) Configure the export backend
|
||||
|
||||
Compliance and data exports can be stored separately from regular file uploads. The **File Storage (Exports)** section directly below **File Storage** in the System Console mirrors the fields above and accepts the same Azure credentials. Customers typically point exports at a different container (or a different account) so the export retention policy can differ from regular uploads. The export target is an independent backend with its own driver and credentials, so it doesn't have to use the same provider as regular uploads; e.g., you can keep uploads on Amazon S3 and send exports to Azure Blob Storage, or the reverse.
|
||||
|
||||
See [Enable dedicated export filestore target](/administration-guide/configure/environment-configuration-settings#enable-dedicated-export-filestore-target) for the full list of `ExportAzure*` keys.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Symptom | Likely cause |
|
||||
|:---|:---|
|
||||
| `AuthenticationFailed` on **Test Connection** | When **Azure authentication** is **Shared key**: wrong account name or shared key. Confirm both in the **Access keys** blade of the Azure portal. When **Azure authentication** is **Default credential**: no identity source was available -- the host has no managed identity, the workload-identity federation is not set up, and no `AZURE_TENANT_ID` / `AZURE_CLIENT_ID` / `AZURE_CLIENT_SECRET` environment variables are set. |
|
||||
| `AuthorizationPermissionMismatch` on **Test Connection** | Only applies when **Azure authentication** is **Default credential**. The identity the SDK selected does not hold a data-plane role on the storage account. Grant **Storage Blob Data Contributor** to that identity per [Option B: Default credential (Microsoft Entra ID)](#option-b-default-credential-microsoft-entra-id), then wait 30-120 seconds for the role assignment to propagate. |
|
||||
| `ContainerNotFound` | Container name is wrong or was created under a different storage account. |
|
||||
| `connection refused` or TLS errors | When **Azure cloud** is **Custom Endpoint**, the **Azure endpoint** URL points at a host that isn't reachable or uses the wrong scheme. When **Azure cloud** is **Azure Commercial** or **Azure Government**, **Enable secure Azure Blob Storage connections** is disabled in front of a TLS-only destination. |
|
||||
| **Test Connection** succeeds but uploads in channels fail | Check **System Console > Reporting > Server Logs** for the Azure error returned by the SDK. The most common cause is a forgotten server restart after **Save**. |
|
||||
| Files uploaded before the switch are no longer visible | The existing files are still on the previous backend. For S3 migrations, follow [Migrate existing files from Amazon S3](#migrate-existing-files-from-amazon-s3) to copy the bucket into the Azure container at matching keys. For other backends, copy the contents into the Azure container with `azcopy` (or equivalent) and confirm the destination path matches the layout Mattermost uses. |
|
||||
|
||||
## Reference
|
||||
|
||||
Each Azure setting is documented in detail in [Environment configuration settings](/administration-guide/configure/environment-configuration-settings#file-storage):
|
||||
|
||||
- [File storage system](/administration-guide/configure/environment-configuration-settings#file-storage-system) (`FileSettings.DriverName`)
|
||||
- [Azure Storage account](/administration-guide/configure/environment-configuration-settings#azure-storage-account) (`FileSettings.AzureStorageAccount`)
|
||||
- [Azure container](/administration-guide/configure/environment-configuration-settings#azure-container) (`FileSettings.AzureContainer`)
|
||||
- [Azure path prefix](/administration-guide/configure/environment-configuration-settings#azure-path-prefix) (`FileSettings.AzurePathPrefix`)
|
||||
- [Azure authentication](/administration-guide/configure/environment-configuration-settings#azure-authentication) (`FileSettings.AzureAuthMode`)
|
||||
- [Azure Storage account key](/administration-guide/configure/environment-configuration-settings#azure-storage-account-key) (`FileSettings.AzureAccessKey`)
|
||||
- [Azure cloud](/administration-guide/configure/environment-configuration-settings#azure-cloud) (`FileSettings.AzureCloud`)
|
||||
- [Azure endpoint](/administration-guide/configure/environment-configuration-settings#azure-endpoint) (`FileSettings.AzureEndpoint`)
|
||||
- [Enable secure Azure Blob Storage connections](/administration-guide/configure/environment-configuration-settings#enable-secure-azure-blob-storage-connections) (`FileSettings.AzureSSL`)
|
||||
- [Azure request timeout](/administration-guide/configure/environment-configuration-settings#azure-request-timeout) (`FileSettings.AzureRequestTimeoutMilliseconds`)
|
||||
64
docs/main/administration-guide/configure/bleve-search.mdx
Normal file
64
docs/main/administration-guide/configure/bleve-search.mdx
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: "Bleve search"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
<Important>
|
||||
|
||||
**From Mattermost v11, Bleve search has been deprecated.**
|
||||
|
||||
- **For v11.0 and later**: Use [Elasticsearch](/deployment-guide/scale/elasticsearch-setup) or [OpenSearch](/deployment-guide/scale/opensearch-setup) for [enterprise search](/deployment-guide/scale/enterprise-search) capabilities
|
||||
- **For pre-v11.0 deployments**: This documentation remains relevant for existing installations that continue using Bleve.
|
||||
|
||||
</Important>
|
||||
|
||||
Bleve is a search engine that uses Lucene-style full-text search and indexing. This style of search and indexing helps overcome limitations of the default database search such as challenges with characters and advanced search capabilities.
|
||||
|
||||
<Note>
|
||||
|
||||
Experimental Bleve search uses the scorch index type on newly-created indexes. This new index type features efficiency improvements and indexes that use significantly less disk space. Go to **System Console \> Experimental \> Bleve** and select **Purge Index** to run a purge operation. When that's complete, select **Index Now** to reindex. Bleve remains compatible with existing indexes, so currently indexed data will continue to work if a purge and reindex isn't run.
|
||||
|
||||
</Note>
|
||||
|
||||
## Configuring Bleve in Mattermost
|
||||
|
||||
<Note>
|
||||
|
||||
The following steps are only valid for Mattermost versions prior to v11.0. For v11.0 and later, consider using Elasticsearch or OpenSearch instead.
|
||||
|
||||
</Note>
|
||||
|
||||
Follow these steps to configure the Mattermost server to use Bleve and generate required indexes. Once the configuration is saved, new posts made to the database will be automatically indexed with Bleve.
|
||||
|
||||
**Note:** During indexing, search results may be incomplete until the indexing job is complete.
|
||||
|
||||
1. Open **System Console \> Experimental \> Bleve**.
|
||||
2. Set **Enable Bleve Indexing** to **true** to enable the other settings on the page.
|
||||
3. Set the directory path to use for storing Bleve indexes (e.g.: `/var/opt/mattermost/bleveindexes`). The user running Mattermost should have permissions to access the directory. See our [configuration settings](/administration-guide/configure/deprecated-configuration-settings#bleve-settings) documentation for details.
|
||||
4. Save the configuration.
|
||||
5. Select **Index Now**. All users, channels, and posts in the database will be indexed oldest to newest.
|
||||
6. Set **Enable Bleve for search queries** to **true**.
|
||||
7. Set **Enable Bleve for autocomplete queries** to **true**.
|
||||
|
||||
<Note>
|
||||
|
||||
Search results for files shared before upgrading to Mattermost Server v5.35 may be incomplete until an extraction command is run using the [mmctl](/administration-guide/manage/mmctl-command-line-tool#mmctl-extract). After running this command, the search index must be rebuilt. Go to **System Console \> Experimental \> Bleve \> Bulk Indexing**, then select **Index Now** to rebuild the search index to include older file contents.
|
||||
|
||||
</Note>
|
||||
|
||||
## Using Bleve search
|
||||
|
||||
<Note>
|
||||
|
||||
This section applies only to Mattermost versions prior to v11.0.
|
||||
|
||||
</Note>
|
||||
|
||||
The following conditions are applied when using Bleve search:
|
||||
|
||||
- **Unquoted terms:** Search terms that contain non-alphanumeric characters/special characters outside of quotation marks are removed. For example, using `abcd "**" && abc` as a search term will return results for a search for `abcd "**" abc` as the `&&` characters weren't within the quotation marks.
|
||||
- **Wildcard search:** Wildcard search (e.g., `abc*`) is supported.
|
||||
|
||||
## How does search work with Bleve disabled?
|
||||
|
||||
Mattermost performs full text searches against the database unless you have an [Enterprise license](/product-overview/editions-and-offerings#mattermost-enterprise) and [enterprise search](/deployment-guide/scale/enterprise-search) configured.
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: "Cloud workspace subscription, billing, and account settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
Review and manage the following aspects of your Mattermost cloud-based deployment by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **Billing and Account**:
|
||||
|
||||
- Access billing history
|
||||
- Manage the [product subscription](/product-overview/cloud-subscriptions) and account details for your Mattermost Cloud deployment.
|
||||
- Review trial details.
|
||||
- Talk to a [Mattermost Expert](https://mattermost.com/contact-sales/) for assistance.
|
||||
@@ -0,0 +1,579 @@
|
||||
---
|
||||
title: "Compliance configuration settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="ent-plus" />
|
||||
|
||||
Review and manage the following compliance configuration options in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **Compliance**:
|
||||
|
||||
- [Data Retention Policies](#data-retention-policies)
|
||||
- [Compliance Export](/administration-guide/comply/compliance-export)
|
||||
- [Compliance Monitoring](#compliance-monitoring)
|
||||
- [Custom Terms of Service](#custom-terms-of-service)
|
||||
|
||||
<Tip>
|
||||
|
||||
System admins managing a self-hosted Mattermost deployment can edit the `config.json` file as described in the following tables. Each configuration value below includes a JSON path to access the value programmatically in the `config.json` file using a JSON-aware tool. For example, the `MessageRetentionHours` value is under `DataRetentionSettings`.
|
||||
|
||||
- If using a tool such as [jq](https://stedolan.github.io/jq/), you'd enter: `cat config/config.json | jq '.DataRetentionSettings.MessageRetentionHours'`
|
||||
- When working with the `config.json` file manually, look for an object such as `DataRetentionSettings`, then within that object, find the key `MessageRetentionHours`.
|
||||
|
||||
</Tip>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Data retention policies
|
||||
|
||||
Changes to properties in this section require a server restart before taking effect.
|
||||
|
||||
<Warning>
|
||||
|
||||
- Once a message or a file is deleted, the action is irreversible. Please be careful when setting up a custom data retention policy.
|
||||
- From Mattermost v9.5, data retention removes Elasticsearch indexes based on the day of the retention cut-off time.
|
||||
|
||||
</Warning>
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Compliance \> Data Retention Policies**.
|
||||
|
||||
### Global retention policy for messages
|
||||
|
||||
Set how long Mattermost keeps messages across all teams and channels. This value is not used for any teams and channels that have a custom retention policy applied . Requires the [global retention policy for messages](/administration-guide/configure/compliance-configuration-settings#global-retention-policy-for-messages) configuration setting to be set to `true`.
|
||||
|
||||
By default, messages are kept forever. If **Hours**, **Days**, or **Years** is chosen, set how many hours, days, or years messages are kept in Mattermost. Messages older than the duration you set will be deleted nightly. The minimum message retention time is one hour.
|
||||
|
||||
The global retention time for messages can be superseded on a team or channel level by creating custom policies with unique post retention times See the [Custom retention policy](#custom-retention-policy) section below for details.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"MessageRetentionHours": 1</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
From Mattermost v9.5, `MessageRetentionDays` has been deprecated in favor of `MessageRetentionHours`. See [deprecated configuration settings](/administration-guide/configure/deprecated-configuration-settings) for details.
|
||||
|
||||
</Note>
|
||||
|
||||
### Global retention policy for files
|
||||
|
||||
Set how long Mattermost keeps files across all teams and channels. Custom policies on team and channel level don't apply to file attachments. The global retention time for files will be used even if a custom policy for messages is in place. Requires the [global retention policy for files](/administration-guide/configure/compliance-configuration-settings#global-retention-policy-for-files) configuration setting to be set to `true`.
|
||||
|
||||
By default, files are kept forever. If **Hours**, **Days**, or **Years** is chosen, set how many hours, days, or years files are kept in Mattermost. Files older than the duration you set will be deleted nightly. The minimum file retention time is one hour.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"FileRetentionHours": 1</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
From Mattermost v9.5, `FileRetentionDays` has been deprecated in favor of `FileRetentionHours`. See [deprecated configuration settings](/administration-guide/configure/deprecated-configuration-settings) for details.
|
||||
|
||||
</Note>
|
||||
|
||||
### Preserve pinned posts
|
||||
|
||||
From Mattermost v10.10, controls whether pinned posts are preserved when data retention policies delete messages. When enabled, pinned posts won't be deleted by data retention policies, even if they exceed the configured retention period.
|
||||
|
||||
**True**: Pinned posts are preserved and won't be deleted by data retention policies.
|
||||
|
||||
**False**: **(Default)** Pinned posts are deleted according to the configured data retention policy.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"DataRetentionSettings.PreservePinnedPosts": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
- This global configuration setting must be enabled with mmctl using the [mmctl config set](/administration-guide/manage/mmctl-command-line-tool#mmctl-config-set) command.
|
||||
- This configuration setting applies to team and channel policies as well as data retention, and can't be overridden in those more granular team or channel policies.
|
||||
- Files attached to the pinned message aren't preserved.
|
||||
- Only the pinned post is preserved. If it's attached to a thread or if it's the root post of a thread, the other threaded messages aren't preserved.
|
||||
|
||||
</Note>
|
||||
|
||||
### Custom retention policy
|
||||
|
||||
Set how long Mattermost keeps messages across specific teams and channels by specifying a name for the custom retention policy, setting a duration value in days or years, and specifying the teams and channels that will follow this policy. The attachment retention time cannot be set on custom policy levels and the global retention time for attachments is always applied.
|
||||
|
||||
### Data deletion time
|
||||
|
||||
Set the start time of the daily scheduled data retention job. Choose a time when fewer people are using your system. Must be a 24-hour time stamp in the form `HH:MM`.
|
||||
|
||||
This setting is based on the local time of the server.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"DeletionJobStartTime": "02:00"</code> with 24-hour timestamp input in the form <code>"HH:MM"</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Run deletion job now
|
||||
|
||||
Start a Data Retention deletion job immediately. You can monitor the status of the job in the data deletion job table within the Policy Log section.
|
||||
|
||||
### Time between batches
|
||||
|
||||
The time in milliseconds between batches processed during data retention job execution. This setting helps control the rate at which data is deleted to reduce database load during retention operations.
|
||||
|
||||
Default is 100 milliseconds. Possible values are any non-negative integer (≥ 0).
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"TimeBetweenBatchesMilliseconds": 100</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Retention IDs batch size
|
||||
|
||||
The number of retention IDs to process in a single batch during data retention job execution. This setting controls how many items are processed together for optimal performance.
|
||||
|
||||
Default is 100. Possible values are any non-negative integer (≥ 0).
|
||||
|
||||
<table style={{width: '90%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '90%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"RetentionIdsBatchSize": 100</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Boards retention days
|
||||
|
||||
Set how long Mattermost keeps boards data. When set to a value greater than 0, boards data older than the specified number of days will be deleted during retention job execution only when boards deletion is enabled via `EnableBoardsDeletion`.
|
||||
|
||||
Default is 365 days. Possible values are any non-negative integer (≥ 0).
|
||||
|
||||
<table style={{width: '85%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '85%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"BoardsRetentionDays": 365</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable message deletion
|
||||
|
||||
**True**: Message deletion is enabled during data retention job execution.
|
||||
|
||||
**False**: Messages are not deleted during data retention job execution.
|
||||
|
||||
<table style={{width: '97%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '96%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableMessageDeletion": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
When `EnableMessageDeletion` is set to `false`, messages will not be deleted regardless of other retention policy settings.
|
||||
|
||||
</Note>
|
||||
|
||||
### Enable file deletion
|
||||
|
||||
**True**: File deletion is enabled during data retention job execution.
|
||||
|
||||
**False**: Files are not deleted during data retention job execution.
|
||||
|
||||
<table style={{width: '94%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '94%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableFileDeletion": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
When `EnableFileDeletion` is set to `false`, files will not be deleted regardless of other retention policy settings.
|
||||
|
||||
</Note>
|
||||
|
||||
### Enable boards deletion
|
||||
|
||||
**True**: Boards deletion is enabled during data retention job execution.
|
||||
|
||||
**False**: Boards data is not deleted during data retention job execution.
|
||||
|
||||
<table style={{width: '96%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '95%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableBoardsDeletion": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
When `EnableBoardsDeletion` is set to `false`, boards data will not be deleted regardless of other retention policy settings.
|
||||
|
||||
</Note>
|
||||
|
||||
### Batch size
|
||||
|
||||
The number of records to process in a single batch during data retention job execution. This setting controls how many records are processed together for optimal performance.
|
||||
|
||||
Default is 3000. Possible values are any non-negative integer (≥ 0).
|
||||
|
||||
<table style={{width: '82%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '81%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"BatchSize": 3000</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Compliance export
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Compliance \> Compliance Export**.
|
||||
|
||||
### Enable compliance export
|
||||
|
||||
**True**: Mattermost will generate a compliance export file that contains all messages that were posted in the last 24 hours. The export task is scheduled to run once per day. See the [documentation to learn more](/administration-guide/comply/compliance-export).
|
||||
|
||||
**False**: Mattermost doesn't generate a compliance export file.
|
||||
|
||||
<table style={{width: '89%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '89%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableExport": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Compliance export time
|
||||
|
||||
Set the start time of the daily scheduled compliance export job. Choose a time when fewer people are using your system. Must be a 24-hour time stamp in the form `HH:MM`.
|
||||
|
||||
This setting is based on the local time of the server.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"DailyRunTime": 01:00</code> with 24-hour timestamp input in the form <code>"HH:MM"</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Export file format
|
||||
|
||||
File format of the compliance export. Corresponds to the system that you want to import the data into.
|
||||
|
||||
Currently supported formats are CSV, Actiance XML, and Global Relay EML.
|
||||
|
||||
If Global Relay is chosen, the following options will be presented:
|
||||
|
||||
### Global Relay customer account
|
||||
|
||||
Type of Global Relay customer account your organization has. Can be one of: `A9/Type 9`, `A10/Type 10`, or `Custom`.
|
||||
|
||||
<table style={{width: '98%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '98%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"CustomerType": "A9"</code> with options <code>"A9</code>, <code>"A10"</code>, and <code>CUSTOM</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Global Relay SMTP username
|
||||
|
||||
The username for authenticating to the Global Relay SMTP server.
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '71%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"SmtpUsername": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Global Relay SMTP password
|
||||
|
||||
The password associated with the Global Relay SMTP username.
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '71%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"SmtpPassword": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Global Relay email address
|
||||
|
||||
The email address your Global Relay server monitors for incoming compliance exports.
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '71%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EmailAddress": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Global Relay sender address
|
||||
|
||||
An optional fixed From address used for every exported Global Relay EML and as the SMTP envelope sender. When left blank (the default), the export continues to derive From from the first channel participant by username. Participant emails remain in the To header so archiving systems can still index conversation participants.
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '71%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>".MessageExportSettings.GlobalRelaySettings.SenderAddress": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SMTP server name
|
||||
|
||||
The SMTP server name URL that will receive your Global Relay EML file when a [custom customer account type](#global-relay-customer-account) is configured.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>".MessageExportSettings.GlobalRelaySettings.CustomSMTPServerName": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SMTP server port
|
||||
|
||||
The SMTP server port that will receive your Global Relay EML file when a [custom customer account type](#global-relay-customer-account) is configured. Default is `"25"`.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>".MessageExportSettings.GlobalRelaySettings.CustomSMTPPort": "25"</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Custom header name
|
||||
|
||||
An optional custom header added to each exported EML file when a [custom customer account type](#global-relay-customer-account) is configured. Both the custom header name and value must be set, or both left blank to omit. A save is rejected if only one of the two is set, or if the name reuses a header the export already writes (such as `From`, `To`, `Subject`, or `X-GlobalRelay-MsgType`).
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>".MessageExportSettings.GlobalRelaySettings.CustomHeaderName": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Custom header value
|
||||
|
||||
The value sent with the custom header when a [custom customer account type](#global-relay-customer-account) is configured. Both the custom header name and value must be set, or both left blank to omit. A save is rejected if only one of the two is set, or if the name reuses a header the export already writes.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>".MessageExportSettings.GlobalRelaySettings.CustomHeaderValue": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Message export batch size
|
||||
|
||||
This setting isn't available in the System Console and can only be set in `config.json`.
|
||||
|
||||
Determines how many new posts are batched together to a compliance export file.
|
||||
|
||||
<table style={{width: '78%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '78%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"BatchSize": 10000</code> with numerical input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Run compliance export job now
|
||||
|
||||
This button initiates a compliance export job immediately. You can monitor the status of the job in the compliance export job table.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Compliance monitoring
|
||||
|
||||
Settings used to enable and configure Mattermost compliance reports.
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Compliance \> Compliance Monitoring**.
|
||||
|
||||
### Enable compliance reporting
|
||||
|
||||
**True**: Compliance reporting is enabled in Mattermost.
|
||||
|
||||
**False**: Compliance reporting is disabled.
|
||||
|
||||
<table style={{width: '84%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '84%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"Enable": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Compliance report directory
|
||||
|
||||
Sets the directory where compliance reports are written.
|
||||
|
||||
<table style={{width: '75%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '75%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"Directory": "./data/"</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable daily report
|
||||
|
||||
**True**: Mattermost generates a daily compliance report.
|
||||
|
||||
**False**: Daily reports are not generated.
|
||||
|
||||
<table style={{width: '88%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '88%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableDaily": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Batch size
|
||||
|
||||
Set the size of the batches in which posts will be read from the database to generate the compliance report. This setting is currently not available in the System Console and can only be set in `config.json`.
|
||||
|
||||
<table style={{width: '81%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '80%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"BatchSize": 30000</code> with default value <code>30000</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Custom terms of service
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Compliance \> Custom Terms of Service**.
|
||||
|
||||
### Enable custom terms of service
|
||||
|
||||
<Note>
|
||||
|
||||
This configuration setting can only be modified using the System Console user interface.
|
||||
|
||||
</Note>
|
||||
|
||||
**True**: New users must accept the Terms of Service before accessing any Mattermost teams on desktop, web, or mobile. Existing users must accept them after login or a page refresh. To update the Terms of Service link displayed in account creation and login pages, go to **System Console \> Legal and Support \> Terms of Service Link**.
|
||||
|
||||
**False**: During account creation or login, users can review Terms of Service by accessing the link configured via **System Console \> Legal and Support \> Terms of Service link**.
|
||||
|
||||
### Custom terms of service text
|
||||
|
||||
Text that will appear in your custom Terms of Service. Supports Markdown-formatted text.
|
||||
|
||||
### Re-acceptance period
|
||||
|
||||
The number of days before Terms of Service acceptance expires, and the terms must be re-accepted.
|
||||
|
||||
Defaults to 365 days. 0 indicates the terms do not expire.
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
title: "Store configuration in your database"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
If you have a self-hosted Mattermost deployment, you can use your database as the single source of truth for the active configuration of your Mattermost installation. This changes the Mattermost binary from reading the default `config.json` file to reading the configuration settings stored within a configuration table in the database. Mattermost has been running our [community server](https://community.mattermost.com) on this option since the feature was released, and recommends its use for those on [High Availability deployments](/deployment-guide/server/high-availability-cluster-based-deployment).
|
||||
|
||||
Benefits to using this option:
|
||||
|
||||
- Conveniently manages configuration changes directly from the System Console, even in High Availability deployments and read-only containerized environments.
|
||||
- Ensures all servers in a High Availability deployment have the same configuration, even when new servers are added to the cluster.
|
||||
- Automatically deploys SAML certificates and keys to all servers in the cluster.
|
||||
|
||||
<Tip>
|
||||
|
||||
The Mattermost configuration database and Mattermost application database are 2 different entities. It's possible to store Mattermost configuration in one database and Mattermost data in another database.
|
||||
|
||||
To do so, you must update the [Datasource](/administration-guide/configure/environment-configuration-settings#data-source) configuration setting to a new data source name, which can be done while the application is running. Explicitly setting the `MM_SQLSETTINGS_DATASOURCE` environment variable to override what has been defined in the configuration, whether it's in a database, or in a file, allows the correct data source name to be passed to the Mattermost application.
|
||||
|
||||
</Tip>
|
||||
|
||||
## How to migrate configuration to the database
|
||||
|
||||
These instructions cover migrating the Mattermost configuration to your database and updating your `systemd` configuration to load it from the database.
|
||||
|
||||
<Important>
|
||||
|
||||
- These instructions assume you have Mattermost server installed at `/opt/mattermost`. If you're running Mattermost in a different directory you'll have to modify the paths to match your environment.
|
||||
- If you're running Mattermost in a High Availability cluster-based deployment, you must complete all of the steps below on each server in the cluster.
|
||||
|
||||
</Important>
|
||||
|
||||
### Get your database connection string
|
||||
|
||||
The first step is to get your master database connection string. We recommend accessing your `config.json` file to make a copy of the value in `SqlSettings.DataSource`, or your equivalent environment variable, `MM_SQLSETTINGS_DATASOURCE`.
|
||||
|
||||
<Important>
|
||||
|
||||
- `SqlSettings.DataSource` must start with `postgres://` or `mysql://`. If it doesn't, add it to the beginning based on the database in use. For example: `postgres://mmuser:really_secure_password@localhost:5432/mattermost?sslmode=disable&connect_timeout=10`
|
||||
- If you see `\u0026`, replace it with `&`. For example: `mysql://mmuser:really_secure_password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s`
|
||||
|
||||
</Important>
|
||||
|
||||
### Create an environment file
|
||||
|
||||
Create the file `/opt/mattermost/config/mattermost.environment` to set the `MM_CONFIG` environment variable to the database connection string. For example:
|
||||
|
||||
``` text
|
||||
MM_CONFIG='postgres://mmuser:mostest_password@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10'
|
||||
```
|
||||
|
||||
Run this command to verify the permissions on your Mattermost directory:
|
||||
|
||||
``` sh
|
||||
sudo chown -R mattermost:mattermost /opt/mattermost
|
||||
```
|
||||
|
||||
### Enable local mode
|
||||
|
||||
Edit the `config.json` to enable local mode by setting `EnableLocalMode` to `true`. See the [local mode](/administration-guide/manage/mmctl-command-line-tool#local-mode) documentation for details on activating and using local mode.
|
||||
|
||||
### Restart Mattermost
|
||||
|
||||
Run the following command to restart the Mattermost server and apply the configuration change:
|
||||
|
||||
``` sh
|
||||
sudo systemctl restart mattermost
|
||||
```
|
||||
|
||||
### Migrate configuration from `config.json`
|
||||
|
||||
You can use the [mmctl config migrate](/administration-guide/manage/mmctl-command-line-tool#mmctl-config-migrate) command to migrate the configuration by running the following command:
|
||||
|
||||
``` sh
|
||||
./bin/mmctl config migrate path/to/config.json "postgres://mmuser:mostest_password@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10" --local
|
||||
```
|
||||
|
||||
<Important>
|
||||
|
||||
- If you're using a High Availability cluster-based deployment, you only need to run this command once and migrate the configuration from one server in the cluster.
|
||||
- When migrating configuration, Mattermost incorporates configuration from any existing `MM_*` environment variables set in the current shell. See [Environment Variables](/administration-guide/configure/configuration-settings) documentation for details.
|
||||
- As with the environment file, you'll have to escape any single quotes in the database connection string.
|
||||
- Any existing SAML certificates will be migrated into the database as well so they are available for all servers in the cluster. When the certificates expire, you can upload new certificates using the System Console or mmctl, which triggers a database update. Replacing the certificate files manually requires a reload of the Mattermost server to re-pull the certificates. Configuration files are stored in the `configurationfiles` table in the database.
|
||||
|
||||
</Important>
|
||||
|
||||
When configuration in the database is enabled, any changes to the configuration are recorded to the `Configurations` and `ConfigurationFiles` tables. Furthermore, `ClusterSettings.ReadOnlyConfig` is ignored, enabling full use of the System Console.
|
||||
|
||||
If you have configuration settings that must be set on a per-server basis you should add them as environment variables to the `mattermost.environment` file. These must be on their own line, and you must escape them properly.
|
||||
|
||||
### Modify the Mattermost `systemd` file
|
||||
|
||||
Find the `mattermost.service` file using the following command:
|
||||
|
||||
``` sh
|
||||
sudo systemctl status mattermost.service
|
||||
```
|
||||
|
||||
The second line of output will have the location of the running `mattermost.service`.
|
||||
|
||||
``` text
|
||||
Loaded: loaded (/etc/systemd/system/mattermost.service; enabled; vendor preset: enabled)
|
||||
```
|
||||
|
||||
Edit this file as *root* to add the below text just above the line that begins with `ExecStart`:
|
||||
|
||||
``` text
|
||||
EnvironmentFile=/opt/mattermost/config/mattermost.environment
|
||||
```
|
||||
|
||||
Here's a complete `mattermost.service` file with the `EnvironmentFile` line added:
|
||||
|
||||
``` text
|
||||
[Unit]
|
||||
Description=Mattermost
|
||||
After=network.target
|
||||
After=postgresql.service
|
||||
Requires=postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=/opt/mattermost/config/mattermost.environment
|
||||
ExecStart=/opt/mattermost/bin/mattermost
|
||||
TimeoutStartSec=3600
|
||||
KillMode=mixed
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
WorkingDirectory=/opt/mattermost
|
||||
User=mattermost
|
||||
Group=mattermost
|
||||
LimitNOFILE=49152
|
||||
|
||||
[Install]
|
||||
WantedBy=postgresql.service
|
||||
```
|
||||
|
||||
#### Verify that the configuration was migrated correctly
|
||||
|
||||
Configurations are stored in the `Configurations` table in the database. Run the following query to verify that you've migrated the configuration successfully:
|
||||
|
||||
``` sql
|
||||
SELECT * FROM Configurations WHERE Active=true;
|
||||
```
|
||||
|
||||
There should be exactly one line returned, and the `Value` field for that line should match your `config.json` file.
|
||||
|
||||
### Reload `systemd` files and restart Mattermost
|
||||
|
||||
Run these commands to reload the daemon and restart Mattermost using the new `MM_CONFIG` environment variable.
|
||||
|
||||
``` sh
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart mattermost
|
||||
```
|
||||
|
||||
<Important>
|
||||
|
||||
Once you start using configuration in the database, you shouldn't manually edit the active configuration row. You should edit or update the configuration in one of the following ways:
|
||||
|
||||
- Use the System Console to make changes to the configuration.
|
||||
- Use `mmctl` to make changes to the configuration.
|
||||
|
||||
The Mattermost server keeps active configuration in memory and writes new ones to the database only when there is a change. This way we avoid polling the database to process changes to the configuration. Publishing the changes to the cluster are handled by the application itself.
|
||||
|
||||
</Important>
|
||||
|
||||
## Rolling back
|
||||
|
||||
If you run into issues with your configuration in the database you can roll back to the `config.json` file by commenting out the `MM_CONFIG` line in `/opt/mattermost/config/mattermost.environment` and restarting Mattermost with `systemctl restart mattermost`.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Server fails to start
|
||||
|
||||
Providing the `--disableconfigwatch` flag while not actually pointing at a file will fail to start the server with an appropriate error message.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: "System Console settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
System admins for both self-hosted and Cloud Mattermost deployments can manage Mattermost configuration using the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu and selecting **System Console**.
|
||||
|
||||
<Note>
|
||||
|
||||
- In self-hosted Mattermost deployments, configuration settings are maintained in the `config.json` configuration file, located in the `mattermost/config` directory, or [stored in the database](/administration-guide/configure/configuration-in-your-database). System admins managing self-hosted deployments can also modify the `config.json` file directly using a text editor.
|
||||
- Mattermost requires write permissions to the `config.json` file; otherwise, configuration changes made within the System Console will have no effect.
|
||||
|
||||
</Note>
|
||||
|
||||
Mattermost configuration settings are organized into the following categories within the System Console:
|
||||
|
||||
- [Site configuration settings](/administration-guide/configure/site-configuration-settings)
|
||||
- [Authentication configuration settings](/administration-guide/configure/authentication-configuration-settings)
|
||||
- [User management configuration settings](/administration-guide/configure/user-management-configuration-settings)
|
||||
- [System attributes](/administration-guide/configure/system-attributes)
|
||||
- [Environment configuration settings](/administration-guide/configure/environment-configuration-settings)
|
||||
- [Reporting configuration settings](/administration-guide/configure/reporting-configuration-settings)
|
||||
- [Compliance configuration settings](/administration-guide/configure/compliance-configuration-settings)
|
||||
- [Integrations configuration settings](/administration-guide/configure/integrations-configuration-settings)
|
||||
- [Plugins configuration settings](/administration-guide/configure/plugins-configuration-settings)
|
||||
- [Self-hosted workspace edition and license settings](/administration-guide/configure/self-hosted-account-settings)
|
||||
- [Cloud workspace subscription, billing, and account settings](/administration-guide/configure/cloud-billing-account-settings)
|
||||
- [Experimental configuration settings](/administration-guide/configure/experimental-configuration-settings)
|
||||
- [Deprecated configuration settings](/administration-guide/configure/deprecated-configuration-settings)
|
||||
|
||||
Search is configured outside the System Console settings pages above. See [Bleve search](/administration-guide/configure/bleve-search) for the built-in search engine, and the [deployment guide](/deployment-guide/scale/elasticsearch-setup) for Elasticsearch and OpenSearch.
|
||||
|
||||
## Configuration in database
|
||||
|
||||
Self-hosted system configuration can be stored in the database. This changes the Mattermost binary from reading the default `config.json` file to reading the configuration settings stored within a configuration table in the database. See the [Mattermost database configuration](/administration-guide/configure/configuration-in-your-database) documentation for migration details.
|
||||
|
||||
## Environment variables
|
||||
|
||||
You can use [environment variables](/administration-guide/configure/environment-variables) to manage Mattermost configuration for self-hosted deployments. Environment variables override settings in `config.json`. If a change to a setting in `config.json` requires a restart to take effect, then changes to the corresponding environment variable also require a server restart.
|
||||
|
||||
## Configuration reload
|
||||
|
||||
In self-hosted deployments, the “config watcher”, the mechanism that automatically reloads the `config.json` file, has been deprecated in favor of the [mmctl config reload](/administration-guide/manage/mmctl-command-line-tool#mmctl-config-reload) command that you must run to apply configuration changes you've made. This improves configuration performance and robustness.
|
||||
|
||||
## Deprecated configuration settings
|
||||
|
||||
See the [deprecated configuration settings documentation](/administration-guide/configure/deprecated-configuration-settings) for details on all deprecated Mattermost configuration settings that are no longer supported.
|
||||
29
docs/main/administration-guide/configure/configure-index.mdx
Normal file
29
docs/main/administration-guide/configure/configure-index.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Configure Mattermost"
|
||||
sidebar_label: "Configure"
|
||||
---
|
||||
Configuration covers everything you set before and after your server is running: the System Console settings themselves, the subsystems Mattermost connects to, and the capabilities you turn on for your users.
|
||||
|
||||
## System Console settings
|
||||
|
||||
- [System Console settings](/administration-guide/configure/configuration-settings) - Every System Console setting, one page per section, with its `config.json` key and environment variable.
|
||||
- [Store configuration in your database](/administration-guide/configure/configuration-in-your-database) - Store configuration in your Mattermost database rather than as a JSON file.
|
||||
- [Environment variables](/administration-guide/configure/environment-variables) - Override configuration settings using environment variables.
|
||||
|
||||
## Subsystems
|
||||
|
||||
- [Search](/administration-guide/configure/bleve-search) - Enable Bleve search, and Chinese, Japanese, and Korean search.
|
||||
- [Email](/administration-guide/configure/smtp-email) - Set up SMTP email, and customize email templates.
|
||||
- [Configure Azure Blob Storage as the Mattermost file store](/administration-guide/configure/azure-blob-storage) - Use Azure Blob Storage instead of local or S3-compatible storage.
|
||||
|
||||
For enterprise search with Elasticsearch or OpenSearch, see the [deployment guide](/deployment-guide/scale/elasticsearch-setup).
|
||||
|
||||
## Capabilities
|
||||
|
||||
- [Branding and customization](/administration-guide/manage/admin/customize-branding) - Apply your organization's branding, and sign custom builds.
|
||||
- [Mattermost Agents](/administration-guide/configure/agents-admin-guide) - Enable AI-powered Agents and connect an LLM provider.
|
||||
- [Install and manage plugins](/administration-guide/configure/manage-plugins) - Install, enable, configure, update, and remove plugins.
|
||||
- [Install Mattermost Boards](/administration-guide/configure/install-boards) - Install and configure the Boards plugin.
|
||||
- [Set up auto-translation](/administration-guide/manage/admin/autotranslation) - Enable and configure automatic message translation.
|
||||
- [Set up content flagging](/administration-guide/manage/admin/content-flagging) - Let users flag messages for review, and handle data spillage.
|
||||
- [Connected workspaces](/administration-guide/onboard/connected-workspaces) - Connect your workspace to another Mattermost deployment.
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: "Custom branding tools"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Use custom branding tools to present a Mattermost experience that's tailored to the branding of your organization.
|
||||
|
||||
<figure>
|
||||
<img src={useBaseUrl('/images/custom-branding-tools.png')} alt="/images/custom-branding-tools.png" />
|
||||
</figure>
|
||||
|
||||
## Enable custom branding
|
||||
|
||||
1. Go to **System Console \> Site Configuration \> Customization \> Enable Custom Branding** and set the value to **true**.
|
||||
2. Choose a **Site Name**, upload a **Custom Brand Image**, then enter **Custom Brand Text**.
|
||||
3. Choose **Save**.
|
||||
|
||||
Users should see your new custom branding on the login page of your Mattermost server the next time they log in.
|
||||
|
||||
You can remove the custom brand image by selecting the **X** in the top right corner of the image. To apply the change, choose **Save**. Note that the value must be set to **true** in order to perform this step.
|
||||
|
||||
More about settings available in **Customization**:
|
||||
|
||||
### Site name
|
||||
|
||||
Choose the name of your Mattermost site to be shown in the UI. The site name appears in the header and footer of the site login page, team selection page, team creation page, account creation page, email invitations, and replaces "Mattermost" on the **About** page. Note that the site name applies to the entire site and not just a specific team on the site. The site name is limited to 30 characters or less.
|
||||
|
||||
### Custom branding image
|
||||
|
||||
Upload a company logo or custom image representative of your site that is displayed on the left side of the site login page. Supported image formats are JPG, PNG, TIFF, and BMP. The recommended image size is 200-500px in width and height, and less than 2 MB since it's loaded for every user who logs in on desktop.
|
||||
|
||||
### Custom brand text
|
||||
|
||||
Write custom text to display your company tagline or a welcome prompt. Custom text will be shown below the custom brand image on the left side of site login page on desktop. You can format this text to a maximum of 500 characters using the same [Markdown formatting syntax](/end-user-guide/collaborate/format-messages) as used in Mattermost messages.
|
||||
|
||||
### Site description
|
||||
|
||||
Use this field to describe the purpose of your site. The site description is shown below the site name on the login page. This text defaults to **All team communication in one place, searchable and accessible anywhere**. This text can be a maximum of 1024 characters and is not formatted with Markdown.
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "Customizing Mattermost"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
There are several ways to customize your Mattermost server.
|
||||
|
||||
If customizing Mattermost, please avoid branding that could be confused with the Mattermost brand. For example, it's okay to brand as "Healthcare Central" because it's a completely different brand. "Mattermost Healthcare Central" is not okay, because it can potentially be confused with the Mattermost brand. Please see the [Mattermost trademark guidelines](https://mattermost.com/trademark-standards-of-use/) for details.
|
||||
|
||||
While you're welcome to add your own copyright notice in the user interface if you feel it is warranted by your changes, we ask that you do not remove the Mattermost, Inc. copyright notice from the login footer or from the About dialog.
|
||||
|
||||
## Mattermost Web App
|
||||
|
||||
The Mattermost webapp is licensed under the Apache 2.0 license. To modify and use with the Mattermost server, you can:
|
||||
|
||||
1. Install the Mattermost server by following one of our installation guides
|
||||
2. Fork the [mattermost](https://github.com/mattermost/mattermost) repository
|
||||
3. Go to the web app code located in the `webapp` directory and make your changes
|
||||
4. Run `make package` to create `mattermost-webapp.tar.gz`
|
||||
5. Copy `mattermost-webapp-tar.gz` to the location Mattermost was installed in Step 1
|
||||
6. Rename the existing `client` folder to `client-original`
|
||||
7. Run `tar -xvf mattermost-webapp.tar.gz` to extract your new customized `client` folder
|
||||
8. If you're installing Mattermost 7.5 - 7.10, copy the `products` folder from `client-original` into `client`
|
||||
9. Restart your Mattermost server
|
||||
|
||||
It is possible to customize certain parts of the webapp without forking by using our [Custom Branding](/administration-guide/configure/custom-branding-tools) settings.
|
||||
|
||||
To replace the logo in email notifications, change the file located in the `/images` directory. To change the app icon, modify the `/app/components/app_icon.js` file.
|
||||
|
||||
## Mattermost Server
|
||||
|
||||
There are a few things you can customize in the Mattermost server without forking:
|
||||
|
||||
1. Modify text in the Mattermost interface by modifying the `en.json` file.
|
||||
2. Customize or hide help and support links by modifying your [configuration settings](/administration-guide/configure/site-configuration-settings#customization).
|
||||
3. Customize the email notifications by editing the HTML files in `/templates`. From Mattermost v11.3.0, changes to HTML templates require a server restart to take effect.
|
||||
|
||||
## Mattermost mobile apps
|
||||
|
||||
The Mattermost mobile apps can be customized if you choose to build the apps yourself.
|
||||
|
||||
To brand the mobile apps:
|
||||
|
||||
1. Fork the [mattermost-mobile](https://github.com/mattermost/mattermost-mobile) repository.
|
||||
2. Replace the name, images, and any key text strings.
|
||||
3. Compile the custom apps.
|
||||
4. Deploy the apps to an app store.
|
||||
|
||||
While most organizations deploy to internal enterprise app stores, you are welcome to deploy to iTunes and Google Play as long as the branding is not confusable with official Mattermost products.
|
||||
|
||||
## Mattermost desktop apps
|
||||
|
||||
The Mattermost desktop apps can be customized if you choose to build the apps yourself.
|
||||
|
||||
To brand the desktop apps:
|
||||
|
||||
1. Fork the [mattermost/desktop](https://github.com/mattermost/desktop) repository
|
||||
2. Replace the name, images, and any key text strings
|
||||
3. Refer to [the Mattermost Developer documentation](https://developers.mattermost.com/contribute/more-info/desktop/) for help with compiling the apps
|
||||
4. Share the desktop application with your users
|
||||
File diff suppressed because it is too large
Load Diff
953
docs/main/administration-guide/configure/email-templates.mdx
Normal file
953
docs/main/administration-guide/configure/email-templates.mdx
Normal file
@@ -0,0 +1,953 @@
|
||||
---
|
||||
title: "Email templates"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Mattermost has a few email templates that are sent out when a specific event occurs. Most of the time these templates do not need to be modified. In case additional modifications are necessary, all available props in each email are listed below. The 'Content'-Field is just to give a quick description of the prop. Please check the i18n strings for the exact wording.
|
||||
|
||||
The email templates are located in the Mattermost server directory in the `templates` folder. The corresponding strings for each prop can be found in the `i18n` folder.
|
||||
|
||||
<Note>
|
||||
|
||||
\- The props between different email templates are not interchangeable without additional server code changes. - Always back up changes to the `templates` and `i18n` folders before upgrading the server to avoid losing customizations. - From Mattermost v11.3, changes to HTML templates require a server restart to take effect.
|
||||
|
||||
</Note>
|
||||
|
||||
## Available templates
|
||||
|
||||
### Email footer
|
||||
|
||||
**Purpose**: This is appended to all outgoing emails sent by Mattermost.
|
||||
|
||||
**Props**:
|
||||
|
||||
<table style={{width: '68%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '12%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '30%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Footer</td>
|
||||
<td>Message intro</td>
|
||||
<td>api.templates.email_footer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Organization</td>
|
||||
<td>Name of Organization</td>
|
||||
<td>api.templates.email_organization</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EmailInfo1</td>
|
||||
<td>First line of footer</td>
|
||||
<td>api.templates.email_info1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EmailInfo2</td>
|
||||
<td>Second line of footer</td>
|
||||
<td>api.templates.email_info2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EmailInfo3</td>
|
||||
<td>Third line of footer</td>
|
||||
<td>api.templates.email_info3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SupportEmail</td>
|
||||
<td>Email for Mattermost support</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendChangeUsernameEmail
|
||||
|
||||
**Purpose**: Sent to the user when username has been changed.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '37%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.username_change_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.username_change_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendEmailChangeVerifyEmail
|
||||
|
||||
**Purpose**: Sent to the user when an email change has been requested. Contains verification link and button.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '82%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '12%'}} />
|
||||
<col style={{width: '26%'}} />
|
||||
<col style={{width: '42%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.email_change_verify_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.email_change_verify_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VerifyUrl</td>
|
||||
<td>URL for email verification</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VerifyButton</td>
|
||||
<td>Button for email verification</td>
|
||||
<td>api.templates.email_change_verify_body.button</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendEmailChangeEmail
|
||||
|
||||
**Purpose**: Sent to the user when the email has been changed successfully.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '69%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '35%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.email_change_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.email_change_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendVerifyEmail
|
||||
|
||||
**Purpose**: Sent to the user upon account creation to verify email address.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '66%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '10%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '30%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.verify_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.verify_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VerifyUrl</td>
|
||||
<td>URL for email verification</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Button</td>
|
||||
<td>Button for email verification</td>
|
||||
<td>api.templates.verify_body.button</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendSignInChangeEmail
|
||||
|
||||
**Purpose**: Sent to the user when the login method has been changed (i.e. from email to LDAP, etc.)
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '75%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '40%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.signin_change_email.body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.signin_change_email.body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendWelcomeEmail
|
||||
|
||||
**Purpose**: Sent to the user when the account has been created. May also contain download links to Apps as well as email verification links.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '82%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '15%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '41%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.welcome_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.welcome_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Button</td>
|
||||
<td>Button for confirmation</td>
|
||||
<td>api.templates.welcome_body.button</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info2</td>
|
||||
<td>Continuation of message body</td>
|
||||
<td>api.templates.welcome_body.info2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info3</td>
|
||||
<td>Continuation of message body</td>
|
||||
<td>api.templates.welcome_body.info3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Optional Props**:
|
||||
|
||||
<table style={{width: '82%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '15%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '41%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>AppDownloadInfo</td>
|
||||
<td>Info for App Downloads</td>
|
||||
<td>api.templates.welcome_body.app_download_info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AppDownloadLink</td>
|
||||
<td>Download link for Apps</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>VerifyUrl</td>
|
||||
<td>Link for verification</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendPasswordChangeEmail
|
||||
|
||||
**Purpose**: Sent to the user when password has been changed.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '37%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.password_change_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.password_change_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendAccessTokenEmail
|
||||
|
||||
**Purpose**: Sent to the user when an access token has been added to the account.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '74%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '40%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.user_access_token_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.user_access_token_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendPasswordResetEmail
|
||||
|
||||
**Purpose**: Sent to the user when password request has been initiated.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '64%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '29%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.reset_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info1</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.reset_body.info1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info2</td>
|
||||
<td>Continuation of message body</td>
|
||||
<td>api.templates.reset_body.info2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ResetUrl</td>
|
||||
<td>URL to reset password</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Button</td>
|
||||
<td>Button for confirmation</td>
|
||||
<td>api.templates.reset_body.button</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendMfaChangeEmail
|
||||
|
||||
**Purpose**: Sent to the user when multi-factor authentication method has been changed.
|
||||
|
||||
**Body Props when MFA is activated**:
|
||||
|
||||
<table style={{width: '70%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '35%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.mfa_activated_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.mfa_activated_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Body Props when MFA is deactivated**:
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '37%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.mfa_deactivated_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.mfa_deactivated_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.email_warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendDeactivateAccountEmail
|
||||
|
||||
**Purpose**: Sent to the user when account has been deactivated.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '68%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '8%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '34%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.deactivate_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.deactivate_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Warning</td>
|
||||
<td>Warning text</td>
|
||||
<td>api.templates.deactivate_body.warning</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### SendInviteEmails
|
||||
|
||||
**Purpose**: Sent to the user when team invite via email has been used.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '99%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '56%'}} />
|
||||
<col style={{width: '33%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Title</td>
|
||||
<td>Message heading</td>
|
||||
<td>api.templates.invite_body.title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info1</td>
|
||||
<td>Message body</td>
|
||||
<td>api.templates.invite_body.info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Button</td>
|
||||
<td>Button for confirmation</td>
|
||||
<td>api.templates.invite_body.button</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ExtraInfo</td>
|
||||
<td>Additional info about Mattermost</td>
|
||||
<td>api.templates.invite_body.extra_info</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TeamURL</td>
|
||||
<td>URL to the team the user has been invited to</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Link</td>
|
||||
<td>URL for team invite confirmation (not to be confused with TeamURL)</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### NotificationEmailBody
|
||||
|
||||
**Purpose**: Sent to the user as a notification for new messages or mentions.
|
||||
|
||||
**Body Props**:
|
||||
|
||||
<table style={{width: '63%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '28%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>SiteURL</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Button</td>
|
||||
<td>Button to post</td>
|
||||
<td>api.templates.post_body.button</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TeamLink</td>
|
||||
<td>URL to Team</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
This email can change depending on the settings and type of channel the notification is sent for.
|
||||
|
||||
**For group channels**:
|
||||
|
||||
**With full notification contents enabled**:
|
||||
|
||||
<table style={{width: '68%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '10%'}} />
|
||||
<col style={{width: '15%'}} />
|
||||
<col style={{width: '41%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>Message intro</td>
|
||||
<td>app.notification.body.intro.group_message.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info1</td>
|
||||
<td>Channel name</td>
|
||||
<td>app.notification.body.text.group_message.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info2</td>
|
||||
<td>Message contents</td>
|
||||
<td>app.notification.body.text.group_message.full2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SenderName</td>
|
||||
<td>Name of sender</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Without**:
|
||||
|
||||
<table style={{width: '67%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '13%'}} />
|
||||
<col style={{width: '44%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>Message intro</td>
|
||||
<td>app.notification.body.intro.group_message.generic</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Timestamp</td>
|
||||
<td>app.notification.body.text.group_message.generic</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**For direct messages**:
|
||||
|
||||
**With full notification contents enabled**:
|
||||
|
||||
<table style={{width: '69%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '10%'}} />
|
||||
<col style={{width: '23%'}} />
|
||||
<col style={{width: '35%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>Message intro</td>
|
||||
<td>app.notification.body.intro.direct.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info1</td>
|
||||
<td>Empty for direct messages</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info2</td>
|
||||
<td>Message contents</td>
|
||||
<td>app.notification.body.text.direct.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SenderName</td>
|
||||
<td>Name of sender</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Without**:
|
||||
|
||||
<table style={{width: '60%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '13%'}} />
|
||||
<col style={{width: '37%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>Message intro</td>
|
||||
<td>app.notification.body.intro.direct.generic</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Timestamp</td>
|
||||
<td>app.notification.body.text.direct.generic</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Notifications**:
|
||||
|
||||
**With full notification contents enabled**:
|
||||
|
||||
<table style={{width: '67%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '10%'}} />
|
||||
<col style={{width: '15%'}} />
|
||||
<col style={{width: '40%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>Message intro</td>
|
||||
<td>app.notification.body.intro.notification.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info1</td>
|
||||
<td>Channel name</td>
|
||||
<td>app.notification.body.text.notification.full</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info2</td>
|
||||
<td>Message contents</td>
|
||||
<td>app.notification.body.text.notification.full2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SenderName</td>
|
||||
<td>Name of sender</td>
|
||||
<td>--</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
**Without**:
|
||||
|
||||
<table style={{width: '78%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '9%'}} />
|
||||
<col style={{width: '25%'}} />
|
||||
<col style={{width: '42%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Prop</th>
|
||||
<th>Content</th>
|
||||
<th>i18n String</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>BodyText</td>
|
||||
<td>URL of the Mattermost server</td>
|
||||
<td>app.notification.body.intro.notification.generic</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info</td>
|
||||
<td>Message heading</td>
|
||||
<td>app.notification.body.text.notification.generic</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,167 @@
|
||||
---
|
||||
title: "Chinese, Japanese and Korean search"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
<Important>
|
||||
|
||||
Starting on Mattermost v11.5, searching for Chinese, Japanese or Korean (CJK) characters can be enabled with the [feature flag](https://developers.mattermost.com/contribute/more-info/server/feature-flags/#changing-feature-flag-values) `MM_FEATUREFLAGS_CJKSEARCH`.
|
||||
|
||||
The general recommendation of [using either Elasticsearch or Opensearch once the server reaches 2.5 million posts](https://docs.mattermost.com/administration-guide/scale/enterprise-search.html#do-i-need-to-use-elasticsearch-or-aws-opensearch) still applies.
|
||||
|
||||
What follows is the special configuration required for versions older than v11, where MySQL was still supported.
|
||||
|
||||
</Important>
|
||||
|
||||
See [database requirements documentation](/deployment-guide/software-hardware-requirements) for how to set up search for these languages.
|
||||
|
||||
Below is additional information on how to configure the database for different languages.
|
||||
|
||||
## 中文 / Chinese
|
||||
|
||||
尽管在 Mattermost 8.0 更新后,官方推荐为了更好的性能请使用 PostgreSQL 作为后端数据库。
|
||||
|
||||
但就目前而言,使用 MySQL 能够更容易的实现中文语言的全文搜索功能,在妥善配置 ngram 后,根据官方数据库构造重新生成索引即可达成。 具体的操作方式,可参考: [Cannot search CJK contents](https://github.com/mattermost/mattermost/issues/2033#issuecomment-182336690)。
|
||||
|
||||
有关 PostgreSQL 的配置方式,请参考以下流程:
|
||||
|
||||
### 配置 SCWS
|
||||
|
||||
``` sh
|
||||
# 取得 SCWS 代码
|
||||
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2
|
||||
# 解压缩
|
||||
tar xvjf scws-1.2.3.tar.bz2
|
||||
# 进入解压后的目录
|
||||
cd scws-1.2.3
|
||||
# 执行配置脚本、编译并安装
|
||||
./configure --prefix=/usr/local/scws ; make ; make install
|
||||
|
||||
# 可选:检查文件是否存在
|
||||
ls -al /usr/local/scws/lib/libscws.la
|
||||
/usr/local/scws/bin/scws -h
|
||||
# 可选:将词典安装在 /usr/local/scws/etc 中
|
||||
cd /usr/local/scws/etc
|
||||
wget http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
|
||||
wget http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
|
||||
tar xvjf scws-dict-chs-gbk.tar.bz2
|
||||
tar xvjf scws-dict-chs-utf8.tar.bz2
|
||||
```
|
||||
|
||||
### 配置 Zhparser
|
||||
|
||||
``` sh
|
||||
# 下载 Zhparser 源代码
|
||||
git clone https://github.com/amutu/zhparser.git
|
||||
# 进入下载后的目录
|
||||
cd zhparser
|
||||
# 编译并安装
|
||||
SCWS_HOME=/usr/local/scws make && make install
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
自 Mattermost 6.0 起,官方已不再使用 mattermost/mattermost-prod-db 作为数据库镜像,你可以直接使用安装在服务器上的 PostgreSQL 数据库,或者使用 PostgreSQL 官方的 Docker 镜像。
|
||||
|
||||
如果使用 Docker 镜像作为数据库,可以预先执行以下命令,安装依赖(请根据实际的 PostgreSQL 版本选择)。
|
||||
|
||||
``` sh
|
||||
# 更新本地缓存
|
||||
apt update
|
||||
# 配置 SCWS 时需要的依赖
|
||||
apt install wget make gcc
|
||||
# 配置 Zhparser 时需要的依赖
|
||||
apt install git postgresql-server-dev-13
|
||||
```
|
||||
|
||||
</Note>
|
||||
|
||||
### 创建 extension 并增加解析配置
|
||||
|
||||
``` sql
|
||||
-- 创建 extension
|
||||
CREATE EXTENSION zhparser;
|
||||
-- 创建 text search configuration
|
||||
CREATE TEXT SEARCH CONFIGURATION simple_zh_cfg (PARSER = zhparser);
|
||||
-- 配置 token mapping
|
||||
ALTER TEXT SEARCH CONFIGURATION simple_zh_cfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
|
||||
```
|
||||
|
||||
### 更新 PostgreSQL 配置
|
||||
|
||||
将 postgresql.conf 中的 default_text_search_config 的值更改为 simple_zh_cfg。
|
||||
|
||||
更改后,需要重启数据库方可生效。
|
||||
|
||||
<Note>
|
||||
|
||||
配置完成后,需根据 Mattermost 官方仓库中的 SQL 建表语句重新创建索引,方可正式启用中文语言的全文搜索功能。
|
||||
|
||||
未尽事宜,可以参考以下链接:
|
||||
|
||||
- SCWS 官方文档
|
||||
- [Zhparser 官方文档](https://github.com/amutu/zhparser/blob/master/README.md)
|
||||
- [Mattermost 建表语句](https://github.com/mattermost/mattermost/tree/master/server/channels/db/migrations/postgres)
|
||||
|
||||
</Note>
|
||||
|
||||
## 日本語 / Japanese
|
||||
|
||||
日本語翻訳の改善は大歓迎です。自由に変更していただいて結構です。
|
||||
|
||||
### 検索設定
|
||||
|
||||
Mattermost で日本語検索をするためにはデータベースの設定変更が必要です
|
||||
|
||||
- [MySQL](/deployment-guide/software-hardware-requirements#database-software)
|
||||
- [Postgres](/deployment-guide/software-hardware-requirements#database-software)
|
||||
|
||||
日本語(CJK)検索設定のドキュメントの改善にご協力ください
|
||||
|
||||
### ガイド
|
||||
|
||||
Qiita上で Mattermost のインストールおよび構成のガイドを提供しています。詳細については、\`こちら \[https://qiita.com/tags/mattermost\](https://qiita.com/tags/mattermost\)\`\_ をご覧ください。
|
||||
|
||||
## 한국어 / Korean
|
||||
|
||||
이 문제에 대한 논의는 이 [이슈](https://github.com/mattermost/mattermost/issues/2033) 에서 시작되었습니다.
|
||||
|
||||
한국어 버전 이용 시 문제점을 발견하면 [Localization 채널](https://community.mattermost.com/core/channels/localization) 또는 [한국어 채널](https://community.mattermost.com/core/channels/i18n-korean) 에서 의견을 제시할 수 있습니다.
|
||||
|
||||
### 검색을 위한 데이터베이스 설정
|
||||
|
||||
PostgreSQL: PostgreSQL 데이터베이스에서는 따로 설정이 필요하지 않습니다.
|
||||
|
||||
MySQL: MySQL에서는 전문 검색(Full-text search) 기능에 제한이 있기 때문에 추가적인 작업이 필요합니다.
|
||||
|
||||
### MySQL 해결 방법
|
||||
|
||||
1. n-gram parser 를 이용하기 위해서는 MySQL의 버전이 5.7.6 이상이어야 합니다.
|
||||
2. MySQL의 구성 파일에서 n-gram의 최소 토큰 크기를 다음과 같이 설정합니다.
|
||||
|
||||
``` sql
|
||||
[mysqld]
|
||||
ft_min_word_len = 2
|
||||
innodb_ft_min_token_size = 2
|
||||
```
|
||||
|
||||
3. 데이터베이스를 재시작합니다. (이 과정은 반드시 필요합니다.)
|
||||
4. 일부 테이블의 전문 검색 색인을 다음과 같이 재구성합니다.
|
||||
|
||||
- 게시물 검색을 위한 설정 ( [참조](https://github.com/mattermost/mattermost/issues/2033#issuecomment-182336690) )
|
||||
|
||||
``` sql
|
||||
DROP INDEX idx_posts_message_txt ON Posts;
|
||||
CREATE FULLTEXT INDEX idx_posts_message_txt ON Posts (Message) WITH PARSER ngram;
|
||||
```
|
||||
|
||||
- 해시 태그 검색을 위한 설정 ( [참조](https://github.com/mattermost/mattermost/pull/4555) )
|
||||
|
||||
``` sql
|
||||
DROP INDEX idx_posts_hashtags_txt ON Posts;
|
||||
CREATE FULLTEXT INDEX idx_posts_hashtags_txt ON Posts (Hashtags) WITH PARSER ngram;
|
||||
```
|
||||
|
||||
- 사용자 검색을 위한 설정
|
||||
|
||||
`Users.idx_users_txt_all` 과 `Users.idx_users_names_all` 을 n-gram 없이 재구성합니다.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "Environment variables"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
You can use environment variables to manage the configuration. Environment variables override settings in `config.json`. If a change to a setting in `config.json` requires a restart for it to take effect, then changes to the corresponding environment variable also require a server restart.
|
||||
|
||||
The name of the environment variable for any setting can be derived from the name of that setting in `config.json`. For example, to derive the name of the Site URL setting:
|
||||
|
||||
1. Find the setting in `config.json`. In this case, *ServiceSettings.SiteURL*.
|
||||
2. Add `MM_` to the beginning and convert all characters to uppercase and replace the `.` with `_`. For example, *MM_SERVICESETTINGS_SITEURL*.
|
||||
3. The setting becomes `export MM_SERVICESETTINGS_SITEURL="http://example.com"`.
|
||||
|
||||
<Note>
|
||||
|
||||
- If Mattermost is run from an initialization file, environment variables can be set via `Environment=<>`, or `EnvironmentFile=<path/to/file>`. In the second case, the file specified contains the list of environment variables to set.
|
||||
- From Mattermost v7.5, environment configuration parsing supports JSON for `MM_PLUGINSETTINGS_PLUGINS` and `MM_PLUGINSETTINGS_PLUGINSTATES`. This is especially helpful for Helm configuration files, provided all plugins are configured at the same time. For example, `MM_PLUGINSETTINGS_PLUGINSTATES="{\"com.mattermost.calls\":{\"Enable\":true},\"com.mattermost.nps\":{\"Enable\":true}}"`.
|
||||
- When settings are configured through an environment variable, system admins can't modify them in the System Console. If a setting is configured through an environment variable, and any other changes are made in the System Console, the value stored of the environment variable will be written back to the `config.json` as that setting's value.
|
||||
- For any setting that's not set in `config.json` or in environment variables, the Mattermost server uses the setting's default value as documented in the sections below on this page.
|
||||
|
||||
</Note>
|
||||
|
||||
<Warning>
|
||||
|
||||
- Environment variables for Mattermost settings that are set within the active shell will take effect when migrating configuration. For more information, see the [configuration in a database](/administration-guide/configure/configuration-in-your-database) documentation.
|
||||
- Database connection strings for the database read and search replicas need to be formatted using [URL encoding](https://www.w3schools.com/tags/ref_urlencode.asp). Incorrectly formatted strings may cause some characters to terminate the string early, resulting in issues when the connection string is parsed.
|
||||
|
||||
</Warning>
|
||||
|
||||
## Override Mattermost license file
|
||||
|
||||
You can use an environment variable to override any license in the database or file configuration without replacing those licenses. When starting the server, specify the license key as `MM_LICENSE` with the contents of a license file.
|
||||
|
||||
<Note>
|
||||
|
||||
If `MM_LICENSE` is set to a non-empty string, but the license specified is not valid, the Mattermost server will be started without a license.
|
||||
|
||||
In a High Availability deployment, using an environment variable to override a server license only affects the individual app server and doesn't propagate to other servers in the cluster.
|
||||
|
||||
</Note>
|
||||
|
||||
## Load custom configuration defaults
|
||||
|
||||
This custom configuration applies only if the values are not already present in the current server configuration.
|
||||
|
||||
1. Create a JSON file that contains the custom configuration defaults. For example, `custom.json`.
|
||||
2. When starting the server, point the custom defaults environment variable to the defaults file: `MM_CUSTOM_DEFAULTS_PATH=custom.json`.
|
||||
File diff suppressed because it is too large
Load Diff
40
docs/main/administration-guide/configure/install-boards.mdx
Normal file
40
docs/main/administration-guide/configure/install-boards.mdx
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: "Install Mattermost Boards"
|
||||
---
|
||||
<PlanAvailability slug="entry-ent" />
|
||||
|
||||
Mattermost Boards is not enabled by default for new Mattermost Enterprise instances. If the Mattermost Boards plugin isn't enabled for your Mattermost workspace, self-hosted Enterprise customers can install this plugin by manually uploading the binary release file into the System Console and enabling it.
|
||||
|
||||
Mattermost Cloud Enterprise customers can request the Boards plugins be enabled by contacting their Mattermost Account Manager or by [creating a support ticket](https://support.mattermost.com/hc/en-us/requests/new?ticket_form_id=11184911962004) request.
|
||||
|
||||
<Note>
|
||||
|
||||
The Mattermost Boards plugin is currently in maintenance mode. While adoption of this plugin is still supported for Enterprise customers, we recommend system admins proceed at their own risk. Mattermost is no longer actively developing new features or future improvements for the Boards plugin, beyond addressing bug fixes reported by Enterprise customers and any necessary security patches.
|
||||
|
||||
In the future, Mattermost plans to deliver a core Boards feature as part of the platform. Migration from the Boards plugin to this upcoming feature will be required, which could potentially involve downtime or data migration complexities. Keep this in mind when deploying the Boards plugin in production environments.
|
||||
|
||||
</Note>
|
||||
|
||||
## Install the plugin
|
||||
|
||||
The following steps apply to customers in fully connected environments as well as Denied, Disrupted, Intermittent, and Limited (DDIL) environments. A Mattermost system admin must perform the following steps in Mattermost.
|
||||
|
||||
1. Download the latest Mattermost Boards plugin binary file from the [Mattermost Boards Releases](https://github.com/mattermost/mattermost-plugin-boards/releases) page.
|
||||
2. Log in to your Mattermost System Console as a system admin.
|
||||
3. Go to **Plugins \> Plugin Management**.
|
||||
4. Select **Upload Plugin** to upload the Boards plugin binary file you downloaded from the Mattermost Releases page.
|
||||
|
||||
## Mattermost configuration
|
||||
|
||||
1. Go to **Plugins \> Mattermost Boards**.
|
||||
2. Select **Enable Plugin** to enable the plugin.
|
||||
3. You can optionally enable **Enable Publicly-Shared Boards** so that board editors can share boards with people outside of your Mattermost instance, who can view the board without needing a Mattermost account.
|
||||
4. Select **Save** to save your changes.
|
||||
|
||||
## Access
|
||||
|
||||
See the [navigate boards](/end-user-guide/project-management/navigate-boards) documentation to learn how to create and access boards.
|
||||
|
||||
## Work with boards
|
||||
|
||||
See the [project and task management](/end-user-guide/project-management/project-management-index) end user documentation to learn how to align, define, organize, track, and manage work across teams.
|
||||
@@ -0,0 +1,460 @@
|
||||
---
|
||||
title: "Integrations configuration settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Review and manage the following integration configuration options in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **Integrations**:
|
||||
|
||||
- [Integrations management](#integrations-management)
|
||||
- [Bot Accounts](#bot-accounts)
|
||||
- [GIF](#gif)
|
||||
- [CORS](#cors)
|
||||
|
||||
<Tip>
|
||||
|
||||
System admins managing a self-hosted Mattermost deployment can edit the `config.json` file as described in the following tables. Each configuration value below includes a JSON path to access the value programmatically in the `config.json` file using a JSON-aware tool. For example, the `EnableIncomingWebhooks` value is under `ServiceSettings`.
|
||||
|
||||
- If using a tool such as [jq](https://stedolan.github.io/jq/), you'd enter: `cat config/config.json | jq '.ServiceSettings.EnableIncomingWebhooks'`
|
||||
- When working with the `config.json` file manually, look for an object such as `ServiceSettings`, then within that object, find the key `EnableIncomingWebhooks`.
|
||||
|
||||
</Tip>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Integrations management
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Integrations \> Integration Management**.
|
||||
|
||||
### Enable incoming webhooks
|
||||
|
||||
Developers building integrations can create webhook URLs for public channels and private channels. See the [incoming webhooks](https://developers.mattermost.com/integrate/webhooks/incoming/) developer documentation to learn about creating webhooks, viewing samples, and letting community know about integrations you've built.
|
||||
|
||||
**True**: Incoming webhooks are allowed. To manage incoming webhooks, select **Integrations** from the Mattermost Product menu. The webhook URLs created can be used by external applications to create posts in any public or private channels that you have access to.
|
||||
|
||||
**False**: The **Integrations \> Incoming Webhooks** section of the Mattermost Product menu is hidden and all incoming webhooks are disabled.
|
||||
|
||||
<Important>
|
||||
|
||||
Security note: By enabling this feature, users may be able to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) by attempting to impersonate other users. To combat these attacks, a BOT tag appears next to all posts from a webhook. Enable at your own risk.
|
||||
|
||||
</Important>
|
||||
|
||||
<table style={{width: '97%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '96%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableIncomingWebhooks": true</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable outgoing webhooks
|
||||
|
||||
Developers building integrations can create webhook tokens for public channels. Trigger words are used to fire new message events to external integrations. For security reasons, outgoing webhooks are only available in public channels. See the [outgoing webhooks](https://developers.mattermost.com/integrate/webhooks/outgoing/) developer documentation to learn about creating webhooks and viewing samples.
|
||||
|
||||
**True**: Outgoing webhooks will be allowed. To manage outgoing webhooks, select **Integrations** from the Mattermost Product menu.
|
||||
|
||||
**False**: The **Integrations \> Outgoing Webhooks** of the Mattermost Product menu is hidden and all outgoing webhooks are disabled.
|
||||
|
||||
<Important>
|
||||
|
||||
Security note: By enabling this feature, users may be able to perform [phishing attacks](https://en.wikipedia.org/wiki/Phishing) by attempting to impersonate other users. To combat these attacks, a BOT tag appears next to all posts from a webhook. Enable at your own risk.
|
||||
|
||||
</Important>
|
||||
|
||||
<table style={{width: '97%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '96%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableOutgoingWebhooks": true</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
Disabling this configuration setting in larger deployments may improve server performance in the following areas:
|
||||
|
||||
- Reduced Network Traffic: Outgoing webhooks generate network requests to external services. Disabling them reduces the amount of traffic and resource usage related to those requests.
|
||||
- Decreased Load on Server: Handling webhook events and managing connections to external services uses server resources. By disabling outgoing webhooks, the server workload is reduced, allowing it to allocate more resources to other important tasks.
|
||||
- Improved Response Time: When outgoing webhooks are enabled, the server waits for the external services to return responses, potentially slowing down the performance if the external services are slow or unresponsive. Disabling them removes this dependency, leading to faster response times for user requests.
|
||||
- Lower Memory Usage: Webhooks need memory to process and store data about the requests and responses. Disabling them can free up memory which can be used to improve overall server performance.
|
||||
- Simplified Error Handling: Managing errors and retries for outgoing webhook failures can add complexity and overhead. Disabling outgoing webhooks can simplify error handling and reduce the processing overhead associated with it.
|
||||
- However, outgoing webhooks are often essential for integrating Mattermost with other services and workflows. It’s important to balance performance improvements with the needs of your organization and users.
|
||||
|
||||
</Note>
|
||||
|
||||
### Enable custom slash commands
|
||||
|
||||
Slash commands send events to external integrations that send a response back to Mattermost.
|
||||
|
||||
**True**: Allow users to create custom slash commands from **Main Menu \> Integrations \> Commands**.
|
||||
|
||||
**False**: Slash commands are hidden in the **Integrations** user interface.
|
||||
|
||||
<table style={{width: '91%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '90%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableCommands": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable OAuth 2.0 service provider
|
||||
|
||||
**True**: Mattermost acts as an OAuth 2.0 service provider allowing Mattermost to authorize API requests from external applications.
|
||||
|
||||
**False**: Mattermost does not function as an OAuth 2.0 service provider.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableOAuthServiceProvider": true</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
Cloud admins can't modify this configuration setting.
|
||||
|
||||
</Note>
|
||||
|
||||
### Enable dynamic client registration
|
||||
|
||||
**True**: Enables Dynamic Client Registration (DCR) allowing applications to programmatically register OAuth 2.0 clients without manual admin intervention via the `POST /api/v4/oauth/apps/register` endpoint.
|
||||
|
||||
**False**: Dynamic Client Registration is disabled. OAuth 2.0 applications must be registered manually through the System Console.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableDynamicClientRegistration": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Important>
|
||||
|
||||
**Security Warning**: When enabled, the DCR endpoint (`/api/v4/oauth/apps/register`) is **publicly accessible without authentication**. Any user or application can register OAuth clients on your Mattermost server. Only enable this setting if you understand and accept this security model, or have additional network-level access controls in place.
|
||||
|
||||
</Important>
|
||||
|
||||
<Note>
|
||||
|
||||
Cloud admins can't modify this configuration setting.
|
||||
|
||||
</Note>
|
||||
|
||||
### DCR redirect URI allowlist
|
||||
|
||||
A comma-separated list of permitted redirect URIs for OAuth Dynamic Client Registration (DCR). When configured, only OAuth clients that register via the DCR endpoint (`POST /api/v4/oauth/apps/register`) with a redirect URI matching an entry in this list will be accepted. Leave blank to allow any redirect URI.
|
||||
|
||||
In the System Console, enter URIs as a comma-separated list. When setting this value directly in `config.json` or via environment variable, provide URIs as a JSON string array (for example, `["https://example.com/callback", "https://app.example.com/oauth"]`).
|
||||
|
||||
This setting applies only when [Enable dynamic client registration](/administration-guide/configure/integrations-configuration-settings#enable-dynamic-client-registration) is enabled.
|
||||
|
||||
Redirect URIs are matched per URL component. Patterns support two wildcards:
|
||||
|
||||
- `*` matches any characters except `/` (for example, a single path segment or a hostname label).
|
||||
- `**` matches any characters including `/` (for example, a multi-segment path).
|
||||
|
||||
Wildcards are applied within URL components only: host wildcards match against the host, path wildcards match against the path, and a wildcard in one component can't satisfy another component. For example, `https://*.example.com/**` matches `https://app.example.com/callback` but not `https://attacker.example.net`.
|
||||
|
||||
Query strings are matched only when the pattern explicitly includes one. A pattern without a query string (such as `https://app.example.com/callback` or `https://app.example.com/**`) matches only redirect URIs that have no query string. To allow redirect URIs that carry query parameters, include a query component in the pattern, for example `https://app.example.com/callback?tenant=*`. To allow a callback both with and without a query string, add both patterns.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"DCRRedirectURIAllowlist": []</code> with string array input, such as <code>["https://example.com/callback", "https://app.example.com/oauth"]</code>. |</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
Cloud admins can't modify this configuration setting.
|
||||
|
||||
</Note>
|
||||
|
||||
### Integration request timeout
|
||||
|
||||
The number of seconds to wait for external integration HTTP requests before timing out, including [custom slash commands](https://developers.mattermost.com/integrate/slash-commands/custom/), [outgoing webhooks](https://developers.mattermost.com/integrate/webhooks/outgoing/), [interactive messages](https://developers.mattermost.com/integrate/plugins/interactive-messages/), and [interactive dialogs](https://developers.mattermost.com/integrate/plugins/interactive-dialogs/). Increase this value if you have external integrations that can take some time to generate an HTTP response, or experience delayed responses due to latency.
|
||||
|
||||
<table style={{width: '81%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '80%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"OutgoingIntegrationRequestsTimeout": 30</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable integrations to override usernames
|
||||
|
||||
**True**: Webhooks, slash commands, OAuth 2.0 apps, and other integrations, will be allowed to change the username they are posting as. If no username is present, the username for the post is the same as it would be for a setting of `False`.
|
||||
|
||||
**False**: **(Default)** Custom slash commands can only post as the username of the user who used the slash command. OAuth 2.0 apps can only post as the username of the user who set up the integration. For incoming webhooks and outgoing webhooks, the username is "webhook". See [https://developers.mattermost.com/integrate/other-integrations/](https://developers.mattermost.com/integrate/other-integrations/) for more details.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnablePostUsernameOverride": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable integrations to override profile picture icons
|
||||
|
||||
**True**: Webhooks, slash commands, and other integrations, will be allowed to change the profile picture they post with.
|
||||
|
||||
**False**: **(Default)** Webhooks, slash commands, and OAuth 2.0 apps can only post with the profile picture of the account they were set up with. See [https://developers.mattermost.com/integrate/other-integrations/](https://developers.mattermost.com/integrate/other-integrations/) for more details.
|
||||
|
||||
<table style={{width: '98%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '97%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnablePostIconOverride": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enable personal access tokens
|
||||
|
||||
**True**: Users can create [personal access tokens](https://developers.mattermost.com/integrate/admin-guide/admin-personal-access-token/) for integrations in **Profile \> Security**. They can be used to authenticate against the API and give full access to the account.
|
||||
|
||||
To manage who can create personal access tokens or to search users by token ID, go to the **System Console \> Users** page.
|
||||
|
||||
**False**: Personal access tokens are disabled on the server.
|
||||
|
||||
<table style={{width: '98%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '97%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableUserAccessTokens": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Enforce incoming webhook channel locking
|
||||
|
||||
When enabled, this setting enforces that all incoming webhooks must be locked to their designated channel and cannot post messages to other channels. This provides administrators with greater control over webhook security and ensures that webhooks can only post to their intended channels.
|
||||
|
||||
**True**: Incoming webhooks are required to be locked to their specific channel. The **Lock to this channel** option is automatically enabled and cannot be disabled when creating or editing webhooks.
|
||||
|
||||
**False**: **(Default)** Incoming webhook creators can choose whether to lock webhooks to a specific channel by selecting **Lock to this channel**, or allow the webhook to post to any public channel or private channel the webhook creator is a member of.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnforceIncomingWebhookChannelLocking": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Bot accounts
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Integrations \> Bot Accounts**.
|
||||
|
||||
### Enable bot account creation
|
||||
|
||||
**True**: **(Default for Cloud deployments)** Users can create bot accounts for integrations in **Integrations \> Bot Accounts**. Bot accounts are similar to user accounts except they cannot be used to log in. See [documentation](https://developers.mattermost.com/integrate/admin-guide/admin-bot-accounts/) to learn more.
|
||||
|
||||
**False**: **(Default for self-hosted deployments)** Bot accounts cannot be created through the user interface or the RESTful API. Plugins can still create and manage bot accounts.
|
||||
|
||||
<table style={{width: '99%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '99%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableBotAccountCreation": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### Disable bot accounts when owner is deactivated
|
||||
|
||||
**True**: When a user is deactivated, disables all bot accounts managed by the user. To re-enable bot accounts, go to **Integrations \> Bot Accounts**.
|
||||
|
||||
**False**: When a user is deactivated, all bot accounts managed by the user remain active.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '100%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"DisableBotsWhenOwnerIsDeactivated": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## GIF
|
||||
|
||||
Access the following configuration settings in the System Console by going to **Integrations \> GIF**.
|
||||
|
||||
### Enable GIF picker
|
||||
|
||||
**True**: Allow users to select GIFs from the emoji picker via a GIPHY integration.
|
||||
|
||||
**False**: GIFs cannot be selected in the emoji picker.
|
||||
|
||||
<table style={{width: '91%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '90%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"EnableGifPicker": true</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Important>
|
||||
|
||||
[Link previews](/administration-guide/configure/site-configuration-settings#enable-message-link-previews) must be enabled in order to display GIF link previews. Mattermost deployments restricted to access behind a firewall must open port 443 (for all request types) for this feature to work.
|
||||
|
||||
</Important>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## CORS
|
||||
|
||||
The following configuration settings are applicable only to self-hosted deployments. Access the following configuration settings in the System Console by going to **Integrations \> CORS**.
|
||||
|
||||
### Enable cross-origin requests from
|
||||
|
||||
Enable HTTP cross-origin requests from specific domains.
|
||||
|
||||
- Type `*` to allow CORS from any domain.
|
||||
- Enter a specific domain or multiple domains separated by spaces.
|
||||
- Type `null` to prevent CORS from any domain.
|
||||
- Leave blank to disable it and use the Mattermost **Site URL** instead.
|
||||
|
||||
<Note>
|
||||
|
||||
Ensure you've entered your [Site URL](/administration-guide/configure/environment-configuration-settings#site-url) before enabling this setting to prevent losing access to the System Console after saving. If you lose access to the System Console after changing this setting, you can set your Site URL through the `config.json` file.
|
||||
|
||||
</Note>
|
||||
|
||||
<table style={{width: '72%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '72%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"AllowCorsFrom": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### CORS exposed headers
|
||||
|
||||
Whitelist of headers that will be accessible to the requester.
|
||||
|
||||
<table style={{width: '77%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '76%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"CorsExposedHeaders": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### CORS allow credentials
|
||||
|
||||
**True**: Requests that pass validation will include the `Access-Control-Allow-Credentials` header.
|
||||
|
||||
**False**: Requests won't include the `Access-Control-Allow-Credentials` header.
|
||||
|
||||
<table style={{width: '96%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '95%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"CorsAllowCredentials": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### CORS debug
|
||||
|
||||
**True**: Prints messages to the logs to help when developing an integration that uses CORS. These messages will include the structured key value pair `"source": "cors"`.
|
||||
|
||||
**False**: Debug messages not printed to the logs.
|
||||
|
||||
<table style={{width: '87%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '86%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"CorsDebug": false</code> with options <code>true</code> and <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Embedding
|
||||
|
||||
The following configuration settings are applicable only to self-hosted deployments. Access the following configuration settings in the System Console by going to **Integrations \> Embedding**.
|
||||
|
||||
### Frame ancestors
|
||||
|
||||
Enter a space-separated list of domains that are allowed to embed the Mattermost web client via an iFrame. Leave blank to disallow embedding. Leave blank to disable embedding. Blank by default.
|
||||
|
||||
<table style={{width: '56%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '55%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"FrameAncestors".</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
Embedding Mattermost via an iFrame can provide seamless integration for collaboration into an organization’s existing tools and workflows. However, you must ensure that correct configurations are in place to allow communication between the iframe and the parent domain without violating security.
|
||||
|
||||
</Note>
|
||||
184
docs/main/administration-guide/configure/manage-plugins.mdx
Normal file
184
docs/main/administration-guide/configure/manage-plugins.mdx
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
title: "Install and manage plugins"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
Plugins extend Mattermost with new features and integrations, from pre-built integrations such as GitHub, Jira, and Zoom to custom plugins your team builds in-house. As a system admin, you can install, enable, configure, update, and remove plugins using either the System Console or the [mmctl command line tool](/administration-guide/manage/mmctl-command-line-tool).
|
||||
|
||||
This page describes how to manage the plugin lifecycle. For a conceptual overview of pre-built and custom plugins, see the [plugins](/integrations-guide/plugins) documentation. For the complete list of plugin configuration options, see the [plugins configuration settings](/administration-guide/configure/plugins-configuration-settings) documentation. To build your own plugin, see the [Mattermost plugin developer](https://developers.mattermost.com/integrate/plugins/) documentation.
|
||||
|
||||
<Note>
|
||||
|
||||
You must be a system admin to install and manage plugins. Plugins are managed at the server level and apply to your entire Mattermost deployment.
|
||||
|
||||
</Note>
|
||||
|
||||
## Before you begin
|
||||
|
||||
Plugin availability and the actions you can take depend on a few configuration settings found in the System Console under **Plugins > Plugin Management**. Review these settings before installing or updating plugins:
|
||||
|
||||
- **Enable plugins** (`PluginSettings.Enable`) must be set to **true** (the default) for the plugin system to work. When disabled, all plugins are turned off.
|
||||
- **Enable Marketplace** (`PluginSettings.EnableMarketplace`) must be set to **true** (the default) to install plugins from the in-product Marketplace.
|
||||
- **Enable remote Marketplace** (`PluginSettings.EnableRemoteMarketplace`) must be set to **true** (the default) for the Marketplace to connect to the remote endpoint and list community and Mattermost-provided plugins. Set this to **false** for servers that can't reach the internet; the Marketplace then shows only pre-packaged and installed plugins.
|
||||
- **Upload Plugin** (`PluginSettings.EnableUploads`) must be set to **true** to upload plugin bundles from your local computer. This setting applies to self-hosted deployments only.
|
||||
|
||||
<Note>
|
||||
|
||||
If you receive a `Received invalid response from the server` error when uploading a plugin, the [maximum file size](/administration-guide/configure/environment-configuration-settings#maximum-file-size) configuration setting is likely too small for the plugin bundle. Increase it, and update any proxy settings as needed.
|
||||
|
||||
</Note>
|
||||
|
||||
See the [plugins configuration settings](/administration-guide/configure/plugins-configuration-settings) documentation for details on each of these settings, including their `config.json` paths and environment variables.
|
||||
|
||||
## Plugin installation methods
|
||||
|
||||
You can install a plugin from the in-product Marketplace, by uploading a plugin bundle, or by using mmctl. Pre-packaged plugins that ship with the Mattermost Server are installed and upgraded automatically when **Automatic prepackaged plugins** (`PluginSettings.AutomaticPrepackagedPlugins`) is enabled (the default).
|
||||
|
||||
### App Marketplace
|
||||
|
||||
Installing from the Marketplace is the recommended method for pre-built plugins. The Marketplace always installs the latest compatible version, and plugins downloaded from the Marketplace are signature-validated.
|
||||
|
||||
1. In Mattermost, from the Product menu <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" />, select **App Marketplace**.
|
||||
2. Search for or scroll to the plugin you want, and then select **Install**.
|
||||
3. Once the plugin is installed, select **Configure** to open its settings in the System Console, or **Enable** to turn it on with the default configuration.
|
||||
4. Confirm the installation succeeded: the plugin appears in the **Installed Plugins** list under **Plugins > Plugin Management**, and its features are available in Mattermost.
|
||||
|
||||
<Tip>
|
||||
|
||||
The [Mattermost Marketplace](https://mattermost.com/marketplace/) website offers an expanded selection of community-supported integrations.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Plugin upload
|
||||
|
||||
Upload a plugin bundle when you're installing a custom or third-party plugin that isn't in the Marketplace, or when your server runs in an air-gapped or restricted environment. Uploading requires the **Upload Plugin** setting to be enabled and the **Require plugin signature** (`PluginSettings.RequirePluginSignature`) setting to be disabled.
|
||||
|
||||
1. Download the plugin bundle (a `.tar.gz` file), typically from the plugin's GitHub releases page. Many plugins offer a separate, smaller bundle for each platform (for example, `linux-amd64`) alongside a larger universal bundle that contains the binaries for all supported platforms. Download the bundle that matches your server's operating system and architecture; a bundle built for a different platform won't start. If you use the universal bundle instead, Mattermost automatically selects the correct binary for your server.
|
||||
2. Log in to your Mattermost System Console as a system admin.
|
||||
3. Go to **Plugins > Plugin Management**.
|
||||
4. In the **Upload Plugin** section, select **Choose File**, select the plugin bundle you downloaded, and then select **Upload**.
|
||||
5. The plugin appears in the **Installed Plugins** list. Select **Enable** to turn it on.
|
||||
|
||||
### mmctl
|
||||
|
||||
The [mmctl command line tool](/administration-guide/manage/mmctl-command-line-tool) is useful for scripted or remote plugin management. Plugins must be enabled in the server configuration first.
|
||||
|
||||
Several commands take the plugin's ID, shown as `<id>` below. A plugin's ID is the `id` value in its `plugin.json` manifest. It's often the plugin's name, such as `github` or `playbooks`, but some plugins use a reverse-DNS identifier, such as `com.mattermost.calls` for the Calls plugin. To list the IDs of installed plugins, run `mmctl plugin list`.
|
||||
|
||||
- Install the latest version from the Marketplace by plugin ID:
|
||||
|
||||
```sh
|
||||
mmctl plugin marketplace install <id>
|
||||
```
|
||||
|
||||
- Install a plugin bundle from your local computer:
|
||||
|
||||
```sh
|
||||
mmctl plugin add myplugin.tar.gz
|
||||
```
|
||||
|
||||
- Install a plugin bundle from a URL:
|
||||
|
||||
```sh
|
||||
mmctl plugin install-url https://example.com/myplugin.tar.gz
|
||||
```
|
||||
|
||||
After installing, enable the plugin by its ID:
|
||||
|
||||
```sh
|
||||
mmctl plugin enable <id>
|
||||
```
|
||||
|
||||
## Enable or disable a plugin
|
||||
|
||||
Installing a plugin doesn't turn it on automatically. Enable a plugin to make it available to users, and disable it to remove it from the user interface without uninstalling it.
|
||||
|
||||
To enable or disable a plugin in the System Console:
|
||||
|
||||
1. Go to **Plugins > Plugin Management**.
|
||||
2. In the **Installed Plugins** list, locate the plugin.
|
||||
3. Select **Enable** or **Disable**.
|
||||
|
||||
To enable or disable a plugin with mmctl:
|
||||
|
||||
```sh
|
||||
mmctl plugin enable <id>
|
||||
mmctl plugin disable <id>
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
Disabling a plugin immediately removes it from the user interface and stops the plugin from running. The plugin remains installed and can be re-enabled at any time.
|
||||
|
||||
</Note>
|
||||
|
||||
## Configure a plugin
|
||||
|
||||
Most plugins have their own settings page. After a plugin is installed, go to **Plugins** in the System Console and select the plugin by name to configure it, then select **Save**. Refer to the documentation for each plugin for details on its available settings.
|
||||
|
||||
## Update a plugin
|
||||
|
||||
We recommend keeping plugins up to date as new versions are released. Updates are generally seamless and don't interrupt the user experience, but you should review each plugin's release notes for compatibility considerations, and test updates in a staging environment before applying them in production.
|
||||
|
||||
You can update a plugin using any of the following methods:
|
||||
|
||||
- **Pre-packaged plugins** are upgraded automatically when the **Automatic prepackaged plugins** setting is enabled (the default). If a newer version is already installed, no change is made.
|
||||
- **Marketplace plugins** show an **Update** option in the App Marketplace when a newer version is available. Select it to install the latest version.
|
||||
- **Uploaded plugins** are updated by uploading a newer bundle with the same plugin ID through **Plugins > Plugin Management**. The new version overwrites the existing one.
|
||||
- **mmctl** updates an installed plugin when you add a bundle that has the same plugin ID. Use the `--force` (`-f`) flag to overwrite the existing version:
|
||||
|
||||
```sh
|
||||
mmctl plugin add myplugin.tar.gz --force
|
||||
mmctl plugin install-url https://example.com/myplugin.tar.gz --force
|
||||
```
|
||||
|
||||
The `--force` flag overwrites the installed plugin without asking for confirmation, so verify the new bundle's compatibility (and ideally test it in a staging environment) before applying it in production.
|
||||
|
||||
You can also reinstall the latest Marketplace version with `mmctl plugin marketplace install <id>`.
|
||||
|
||||
<Tip>
|
||||
|
||||
To confirm the version currently installed, go to **Plugins > Plugin Management** and review the **Installed Plugins** list, or run `mmctl plugin list`.
|
||||
|
||||
</Tip>
|
||||
|
||||
## Remove a plugin
|
||||
|
||||
Removing a plugin disables it and uninstalls it from the server.
|
||||
|
||||
To remove a plugin in the System Console:
|
||||
|
||||
1. Go to **Plugins > Plugin Management**.
|
||||
2. In the **Installed Plugins** list, locate the plugin.
|
||||
3. Select **Remove**.
|
||||
|
||||
To remove a plugin with mmctl:
|
||||
|
||||
```sh
|
||||
mmctl plugin delete <id>
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
Removing a plugin uninstalls it from the server and stops it from running, but Mattermost preserves the plugin's associated data:
|
||||
|
||||
- **Configuration**: The plugin's configuration is retained and marked as disabled rather than deleted. Reinstalling the same plugin restores its previous settings.
|
||||
- **Key-value store data**: Data the plugin saved to the key-value (KV) store is preserved. It's cleared only by the plugin itself through the plugin API, not by removing the plugin.
|
||||
- **Bot accounts**: Bot accounts the plugin created remain on the server and stay active. To remove them, deactivate the bot accounts manually in **System Console > Integrations > Bot Accounts**.
|
||||
|
||||
Because the configuration and KV store data persist, removal is effectively reversible: reinstalling the plugin restores its prior configuration and data.
|
||||
|
||||
Mattermost doesn't provide a built-in way to fully delete a removed plugin's retained configuration or key-value data through the System Console or mmctl. If you must purge this data to meet a data-retention or compliance requirement, contact Mattermost support for guidance, as it requires direct changes to the Mattermost database.
|
||||
|
||||
</Note>
|
||||
|
||||
## Air-gapped and restricted environments
|
||||
|
||||
For deployments without internet access, set **Enable remote Marketplace** to **false** so the Marketplace shows only pre-packaged and installed plugins, and install plugins by uploading the bundle directly through the System Console. See the [air-gapped deployment](/deployment-guide/deployment-scenarios/air-gapped-deployment) documentation for details.
|
||||
|
||||
## Related documentation
|
||||
|
||||
- [Plugins overview](/integrations-guide/plugins) - Learn about pre-built and custom plugins.
|
||||
- [Pre-built integrations](/integrations-guide/popular-integrations) - Browse available pre-built plugins and how to get them.
|
||||
- [Plugins configuration settings](/administration-guide/configure/plugins-configuration-settings) - Review every plugin configuration setting.
|
||||
- [mmctl command line tool](/administration-guide/manage/mmctl-command-line-tool) - Manage plugins from the command line.
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
title: "Manage user surveys"
|
||||
---
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
In a self-hosted Mattermost deployment, you can use the Mattermost User Survey integration to gather direct feedback from your Mattermost users to identify what's working well and what's not with your Mattermost instance.
|
||||
|
||||
All user responses are stored in and remain within your self-hosted deployment, and no telemetry data is sent back to Mattermost. You can export a CSV report of NPS scores and user responses for further analysis, or to share your feedback data with Mattermost. You can schedule when each survey begins, define how long each survey lasts, specify teams excluded from the survey, as well as customize both a welcome message and a user question you want feedback on.
|
||||
|
||||
<Important>
|
||||
|
||||
The User Satisfaction Survey Plugin is the recommended approach for gathering user feedback, replacing the deprecated [User Satisfaction Survey Plugin](/administration-guide/manage/user-satisfaction-surveys) for new deployments.
|
||||
|
||||
</Important>
|
||||
|
||||
## Setup
|
||||
|
||||
You must be a Mattermost system admin to [upload the plugin](#install) to your Mattermost self-hosted deployment [enable it](#enable), [create surveys](#create-surveys), and [export survey responses](#export-survey-responses) using the System Console.
|
||||
|
||||
The User Survey integration is compatible with Mattermost v9.11.2 or later.
|
||||
|
||||
## Install
|
||||
|
||||
From Mattermost v9.11.2 (ESR) and Mattermost Cloud v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a prior release, download the [latest plugin binary release](https://github.com/mattermost/mattermost-plugin-user-survey/releases), and upload it to your server via **System Console \> Plugin Management**.
|
||||
|
||||
### Upgrade
|
||||
|
||||
We recommend updating this integration as new versions are released. Generally, updates are seamless and don't interrupt the user experience in Mattermost.
|
||||
|
||||
Visit the [Releases page](https://github.com/mattermost/mattermost-plugin-user-survey/releases) for the latest release, available releases, and compatibiilty considerations.
|
||||
|
||||
## Enable
|
||||
|
||||
Go to **System Console \> Plugins \> User Survey** to enable this integration.
|
||||
|
||||
Once the integration is installed and enabled, create surveys by completing configuration in the System Console, as described below.
|
||||
|
||||
### Create surveys
|
||||
|
||||
Under **Survey setup**, specify the date, time, and details for a new survey:
|
||||
|
||||
1. **Send next survey at**: Specify the date and time when the survey will begin rolling out to users.
|
||||
|
||||
> <div class="note">
|
||||
>
|
||||
> <div class="title">
|
||||
>
|
||||
> Note
|
||||
>
|
||||
> </div>
|
||||
>
|
||||
> A single survey can be active at a time. If you already have an active survey running, you'll need to reschedule your new survey to start on a date after the current survey expires. Alternatively, you can end the active survey early by selecting **End survey**.
|
||||
>
|
||||
> </div>
|
||||
|
||||
2. **Survey expiry (days)**: Specify how long the survey will be open to responses in days.
|
||||
3. **Exclude specific teams**: Specify who will receive the survey. You can send the survey to all users, to all users on specific teams, or omit all users from specific teams.
|
||||
|
||||

|
||||
|
||||
4. **Survey message text**: Customize the introductory message text users see when prompted to complete the survey.
|
||||
5. **Linear scale question (1-10)**: This question is required that helps calculate the NPS score.
|
||||
6. **Textual question**: This question is required that helps gather user feedback.
|
||||
7. **Textual question (Optional)**: You can optionally specify a text-based question for your survey.
|
||||
8. Select **Save**. Your new survey is scheduled, and displays under **Active and past surveys** once the survey is shared with users.
|
||||
|
||||

|
||||
|
||||
## Active surveys
|
||||
|
||||
When a survey starts, all users recieve a direct message from a feedback bot containing the active survey. The survey includes one mandatory scale-based question, and optional text-based questions.
|
||||
|
||||

|
||||
|
||||
Users must answer all required questions in order to submit their response. When a user selects **Submit**, their responses are recorded.
|
||||
|
||||
## Export survey responses
|
||||
|
||||
Select **Export responses** to download a CSV file containing NPS scores and user responses gatherered through the survey. You can export data from active surveys which will contain data collected so far.
|
||||
|
||||

|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
title: "Optimize your Mattermost workspace"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
With workspace optimizations, system admins can review their workspace health and growth scores, then take advantage of recommended actions for ensuring their workspace is running smoothly and teams are maximizing productivity.
|
||||
|
||||
System admins can access their workspace optimization page in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and going to **Reporting \> Workspace Optimization**.
|
||||
|
||||

|
||||
|
||||
## How is the overall score calculated?
|
||||
|
||||
The highest score possible is 100. Your score is calculated based on the type of issue reported and the level of potential security risk introduced to your Mattermost deployment if ignored.
|
||||
|
||||
Each item on the dashboard is calculated based on its individual impact score. These differ depending on whether they're problems, warnings, or suggestions. For example, if SSL encryption isn't configured in your workspace, Mattermost reports that as a problem, which reduces your score until it's addressed.
|
||||
|
||||
Warnings impact your score less than problems, and suggestions have the least impact on your score.
|
||||
|
||||
Want to improve your overall workspace optimization score? Take action towards the problems, warnings, and suggestions reported on this dashboard. We recommend the following workspace optimizations.
|
||||
|
||||
## Recommendations
|
||||
|
||||
The following optimization areas can alert you to workspace suggestions, warnings, or problems that may require your attention:
|
||||
|
||||
<table style={{width: '100%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '7%'}} />
|
||||
<col style={{width: '34%'}} />
|
||||
<col style={{width: '57%'}} />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Optimization category</th>
|
||||
<th>Suggestions, Warnings, or Problems Detected</th>
|
||||
<th>Additional Information</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Mattermost release</td>
|
||||
<td>Are you on the latest Mattermost release?</td>
|
||||
<td><p>You're notified when updates are available.</p><p>See the <a href="/administration-guide/upgrade/upgrading-mattermost-server">Upgrade Mattermost</a> product documentation for details on upgrading your workspace.</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Configuration issues</td>
|
||||
<td><ul>
|
||||
<li><strong>SSL</strong>: Should your workspace be more secure with SSL?</li>
|
||||
<li><strong>Session Length</strong>: The default value may not provide an optimal user experience.</li>
|
||||
<li><strong>File Storage</strong>: Write access to the configured file storage location is required.</li>
|
||||
</ul></td>
|
||||
<td><p>See the product documentation to learn more:</p><ul><li><a href="/administration-guide/onboard/ssl-client-certificate">Set up SSL</a></li><li><a href="/administration-guide/configure/environment-configuration-settings#session-lengths">Configure session length</a></li><li><a href="/administration-guide/configure/environment-configuration-settings#file-storage">Configure file storage</a></li></ul></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Workspace access</td>
|
||||
<td>Is the Mattermost workspace accessible to users?</td>
|
||||
<td>If your web server settings don't pass a live URL test, your workspace may not be accessible to others. See the <a href="/administration-guide/configure/environment-configuration-settings#web-server">Web server configuration settings</a> product documentation to learn more.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Search performance</td>
|
||||
<td>As your user base grows, is search getting slower?</td>
|
||||
<td>See the <a href="/administration-guide/scale/enterprise-search">Enterprise search</a> product documentation to learn more.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Data privacy</td>
|
||||
<td>Do you need more control and insights into your data?</td>
|
||||
<td><p>See the product documentation to learn more:</p><ul><li><a href="/administration-guide/comply/data-retention-policy">Data Retention</a></li><li><a href="/administration-guide/comply/compliance-export">Compliance Export</a></li></ul></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User authentication</td>
|
||||
<td><ul>
|
||||
<li><strong>AD/LDAP</strong>: As your user base grows, would you benefit from easier onboarding, automated deactivations, and role assignments?</li>
|
||||
<li><strong>Guest accounts</strong>: Do you want to control user access to channels and teams with guest accounts?</li>
|
||||
</ul></td>
|
||||
<td><p>See the product documentation to learn more:</p><ul><li><a href="/administration-guide/configure/authentication-configuration-settings#adldap">AD/LDAP</a></li><li><a href="/administration-guide/onboard/guest-accounts">Guest accounts</a></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
---
|
||||
title: "Enable push notifications"
|
||||
unlisted: true
|
||||
---
|
||||
{/* Snippet include: imported by environment-configuration-settings. Kept as its
|
||||
own page because 10 pages deep-link to its anchors. */}
|
||||
|
||||
With self-hosted deployments, you can configure mobile push notifications for Mattermost by going to **System Console \> Environment \> Push Notification Server**, or by editing the `config.json` file as described in the following tables. Changes to configuration settings in this section require a server restart before taking effect.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '54%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Enable or disable Mattermost push notifications.</p><ul><li><strong>Do not send push notifications</strong>: Mobile push notifications are disabled.</li><li><strong>Use HPNS connection with uptime SLA to send notifications to iOS and Android apps</strong>: <strong>(Default)</strong> Use Mattermost's hosted push notification service.</li><li><strong>Use TPNS connection to send notifications to iOS and Android apps</strong>: Use Mattermost's test push notification service.</li><li><strong>Manually enter Push Notification Service location</strong>: When building your own custom mobile apps, you must host your own mobile push proxy service, and specify that URL in the <strong>Push Notification Server</strong> field.</li></ul></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Push Notification Server</strong></li><li><code>config.json</code> setting: <code>EmailSettings</code> > <code>SendPushNotifications</code></li><li>Environment variable: <code>MM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Hosted Push Notifications Service (HPNS)
|
||||
|
||||
Mattermost Enterprise, Professional, and Cloud customers can use Mattermost's Hosted Push Notification Service (HPNS). The HPNS offers:
|
||||
|
||||
- Access to a publicly-hosted Mattermost Push Notification Service (MPNS) [available on GitHub.](https://github.com/mattermost/mattermost-push-proxy)
|
||||
- An explicit [privacy policy](https://mattermost.com/data-processing-addendum/) for the contents of unencrypted messages.
|
||||
- Encrypted TLS connections:
|
||||
- Between HPNS and Apple Push Notification Services
|
||||
- Between HPNS and Google’s Firebase Cloud Messaging Service
|
||||
- HPNS and your Mattermost Server
|
||||
- Production-level uptime expectations.
|
||||
- Out-of-box configuration for new servers means nothing is required to enable HPNS for new deployments. HPNS can be [enabled for existing deployments](#enable-hpns-for-existing-deployments).
|
||||
|
||||
<Note>
|
||||
|
||||
\- The HPNS only works with pre-built apps Mattermost deploys through the [Apple App Store](https://www.apple.com/app-store/) and [Google Play Store](https://play.google.com/store/games?hl=en). If you build your own mobile apps, you must also [host your own Mattermost push proxy server](#host-your-own-push-proxy-service). - You must ensure that the push proxy can be reached on the correct port. For HPNS, it's port 443 from the Mattermost server. - Mattermost doesn't store any notification data. Any data being stored is at the server level only, such as the `device_id`, since the HPNS needs to know which device the notification must be sent to.
|
||||
|
||||
</Note>
|
||||
|
||||
## Test Push Notifications Service (TPNS)
|
||||
|
||||
Non-commercial self-hosted customers can use Mattermost's free, basic Test Push Notifications Service (TPNS).
|
||||
|
||||
<Note>
|
||||
|
||||
\- The TPNS isn’t recommended for use in production environments, and doesn’t offer production-level update service level agreements (SLAs). - The TPNS isn't available for Mattermost Cloud deployments. - The TPNS only works with the pre-built mobile apps that Mattermost deploys through the [Apple App Store](https://www.apple.com/app-store/) and [Google Play Store](https://play.google.com/store/games?hl=en). If you have built your own mobile apps, you must also [host your own Mattermost push proxy service](#host-your-own-push-proxy-service). - You must ensure that the push proxy can be reached on the correct port. For TPNS, it's port 80 from the Mattermost server. - If you don't need or want Mattermost to send mobile push notifications, disabling this configuration setting in larger deployments may improve server performance in the following areas:
|
||||
|
||||
- Reduced Processing Load: Generating and sending push notifications requires processing power and resources. By disabling them, the server can allocate those resources to other tasks.
|
||||
- Decreased Network Traffic: Push notifications involve network communication. Disabling them reduces the amount of data being transferred, which can enhance overall network performance.
|
||||
- Lower Database Load: Each push notification may involve reading from and writing to the database. Reducing these operations decreases the load on the database, improving response times for other queries.
|
||||
- Faster Response Times: With fewer tasks to handle related to notifications, the system can respond faster to other requests from users, leading to a better user experience.
|
||||
- Simplified Error Handling: Push notification services can sometimes fail or have latency issues, requiring additional error handling. Disabling these notifications simplifies the system's operations.
|
||||
- However, disabling push notifications can negatively impact user experience, communication efficiency, and overall productivity. It’s important to balance performance improvements with the needs of your organization and users.
|
||||
|
||||
</Note>
|
||||
|
||||
## ID-only push notifications
|
||||
|
||||
<PlanAvailability slug="entry-ent" />
|
||||
|
||||
Admins can enable mobile notifications to be fully private to protect a Mattermost customer against breaches in iOS and Android notification infrastructure by limiting the data sent to Apple and Google through a Mattermost configuration setting.
|
||||
|
||||
The standard way to send notifications to iOS and Android applications requires sending clear text messages to Apple or Google so they can be forwarded to a user’s phone and displayed on iOS or Android. While Apple or Google assure the data is not collected or stored, should the organizations be breached or coerced, all standard mobile notifications on the platform could be compromised.
|
||||
|
||||
To avoid this risk, Mattermost can be configured to replace mobile notification text with message ID numbers that pass no information to Apple of Google. When received by the Mattermost mobile application on a user’s phone, the message IDs are used to privately communicate with their Mattermost server and to retrieve mobile notification messages over an encrypted channel. This means that, at no time, is the message text visible to Apple or Google’s message relay system. The contents of the message also won't reach Mattermost.
|
||||
|
||||
<Note>
|
||||
|
||||
Because of the extra steps to retrieve the notifications messages under Mattermost’s private mobility capability with ID-only push notifications, end users may experience a slight delay before the mobile notification is fully displayed compared to sending clear text through Apple and Google’s platform.
|
||||
|
||||
</Note>
|
||||
|
||||
See our [configuration settings](/administration-guide/configure/site-configuration-settings#push-notification-contents) documentation to learn more about the ID-only push notifications configuration setting. See our [Mobile Apps FAQ documentation](/deployment-guide/mobile/mobile-faq#how-can-i-use-id-only-push-notifications-to-protect-notification-content-from-being-exposed-to-third-party-services) for details on using ID-only push notifications for data privacy.
|
||||
|
||||
# Push notification server location
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '44%'}} />
|
||||
<col style={{width: '55%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>The region of the Mattermost Hosted Push Notification Service (HPNS) server.</p><p>Select a region to automatically populate the <strong>Push Notification Server</strong> field with the corresponding URL:</p><ul><li><strong>Global</strong>: <code>https://global.push.mattermost.com</code> (load balances requests across the regional endpoints below)</li><li><strong>US</strong>: <code>https://us.push.mattermost.com</code></li><li><strong>EU (Germany)</strong>: <code>https://eu.push.mattermost.com</code></li><li><strong>AP (Japan)</strong>: <code>https://ap.push.mattermost.com</code></li></ul></td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>Environment > Push Notification Server</strong></li>
|
||||
<li><code>config.json</code> setting: <code>EmailSettings</code> > <code>PushNotificationServer</code></li>
|
||||
<li>Environment variable: <code>MM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER</code></li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
`https://us.push.mattermost.com` supersedes the legacy `https://push.mattermost.com` URL, and `https://eu.push.mattermost.com` supersedes the legacy `https://hpns-de.mattermost.com` URL. The legacy URLs still work, but are deprecated and now point to the same new infrastructure as their replacements above.
|
||||
|
||||
</Note>
|
||||
|
||||
# Maximum notifications per channel
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '41%'}} />
|
||||
<col style={{width: '58%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>The maximum total number of users in a channel before @all, @here, and @channel no longer send desktop, email, or mobile push notifications to maximize performance.</p>
|
||||
<p>Numerical input. Default is <strong>1000</strong>.</p></td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>Environment > Push Notification Server</strong></li>
|
||||
<li><code>config.json</code> setting: <code>TeamSettings</code> > <code>MaxNotificationsPerChannel</code> > <code>1000</code></li>
|
||||
<li>Environment variable: <code>MM_EMAILSETTINGS_MAXNOTIFICATIONSPERCHANNEL</code></li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
- We recommend increasing this value a little at a time, monitoring system health by tracking [performance monitoring metrics](/administration-guide/scale/deploy-prometheus-grafana-for-performance-monitoring), and only increasing this value if large channels have restricted permissions controlling who can post to the channel, such as a [read-only channel](/administration-guide/onboard/advanced-permissions#read-only-channels).
|
||||
- Reducing this configuration setting value to **10** in larger deployments may improve server performance in the following areas:
|
||||
- **Reduced Load on Notification System**: Each notification generates a certain amount of computational and network load. By limiting the number of notifications per channel, the system processes fewer notifications, thereby reducing the load on servers.
|
||||
- **Database Efficiency**: Notifications are typically stored in a database. Fewer notifications mean less frequent database writes and reads, leading to quicker database operations and reduced latency.
|
||||
- **Minimized Client Processing**: Users' clients (e.g., desktop and mobile apps) have to fetch and process notifications. With fewer notifications, clients can operate more efficiently, reducing memory and CPU usage on users' devices.
|
||||
- **Improved User Experience**: An overload of notifications can lead to performance lags and a cluttered experience for users. Limiting the number ensures that users receive only the most important notifications, which can enhance usability and response times.
|
||||
- **Network Bandwidth**: High numbers of notifications can consume a lot of bandwidth, particularly if they are being sent to many users. Fewer notifications can lead to lower overall network usage and potentially faster delivery of critical messages.
|
||||
- **Server Load Balancing**: By reducing the number of notifications, the workload can be more evenly distributed across the servers, leading to better load balancing and preventing any single server from becoming a bottleneck.
|
||||
|
||||
</Note>
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Enable rate limiting"
|
||||
unlisted: true
|
||||
---
|
||||
{/* Snippet include: imported by environment-configuration-settings. */}
|
||||
|
||||
With self-hosted deployments, rate limiting prevents your Mattermost server from being overloaded with too many requests, and decreases the risk and impact of third-party applications or malicious attacks on your server.
|
||||
|
||||
Configure rate limiting settings by going to **System Console \> Environment \> Rate Limiting**, or by editing the `config.json` file as described in the following tables. Changes to configuration settings in this section require a server restart before taking effect.
|
||||
|
||||
<Important>
|
||||
|
||||
Mattermost rate limiting configuration settings are intended for small deployments of Mattermost up to a few hundred users, and is not intended for larger, Enterprise-scale deployments.
|
||||
|
||||
</Important>
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '54%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Enable or disable rate limiting to throttle APIs to a specified number of requests per second.</p><ul><li><strong>true</strong>: APIs are throttled at the rate specified by the <a href="#maximum-queries-per-second">Maximum queries per second</a> configuration setting.</li><li><strong>false</strong>: <strong>(Default)</strong> API access isn’t throttled.</li></ul></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>Enable</code> > <code>false</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_ENABLE</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Maximum queries per second
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '46%'}} />
|
||||
<col style={{width: '53%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Throttle the API at this number of requests per second when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>10</strong>.</p><p>Increase this value to accept more requests each second, and decrease this value to allow fewer requests.</p></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>PerSec</code> > <code>10</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_PERSEC</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Maximum burst size
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '54%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>The maximum number of requests allowed beyond the per second query limit when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>100</strong>.</p><p>Increase this value to allow for more concurrent requests to be handled, and decrease this value to limit this capacity.</p></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>MaxBurst</code> > <code>100</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_MAXBURST</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Memory store size
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '43%'}} />
|
||||
<col style={{width: '56%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>The maximum number of user sessions connected to the system as determined by vary rate limit settings when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>10000</strong>. Typically set to the number of users in the system.</p><p>We recommend setting this value to the expected number of users. A higher value may result in underutilized resources, and a lower value may result in user sessions/tokens expiring too frequently.</p></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>MemoryStoreSize</code> > <code>10000</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_MEMORYSTORESIZE</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Vary rate limit by remote address
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '43%'}} />
|
||||
<col style={{width: '56%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Configure Mattermost to rate limit API access by IP address when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><ul><li><strong>true</strong>: <strong>(Default)</strong> Rate limit API access by IP address. Recommended when using a proxy.</li><li><strong>false</strong>: Rate limiting does not vary by IP address.</li></ul></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByRemoteAddr</code> > <code>true</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYREMOTEADDR</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Vary rate limit by user
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '54%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Configure Mattermost to rate limit API access by authentication token or not when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><ul><li><strong>true</strong>: Rate limit API access by user authentication token. Recommended when using a proxy.</li><li><strong>false</strong>: <strong>(Default)</strong> Rate limiting does not vary by user authentication token.</li></ul></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByUser</code> > <code>false</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYUSER</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
# Vary rate limit by HTTP header
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '54%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Configure Mattermost to vary rate limiting API access by the HTTP header field specified. Recommended when you’re using a proxy.</p><ul><li>When configuring NGINX, set this to <strong>X-Real-IP</strong>.</li><li>When configuring AmazonELB, set this to <strong>X-Forwarded-For</strong>.</li></ul></td>
|
||||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByHeader</code> > <code>""</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYHEADER</code></li></ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: "Reporting configuration settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
View the following statistics for your overall deployment and specific teams, as well as access server logs, in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **Reporting**:
|
||||
|
||||
- [System statistics](#system-statistics)
|
||||
- [Team statistics](#team-statistics)
|
||||
- [Server logs](#server-logs)
|
||||
- [Statistics configuration settings](#statistics-configuration-settings)
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
<a id="site-statistics" />
|
||||
|
||||
## System statistics
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '48%'}} />
|
||||
<col style={{width: '51%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>View statistics on a wide variety of activities in Mattermost, including: users, seats, teams, channels, posts, calls, sessions, commands, webhooks, websocket and database connections, and collaborative playbooks.</td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>Reporting > System Statistics</strong></li>
|
||||
<li><code>config.json setting</code>: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
- Bots, deactivated users, and synthetic users in [Microsoft Teams integrations](/end-user-guide/collaborate/collaborate-within-connected-microsoft-teams) and [connected workspaces](/administration-guide/onboard/connected-workspaces) users aren't counted towards the total number of activated users.
|
||||
- **Single-channel Guests** shows the number of active guest accounts that belong to exactly one active channel. Direct messages and group messages don't affect whether a guest is counted as a single-channel guest. Archived channels are excluded. Single-channel guests are counted separately from the primary paid seat count and are free up to a 1:1 ratio with licensed seats. When this count exceeds the allowance, the statistic is highlighted as a warning for system admins.
|
||||
- Guests in multiple active channels continue to count as activated users for billing purposes. See the [guest accounts](/administration-guide/onboard/guest-accounts) documentation for details.
|
||||
|
||||
</Note>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Team statistics
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '49%'}} />
|
||||
<col style={{width: '50%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>View statistics per team on number of activated users, number of public and private channels, total post count, and count of paid users (self-hosted only).</td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>Reporting > Team Statistics</strong></li>
|
||||
<li><code>config.json</code> setting: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
Bots, deactivated users, and synthetic users in [Microsoft Teams integrations](/end-user-guide/collaborate/collaborate-within-connected-microsoft-teams) and [connected workspaces](/administration-guide/onboard/connected-workspaces) users aren't counted towards the total number of active users.
|
||||
|
||||
</Note>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Server logs
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '50%'}} />
|
||||
<col style={{width: '50%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>View logging of server-side events.</p>
|
||||
<p>Reload data, download the <code>mattermost.log</code> file locally, and view full log event details for any log entry.</p></td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>Reporting > Server Logs</strong></li>
|
||||
<li><code>config.json</code> setting: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<Note>
|
||||
|
||||
- This setting is applicable to self-hosted deployments only.
|
||||
- From Mattermost v10.9, you can toggle between JSON and plain text server logs in the System Console when console log output is configured as [JSON](/administration-guide/configure/environment-configuration-settings#output-console-logs-as-json) by specifying the log format as **JSON** or **Plain text**. This option is located in the top right corner of the page **Server logs** page.
|
||||
|
||||
</Note>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Statistics configuration settings
|
||||
|
||||
The following self-hosted deployment configuration setting controls statistics collection behavior. This setting is not available in the System Console and can only be set in the `config.json` file.
|
||||
|
||||
### Maximum users for statistics
|
||||
|
||||
This setting is used to maximize performance for large Enterprise deployments and isn't available in the System Console and can only be set in `config.json`.
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style={{width: '44%'}} />
|
||||
<col style={{width: '55%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><p>Set the maximum number of users on the server before statistics for total messages, total hashtag messages, total file messages, messages per day, and activated users with messages per day are disabled.</p>
|
||||
<p>Numerical input. Default is <strong>2500</strong> users.</p></td>
|
||||
<td><ul>
|
||||
<li>System Config path: N/A</li>
|
||||
<li><code>config.json</code> setting: <code>"AnalyticsSettings.MaxUsersForStatistics": 2500</code></li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Self-hosted workspace edition and license settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Start a trial or manage your self-hosted deployment by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **About \> Edition and License**.
|
||||
|
||||
## Start a trial
|
||||
|
||||
You can start a trial of [Mattermost Enterprise](/product-overview/editions-and-offerings#mattermost-enterprise-edition) for free for 30 days. Select **Start trial** and fill out the form to begin.
|
||||
|
||||
<Note>
|
||||
|
||||
Once you've started a trial, you can't start another one with the same Mattermost instance. If you need more time to evaluate Mattermost Enterprise, contact a [Mattermost Expert](https://mattermost.com/contact-sales/).
|
||||
|
||||
</Note>
|
||||
|
||||
## Manage your self-hosted deployment
|
||||
|
||||
You can also review and manage the following aspects of your self-hosted deployment:
|
||||
|
||||
- View the [edition](/product-overview/editions-and-offerings) of your Mattermost self-hosted deployment.
|
||||
- Manage your [product subscription](/product-overview/self-hosted-subscriptions).
|
||||
- [Upload a new license](/administration-guide/manage/admin/installing-license-key).
|
||||
- Remove a license to [downgrade the server](/administration-guide/upgrade/downgrading-mattermost-server).
|
||||
- Talk to a [Mattermost Expert](https://mattermost.com/contact-sales/) for assistance.
|
||||
163
docs/main/administration-guide/configure/smtp-email.mdx
Normal file
163
docs/main/administration-guide/configure/smtp-email.mdx
Normal file
@@ -0,0 +1,163 @@
|
||||
---
|
||||
title: "SMTP email setup"
|
||||
---
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
In a production environment, Mattermost requires SMTP email enabled for email notifications and password resets when using [email-based authentication](/administration-guide/configure/authentication-configuration-settings#enable-sign-in-with-email).
|
||||
|
||||
## Set up an SMTP email service
|
||||
|
||||
Any SMTP email service can be used. You need a copy of the following information: `Server Name`, `Port`, `SMTP Username`, and `SMTP Password`.
|
||||
|
||||
<Tip>
|
||||
|
||||
If you don't have an SMTP service you can set one up with [Amazon Simple Email Service (SES)](https://aws.amazon.com/ses/):
|
||||
|
||||
1. Go to [Amazon SES console](https://console.aws.amazon.com/ses) then **SMTP Settings \> Create My SMTP Credentials**.
|
||||
2. Copy the `Server Name`, `Port`, `SMTP Username`, and `SMTP Password` values. You'll need these values to configure Mattermost.
|
||||
3. From the `Domains` menu, set up and verify a new domain, then enable `Generate DKIM Settings` for the domain. We recommend you set up [Sender Policy Framework](https://en.wikipedia.org/wiki/Sender_Policy_Framework) (SPF) and/or [Domain Keys Identified Mail](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail) (DKIM) for your email domain.
|
||||
4. Choose a sender address like `mattermost@domain.com` and select `Send a Test Email` to verify setup is working correctly.
|
||||
|
||||
Alternatively, you can use one of the [services listed below](#sample-smtp-settings), or can set up local `sendmail` by setting **Server Name** `127.0.0.1` with **Port** `25`.
|
||||
|
||||
If deploying Mattermost using [Docker](/deployment-guide/server/deploy-containers), the standard docker `172.16.0.0/12` IP range isn't used. Specify the IP range `192.168.0.0/24` to the email service to avoid relay access errors. If using postfix, under `/etc/postfix/main.cf`, specify `mynetworks = 192.168.0.0/24`. This may vary depending on how Mattermost is deployed. Ensure that **Port 25** is open if a firewall is present.
|
||||
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
|
||||
[Outlook365 no longer supports Basic Auth](https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040) which is required by Mattermost. We recommend using an alternate Email service like AWS SES (Simple Email Service).
|
||||
|
||||
</Note>
|
||||
|
||||
## Configure SMTP settings
|
||||
|
||||
1. In Mattermost go to **System Console \> Authentication \> Email**, and set **Allow Sign Up With Email** to **true**.
|
||||
2. In the System Console, go to **Notifications \> Email** and configure Mattermost for your SMTP service. See the [SMTP configuration](/administration-guide/configure/environment-configuration-settings#smtp) documentation for details.
|
||||
|
||||
> - Set **Send Email Notifications** to **true**.
|
||||
> - Set the **Notification Display Name** for the account sending notifications.
|
||||
> - Set **Notification Email Address** for the email address used to send notifications.
|
||||
> - Enter the **SMTP Username**, **SMTP Password**, **SMTP Server**, and **SMTP Port** you copied from initial setup.
|
||||
> - We recommend setting **Connection Security**: to **TLS (Recommended)** to encrypt communication between Mattermost and your SMTP service.
|
||||
|
||||
<Note>
|
||||
|
||||
`SMTPPort` and related port settings use string format (e.g., `"465"`) for compatibility with the `host:port` binding format, which requires string concatenation.
|
||||
|
||||
</Note>
|
||||
|
||||
3. Select **Save**.
|
||||
4. Under **Connection Security**, select **Test Connection**. Mattermost will confirm whether a connection to the SMTP service is successful by sending you an email. If the test fails, Mattermost will provide details about why it failed in the System Console. See the [check Mattermost logs](#troubleshooting-using-logs) section below for details.
|
||||
|
||||
## Sample SMTP settings
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="amazon-ses" label="Amazon SES">
|
||||
|
||||
- Set **SMTP Username** to **\[YOUR_SMTP_USERNAME\]**
|
||||
- Set **SMTP Password** to **\[YOUR_SMTP_PASSWORD\]**
|
||||
- Set **SMTP Server** to **email-smtp.us-east-1.amazonaws.com**
|
||||
- Set **SMTP Port** to **465**
|
||||
- Set **Connection Security** to **TLS**
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="postfix" label="Postfix">
|
||||
|
||||
Make sure Postfix is installed on the same machine as Mattermost.
|
||||
|
||||
- Set **SMTP Username** to **(empty)**
|
||||
- Set **SMTP Password** to **(empty)**
|
||||
- Set **SMTP Server** to **localhost**
|
||||
- Set **SMTP Port** to **25**
|
||||
- Set **Connection Security** to **(empty)**
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="gmail" label="Gmail">
|
||||
|
||||
- Set **SMTP Username** to **your_email@gmail.com**
|
||||
- Set **SMTP Password** to **your_password**
|
||||
- Set **SMTP Server** to **smtp.gmail.com**
|
||||
- Set **SMTP Port** to **587**
|
||||
- Set **Connection Security** to **STARTTLS**
|
||||
|
||||
<Warning>
|
||||
|
||||
Additional configuration is required in Google to allow SMTP email to relay through their servers. See [SMTP relay: Route outgoing non-Gmail messages through Google](https://support.google.com/a/answer/2956491?hl=en) for the required steps.
|
||||
|
||||
</Warning>
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="hotmail" label="Hotmail">
|
||||
|
||||
- Set **SMTP Username** to **your_email@hotmail.com**
|
||||
- Set **SMTP Password** to **your_password**
|
||||
- Set **SMTP Server** to **smtp-mail.outlook.com**
|
||||
- Set **SMTP Port** to **587**
|
||||
- Set **Connection Security** to **STARTTLS**
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="office365-outlook" label="Office365/Outlook">
|
||||
|
||||
- Set **SMTP Username** to **your_email@hotmail.com**
|
||||
- Set **SMTP Password** to **your_password**
|
||||
- Set **SMTP Server Name** to **smtp.office365.com**
|
||||
- Set **SMTP Port** to **587**
|
||||
- Set **Connection Security** to **STARTTLS**
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
## Troubleshooting SMTP
|
||||
|
||||
### TLS/STARTTLS requirements
|
||||
|
||||
If you fill in **SMTP Username** and **SMTP Password** then you must set **Connection Security** to **TLS** or to **STARTTLS**
|
||||
|
||||
### Troubleshooting using logs
|
||||
|
||||
If you have issues with your SMTP install, from your Mattermost team site go to **System Console \> Logs** to look for error messages related to your setup. You can do a search for the error code to narrow down the issue. Sometimes ISPs require nuanced setups for SMTP and error codes can hint at how to make the proper adjustments.
|
||||
|
||||
For example, if **System Console \> Logs** displays the following error, search for `554 5.7.1 error` and `Client host rejected: Access denied`.
|
||||
|
||||
``` text
|
||||
Connection unsuccessful: Failed to add to email address - 554 5.7.1 <unknown[IP-ADDRESS]>: Client host rejected: Access denied
|
||||
```
|
||||
|
||||
### Checking your Notifications settings
|
||||
|
||||
If an SMTP connection test in the System Console for a self-hosted Mattermost deployment fails with the message `Connection unsuccessful: Failed to set the to address: 550 5.7.27 [test@example.com](mailto:test@example.com)`, go to **System Console \> Site Configuration \> Notifications** to verify that notification settings are configured correctly, including **Notification Display Name**, **Notification From Address**, **Support Email Address**, and **Notification Reply-To Address**. Cloud administrators can't manage **Notification From Address** or **Notification Reply-To Address**.
|
||||
|
||||
### Checking your SMTP server is reachable
|
||||
|
||||
- Attempt to Telnet to the email service to make sure the server is reachable. For additional information, visit [https://learn.microsoft.com/en-us/exchange/mail-flow/test-smtp-with-telnet?view=exchserver-2019](https://learn.microsoft.com/en-us/exchange/mail-flow/test-smtp-with-telnet?view=exchserver-2019). If you're using an earlier version than Exchange Server 2019, select your version from the left-hand navigation menu.
|
||||
|
||||
- You must run the following commands from the same machine or virtual instance where `mattermost/bin/mattermost` is located.
|
||||
|
||||
- Telnet to the email server with `telnet mail.example.com 25`. If the command works you should see something like:
|
||||
|
||||
``` text
|
||||
Trying 24.121.12.143...
|
||||
Connected to mail.example.com.
|
||||
220 mail.example.com NO UCE ESMTP
|
||||
```
|
||||
|
||||
Then type something like `HELO <your mail server domain>`. If the command works you should see something like:
|
||||
|
||||
``` text
|
||||
250-mail.example.com NO UCE
|
||||
250-STARTTLS
|
||||
250-PIPELINING
|
||||
250 8BITMIME
|
||||
```
|
||||
|
||||
<Note>
|
||||
|
||||
- Telnet isn't included in official Mattermost Docker images, so you either need to use `ping` on those, or install Telnet yourself either directly or by modifying the Dockerfile.
|
||||
- For further assistance, review the [Troubleshooting forum](https://forum.mattermost.com/c/trouble-shoot/16) for previously reported errors, or [join the Mattermost user community for troubleshooting help](https://mattermost.com/community/).
|
||||
|
||||
</Note>
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: "System attributes"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="ent-plus" />
|
||||
|
||||
System attributes configuration settings provide system admins with centralized control over key user account properties.
|
||||
|
||||
Review and manage the following system attributes configuration options in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **System Attributes**.
|
||||
|
||||
You can define, manage, and enforce specific attributes, including:
|
||||
|
||||
- **User attributes**: Display details such as job titles, departments, or other metadata, on user profiles that align with your organizational structures and workflows. Learn more about [managing user attributes](/administration-guide/manage/admin/user-attributes). API responses for user attributes return default visibility and sort order when those values are missing.
|
||||
- **Granular access controls based on user attributes**: Ensure users have access to only the resources and functionality relevant to their roles, bolstering security and compliance across the organization. Learn more about [managing access based on user attributes](/administration-guide/manage/admin/attribute-based-access-control).
|
||||
- **Control user-managed attributes in attribute-based access control (ABAC)**: From Mattermost v10.11 (Enterprise Edition Advanced), user-managed attributes are excluded from ABAC rules by default to prevent unauthorized access. System admins can enable them with a configuration setting. Learn more about enabling user-managed attributes in ABAC rules in the [User Attributes documentation](/administration-guide/manage/admin/user-attributes#before-you-begin).
|
||||
@@ -0,0 +1,687 @@
|
||||
---
|
||||
title: "User management configuration settings"
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
<PlanAvailability slug="all-commercial" />
|
||||
|
||||
Review and manage the following in the System Console by selecting the **Product** <img src={useBaseUrl('/img/ui/products_E82F.svg')} alt="Navigate between Channels, collaborative playbooks, and boards using the product menu icon." className="theme-icon" /> menu, selecting **System Console**, and then selecting **User Management**:
|
||||
|
||||
- [Users](#users)
|
||||
- [Groups](#groups)
|
||||
- [Teams](#teams)
|
||||
- [Channels](#channels)
|
||||
- [Permissions](#permissions)
|
||||
- [System roles](#system-roles)
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Users
|
||||
|
||||
Mattermost system admins can provision and manage user accounts, team membership, roles and permissions, and update user email addresses, usernames, and authentication data.
|
||||
|
||||
### Provision users
|
||||
|
||||
Getting people set up with a Mattermost account is typically something that system admins do when deploying and configuring the Mattermost deployment. A Mattermost admin can [provision Mattermost users](/administration-guide/onboard/user-provisioning-workflows) using one or more of the following methods:
|
||||
|
||||
- [Enable account creation](/administration-guide/configure/authentication-configuration-settings#enable-account-creation).
|
||||
- Use [mmctl user create](/administration-guide/manage/mmctl-command-line-tool#mmctl-user-create) or Mattermost [APIs](https://api.mattermost.com/#tag/users) to create user accounts.
|
||||
- [Migrate user accounts](/administration-guide/onboard/migrating-to-mattermost#migration-guide) from other collaboration systems and [bulk import](/administration-guide/onboard/bulk-loading-data) that user data into Mattermost.
|
||||
- Connect an authentication service to assist with user provisioning, such as [AD/LDAP authentication](/administration-guide/onboard/ad-ldap) or [SAML authentication](/administration-guide/onboard/sso-saml).
|
||||
|
||||
### Review user data
|
||||
|
||||
From Mattermost v9.6, you can review the following user data in the System Console:
|
||||
|
||||
- **Email**: The user's email address.
|
||||
- **Member since**: The number of days since the user joined the Mattermost server.
|
||||
- **Last login**: The date of the user's last successful login to the server.
|
||||
- **Last activity**: The total number of days since the user was last active on the server, which is typically based on the [user's availability](/end-user-guide/preferences/set-your-status-availability#set-your-availability).
|
||||
- **Last post**: The total number of days since the user's last sent message on the server.
|
||||
- **Days active**: (PostgreSQL only) The total number of days in which the user has sent a message in Mattermost.
|
||||
- **Messages posted**: (PostgreSQL only) The total number of messages the user has sent on the server.
|
||||
|
||||
From Mattermost v11.0, you can also review the following authentication data for each user:
|
||||
|
||||
- **Authentication Method**: Shows how users authenticate with the Mattermost server, including external authentication system details such as LDAP Distinguished Name (DN), SAML NameID, OAuth ID, or other external authentication identifiers. This information helps system administrators troubleshoot authentication issues and correlate Mattermost users with their external authentication systems.
|
||||
|
||||
By default, you see all columns of data and data for all time.
|
||||
|
||||
- Show or hide data all data columns exccept **User details** and **Actions**, as preferred.
|
||||
- Filter results to the last 30 days, the previous month, and the last 6 months for **Last post**, **Days active**, and **Messages posted** user data.
|
||||
|
||||
### Find users
|
||||
|
||||
Find a user using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Search for specific users by entering a partial or full username, user ID, first name, last name, or email address in the **Search** field and pressing <kbd>Enter</kbd>.
|
||||
|
||||

|
||||
|
||||
### Filter user searches
|
||||
|
||||
Filter System Console user searches to narrow down results based on the team membership, role, and user status.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select **Filters** located to the right of the **Search users** field to access available filter options.
|
||||
3. Select **Apply** to filter user search results.
|
||||
|
||||

|
||||
|
||||
### Identify a user's ID
|
||||
|
||||
Users can be specified in Mattermost by username or user ID. Usernames automatically resolve when a match is detected. Identify a user's ID using the System Console, the Mattermost API, or mmctl.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select a **User** to review their ID in the User Configuration page.
|
||||
|
||||

|
||||
|
||||
Alternatively, identify a user's ID using the Mattermost API or mmctl:
|
||||
|
||||
- Using the Mattermost API, make an HTTP GET request to the following endpoint: `https://your-mattermost-url/api/v4/users/username/username_here`. Replace `your-mattermost-url` with the URL of your Mattermost instance and `username_here` with the username you are looking for. The API response contains a JSON object that includes the user's ID among other details.
|
||||
- Using mmctl, in a terminal window, use the following command to list all users and their IDs: `mmctl user list` to return a list of user IDs.
|
||||
|
||||
### Export user data
|
||||
|
||||
From Mattermost v9.6, Mattermost Enterprise and Professional customers can export user data as a CSV report.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. [Filter](#filter-user-searches) the user data as needed.
|
||||
3. Select **Export** located in the top right corner of the System Console interface, and then select **Export data**. You'll receive the report in CSV format as a direct message in Mattermost.
|
||||
|
||||
### Deactivate users
|
||||
|
||||
To delete a user from your Mattermost deployment, you can deactivate the user's account. Deactivated users have an deactivated status, are logged out of Mattermost as soon as they are deactivated, and deactivated users can no longer log back in. You can manage the user's role, password, and email address while a user's account is deactivated.
|
||||
|
||||
<Note>
|
||||
|
||||
- From Mattermost v10.10, when a user account is deactivated, the account's [availability](/end-user-guide/preferences/set-your-status-availability#set-your-availability) is automatically set to offline.
|
||||
- LDAP-managed users must be deactivated through LDAP, and can't be deactivated using the System Console or the API.
|
||||
|
||||
</Note>
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select a **User** that you wish to activate or deactivate.
|
||||
3. If the selected user is currently active, you can find the **Deactivate** button in the **User Configuration** page.
|
||||
4. Select **Deactivate**, and confirm the deactivation. You can re-activate a deactivated user by selecting **Activate**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
Re-activate a deactivated user by selecting **Activate**.
|
||||
|
||||
</Tip>
|
||||
|
||||
#### What happens to deactivated user integrations?
|
||||
|
||||
If you deactivate a Mattermost user who has integrations tied to their user account, consider the following consequences and recommendations based on the integration type:
|
||||
|
||||
- **Slash commands** will continue to work after user deactivation. Consider deleting the existing slash command and creating a new slash command associated with a different user account to decouple sensitive token data from the deactivated user account. Alternatively, consider regenerating the token of the existing slash command. Check that the deactivated user doesn't have access to the slash command **Request URL** which is the callback URL to receive the HTTP POST or GET event request when the slash command is run.
|
||||
- **Outgoing webhooks** will continue to work after user deactivation. Consider regenerating the webhook token and check that the deactivated user no longer has access to the callback URLs, as having access would result in the deactivating user receiving the outgoing webhooks.
|
||||
- **Incoming webhooks** will continue to work after user deactivation. Because the [URL produced](https://developers.mattermost.com/integrate/webhooks/incoming/#create-an-incoming-webhook) includes `xxx-generatedkey-xxx`, anyone who has the URL can post messages to the Mattermost instance. We recommend removing the incoming webhook and creating a new one associated with a different user account.
|
||||
- **Bot accounts** won't continue to work after user deactivation when the [disable bot accounts when owner is deactivated](/administration-guide/configure/integrations-configuration-settings#disable-bot-accounts-when-owner-is-deactivated) is enabled. This configuration setting is enabled by default.
|
||||
- **OAuth apps** won't continue to work after user deactivation, and associated tokens are deleted. Manual action is needed to keep these integrations running.
|
||||
|
||||
### Manage user attributes
|
||||
|
||||
From Mattermost v11.1, you can can view and update user attribute values for individual users directly from the System Console. This capability provides a centralized way to manage user profile attributes without requiring users to update their own profiles or using [mmctl user attribute commands](/administration-guide/manage/mmctl-command-line-tool#mmctl-cpa).
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select a **User** to open their User Configuration page.
|
||||
3. Scroll to the **User Attributes** section to view and edit the user's attribute values.
|
||||
4. Update attribute values as needed and save your changes.
|
||||
|
||||
<Note>
|
||||
|
||||
- User attributes must be created first through **System Console \> Site Configuration \> System Attributes \> User Attributes** before they can be edited in individual user profiles. See the [User attributes](/administration-guide/manage/admin/user-attributes) documentation for details on creating and configuring attributes.
|
||||
- Users can edit their own attributes if that attribute is configured as [user-editable](/administration-guide/manage/admin/user-attributes#admin-managed-vs-user-editable-attributes).
|
||||
|
||||
</Note>
|
||||
|
||||
### Delete users
|
||||
|
||||
From Mattermost v10.11, when using email/password for authentication, you can enable users to permanently delete their own accounts, or you can delete user accounts as a system administrator.
|
||||
|
||||
#### Enable account deletion
|
||||
|
||||
Define the URL for a **Delete Account Link** that users can access by going to their profile and selecting **Security \> Delete Your Account**. Leave this field blank to hide the abiltiy for users to delete their account.
|
||||
|
||||
<table style={{width: '90%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '90%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>This feature's <code>config.json</code> setting is <code>"ServiceSettings.DeleteAccountLink": ""</code> with string input.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
When a user deletes their account, deleted accounts cannot be reactivated, and the user is automatically removed from all teams and channels.
|
||||
|
||||
#### What data is removed?
|
||||
|
||||
When an account is permanently deleted, the following data is permanently removed:
|
||||
|
||||
- User profile information (name, email, username)
|
||||
- User preferences and settings
|
||||
- User authentication credentials
|
||||
- Direct message channel memberships
|
||||
- Team and channel memberships
|
||||
- User session data
|
||||
- All posts and replies authored by the deleted user
|
||||
- File uploads and attachments shared in channels by the user
|
||||
- All webhooks, slash commands and OAuth apps created by the user
|
||||
|
||||
#### What data is retained?
|
||||
|
||||
After account deletion, audit logs referencing the user's actions, channel and team membership are retained.
|
||||
|
||||
### Manage user's roles
|
||||
|
||||
Apply roles to users using the System Console. The current available roles are **System admin** and **Member**.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Under **Actions**, select **Manage roles**.
|
||||
3. Specify whether the user has the role of **System admin** or **Member**, and then select **Save**.
|
||||
|
||||

|
||||
|
||||
### Manage user's teams
|
||||
|
||||
Add or remove users from teams using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user you want to manage.
|
||||
3. You can include the user in one new team or a group of teams. Select **Add Team**, select one or more teams, and then select **Add**.
|
||||
|
||||

|
||||
|
||||
4. To remove the user from a specific team, select **More** <img src={useBaseUrl('/img/ui/dots-horizontal_F01D8.svg')} alt="Use the More icon to access additional message options." className="theme-icon" /> next to the team name, and select **Remove from team**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
You can also remove the user from a specific team from the **Actions** column on the **Users** page. Select **Manage Teams**, and then select **Remove from Team** for applicable teams.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Manage user's settings
|
||||
|
||||
<PlanAvailability slug="ent-plus" />
|
||||
|
||||
From Mattermost v9.11, system admins can help end users customize their Mattermost notifications by editing the user's [notification settings](/end-user-guide/preferences/manage-your-notifications) on the user's behalf within the System Console. Users can view, modify, and override their own settings at any time.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user you want to manage.
|
||||
3. Select **Manage User Settings**.
|
||||
4. In **Admin Mode**, modify the user's settings as needed. Saved changes take effect immediately in the user's account.
|
||||
|
||||
### Reset login attempts
|
||||
|
||||
If a user, whose account details are synchronized with AD/LDAP, can't access their Mattermost account due to too many failed login attempts, you can reset the number of failed login attempts for their user account in the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Under **Actions**, select **Reset login attempts**.
|
||||
|
||||
<Note>
|
||||
|
||||
To adjust the maximum login attempts allowed for all users, go to **System Console \> Authentication \> AD/LDAP \> Maximum Login Attempts**. Lowering this [configuration setting](/administration-guide/configure/authentication-configuration-settings#maximum-login-attempts) value below the maximum threshhold allowed on your AD/LDAP server will ensure that your users won’t get locked out of AD/LDAP due to failed login attempts in Mattermost.
|
||||
|
||||
</Note>
|
||||
|
||||
### Update user's email
|
||||
|
||||
Update the emails of users using the System Console.
|
||||
|
||||
<Note>
|
||||
|
||||
From Mattermost v10.9, email addresses enclosed in angle brackets (e.g., `[billy@example.com](mailto:billy@example.com)`) will be rejected. To avoid issues, ensure all user emails comply with the plain address format (e.g., `billy@example.com`). In addition, we strongly recommend taking proactive steps to audit and update Mattermost user data to align with this product change, as impacted users may face issues accessing Mattermost or managing their user profile. You can update these user emails manually using [mmctl user email](/administration-guide/manage/mmctl-command-line-tool#mmctl-user-email).
|
||||
|
||||
</Note>
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user, and enter a new email in the **Email** field.
|
||||
3. Select **Save**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
You can also update the email from the **Actions** column on the **Users** page. Select **Update email**, enter the new email for the user, and then select **Save**.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Update user's username
|
||||
|
||||
From Mattermost 11.6: Update the username of a user using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user, and enter a new username in the **Username** field.
|
||||
3. Select **Save**.
|
||||
|
||||
### Update user's authentication data
|
||||
|
||||
From Mattermost 11.6: System admins can view and update the authentication data (AuthData) for a user directly in the System Console. AuthData is the external identifier associated with the user's authentication method, such as an LDAP Distinguished Name (DN), SAML NameID, or OAuth ID. Updating this field is useful when a user's external authentication identifier changes, for example after an identity provider migration.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user to open their User Configuration page.
|
||||
3. In the **Authentication** section, view or update the user's authentication data value.
|
||||
4. Select **Save**.
|
||||
|
||||
### Reset user's password
|
||||
|
||||
Reset a user's password using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user from the list, and then select **Reset Password**.
|
||||
3. Enter a new password and select **Reset**.
|
||||
|
||||

|
||||
|
||||
You can also reset the password using the **Actions** column for the specific user on the **Users** page. Select **Reset password** from the **Actions** column dropdown, enter the new password in the pop-up dialog box and select **Reset**.
|
||||
|
||||
### Revoke a user's session
|
||||
|
||||
Revoke the user sessions in case of an emergency to secure the user account using the System Console. This logs the user out of all devices.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Under the **Actions** column for the specific user, select **Remove sessions**.
|
||||
3. Select **Revoke** to remove all sessions for that user.
|
||||
|
||||

|
||||
|
||||
### Review user profile details
|
||||
|
||||
View user profile details using the System Console. Gather information including the user's ID, username, email, authentication method, and team memberships.
|
||||
|
||||
1. Go to **System Console \> User Management \> Users** to access all user accounts.
|
||||
2. Select the user from the list, and browse user details.
|
||||
|
||||

|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Groups
|
||||
|
||||
<table style={{width: '99%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '46%'}} />
|
||||
<col style={{width: '45%'}} />
|
||||
<col style={{width: '7%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Manage default teams and channels by linking AD/LDAP groups to Mattermost groups.</td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>User Management > Groups</strong></li>
|
||||
<li><code>config.json setting</code>: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">See the <a href="/administration-guide/onboard/ad-ldap-groups-synchronization">AD/LDAP groups</a> documentation for details. |</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Teams
|
||||
|
||||
### Find Teams
|
||||
|
||||
You can find existing teams in your Mattermost instance using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Enter the team name in the **Search** box.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
From Mattermost v9.6, you can search for specific teams by entering a partial or full team name in the **Search** field and pressing <kbd>Enter</kbd>.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Filter team searches
|
||||
|
||||
Filter your team search to narrow down results based on the team management type (anyone can join, invite only, or group sync).
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select **Filters** located to the right of the **Search** field to access available filter options.
|
||||
3. Choose any filter and select **Apply** to filter team search results.
|
||||
|
||||

|
||||
|
||||
### Review team configuration
|
||||
|
||||
View team configuration details using the System Console. Gather information including the team name, team description, team management options, groups, and members.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
|
||||

|
||||
|
||||
### Manage team membership
|
||||
|
||||
Admins can directly add or remove member from the team and customize how members are added to the team using the System Console.
|
||||
|
||||
#### Add members
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Members** section, select **Add Members**.
|
||||
4. Select an user or available bot from the list or try using the **Search** to find a specific one.
|
||||
5. Select **Add** to add the user or bot.
|
||||
6. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Remove members
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Members** section, select **Remove** for the user or bot that you want to remove.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Sync group members
|
||||
|
||||
When enabled, adding and removing users from groups will add or remove them from this team. The only way of inviting members to this team is by adding the groups they belong to. See the [Synchronize teams and channels](/administration-guide/onboard/ad-ldap-groups-synchronization#synchronize-teams-and-channels) documentation for further details.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Team Management** section, enable the **Sync Group Members** option.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Anyone can join this team
|
||||
|
||||
This team can be discovered allowing anyone with an account to join this team.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Team Management** section, enable the **Anyone can join this team** option.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Only specific email domains can join this team
|
||||
|
||||
Users can only join the team if their email matches one of the specified domains.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Team Management** section, enable the **Only specific email domains can join this team** option and add the specific domains.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
### Manage membership with attribute based membership policies
|
||||
|
||||
<PlanAvailability slug="entry-adv" />
|
||||
|
||||
From Mattermost v11.10, control who can be a member of this team based on their user attributes.
|
||||
|
||||
On private teams the rules are enforced: users who don't match can't join, and members who no longer match are removed at the next sync. On public teams the rules are advisory — the team is recommended to qualifying users, but anyone can still join.
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Team Management** section, enable the **Manage membership with attribute based membership policies** option. The **Membership policies** and **Team-specific membership rules** sections appear once this option is enabled.
|
||||
4. Link a system-wide policy, define team-specific rules, or both.
|
||||
5. Select **Save**.
|
||||
|
||||
This option is unavailable on group-synced teams, because group sync and attribute-based membership are mutually exclusive.
|
||||
|
||||
Team Admins with the **Manage Team Access Rules** permission can also define team membership rules from the **Team Membership** tab in [Team Settings](/end-user-guide/collaborate/team-settings), without access to the System Console.
|
||||
|
||||
See [Team membership access policies](/administration-guide/manage/admin/abac-team-membership) for full details.
|
||||
|
||||
### Synchronize team members
|
||||
|
||||
Admins can choose between inviting members to a team manually or synchronizing members automatically from AD/LDAP groups. See the [using AD/LDAP synchronized groups](/administration-guide/onboard/ad-ldap-groups-synchronization#synchronize-adldap-groups-to-mattermost) documentation for details on managing team or private channel membership.
|
||||
|
||||
### Archive the team
|
||||
|
||||
1. Go to **System Console \> User Management \> Teams** to access all available teams.
|
||||
2. Select the team from the list to view its configuration page.
|
||||
3. In the **Team Profile** section, select **Archive Team**.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Channels
|
||||
|
||||
### Find Channels
|
||||
|
||||
Find existing channels in your Mattermost instance using the System Console.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Enter the channel name in the **Search** box.
|
||||
|
||||

|
||||
|
||||
### Filter channel searches
|
||||
|
||||
Filter your channel search to narrow down results based on the channel type (as public, private or archived), channel management type (group sync or manual invites) or based on the team the channel belongs to.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select **Filters** located to the right of the **Search** field to access available filter options.
|
||||
3. Choose any filter and select **Apply** to filter channel search results.
|
||||
|
||||

|
||||
|
||||
### Review channel configuration
|
||||
|
||||
View channel configuration details using the System Console. Gather information including the channel profile, advanced access controls, channel management options, groups, and members.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select a channel from the list to review its channel configuration details.
|
||||
|
||||

|
||||
|
||||
### Advanced Access Control
|
||||
|
||||
Manage the Management actions available to channel members and guests.
|
||||
|
||||
#### Create Posts
|
||||
|
||||
The ability for members and guests to create posts in the channel.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select a channel from the list to view its configuration page.
|
||||
3. In the **Create Posts** section under the **Advanced Access Control** tab, select the option for **Guests**, **Members**, or both to enable those users to post messages in the channel.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Post Reactions
|
||||
|
||||
The ability for members and guests to react with emojis on messages in the channel.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select a channel from the list to view its configuration page.
|
||||
3. In the **Post Reactions** section under the **Advanced Access Control** tab, select the option for **Guests**, **Members**, or both to enable those users to react with emojis on messages posted to the channel.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Manage Members
|
||||
|
||||
The ability for members to add and remove people from the channels. Guests can't add or remove people from channels.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select a channel from the list to view its configuration page.
|
||||
3. In the **Manage Members** section under the **Advanced Access Control** tab, select **Members** to enable those users to manage members for the channel.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Channel Mentions
|
||||
|
||||
The ability for members and guests to use channel mentions, including **@all**, **@here**, and **@channel**, in the channel.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Channel Mentions** section under the **Advanced Access Control** tab, select the option for **Guests**, **Members**, or both to enable those users to use channel mentions.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
**Guests** and **Members** can't use channel mentions without the ability to **Create Posts**. To enable this permission, these users must have been granted **Create Posts** permission first.
|
||||
|
||||
</Tip>
|
||||
|
||||
#### Manage Bookmarks
|
||||
|
||||
The ability for members to add, delete, and sort bookmarks. Guests can't add, remove, or sort bookmarks for the channel.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Manage Bookmarks** section under the **Advanced Access Control** tab, select **Members** to enable those users to add, sort, or remove bookmarks for the channel.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
The ability to manage bookmarks for the channel is available for **Members** only. **Guests** can't add, remove or sort bookmarks for the channel.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Channel Management
|
||||
|
||||
Choose between inviting members manually or sychronizing members automatically from groups.
|
||||
|
||||
#### Sync Group Members
|
||||
|
||||
When enabled, adding and removing users from groups will add or remove them from this team. The only way of inviting members to this team is by adding the groups they belong to. See the [Synchronize teams and channels](/administration-guide/onboard/ad-ldap-groups-synchronization#synchronize-teams-and-channels) documentation for further details.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Channel Management** tab, enable the **Sync Group Members** option.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Public channel or private channel
|
||||
|
||||
Public channels are discoverable and any user can join. Private channels require invitations to join.
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Public channel or private channel** section under the **Channel Management** tab, toggle between **Public** or **Private** to change channel visibility.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
When Group Sync is enabled, private channels can't be converted to public channels.
|
||||
|
||||
</Tip>
|
||||
|
||||
### Members
|
||||
|
||||
Choose between inviting members manually or synchronizing members automatically from groups.
|
||||
|
||||
#### Add members
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Members** section, select **Add Members**.
|
||||
4. Use the **Search** box to find a specific user or group to add to the channel.
|
||||
5. Select **Add** to add the user or group as a **Member**.
|
||||
6. Select **Save**.
|
||||
|
||||

|
||||
|
||||
#### Remove members
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Members** section, select **Remove** for the user that you want to remove.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
### Archive a channel
|
||||
|
||||
1. Go to **System Console \> User Management \> Channels** to access all available channels.
|
||||
2. Select the channel from the list to view its configuration page.
|
||||
3. In the **Channel Profile** section, select **Archive Channel**.
|
||||
4. Select **Save**.
|
||||
|
||||

|
||||
|
||||
<Tip>
|
||||
|
||||
Channels can be deleted with all content, including posts in the database, using the [mmctl channel delete](/administration-guide/manage/mmctl-command-line-tool#mmctl-channel-delete) tool.
|
||||
|
||||
</Tip>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Permissions
|
||||
|
||||
<table style={{width: '99%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '48%'}} />
|
||||
<col style={{width: '43%'}} />
|
||||
<col style={{width: '6%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Restrict actions in Mattermost to authorized users only.</td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>User Management > Permissions</strong></li>
|
||||
<li><code>config.json setting</code>: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">See <a href="/administration-guide/onboard/advanced-permissions">advanced permissions</a> documentation for details</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
## System roles
|
||||
|
||||
<PlanAvailability slug="pro-plus" />
|
||||
|
||||
<table style={{width: '99%'}}>
|
||||
<colgroup>
|
||||
<col style={{width: '49%'}} />
|
||||
<col style={{width: '42%'}} />
|
||||
<col style={{width: '6%'}} />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Restrict System Console access to authorized users only.</td>
|
||||
<td><ul>
|
||||
<li>System Config path: <strong>User Management > System Roles</strong></li>
|
||||
<li><code>config.json setting</code>: N/A</li>
|
||||
<li>Environment variable: N/A</li>
|
||||
</ul></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3">See the <a href="/administration-guide/onboard/delegated-granular-administration">delegated granular administration</a> documentation for details |</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
Reference in New Issue
Block a user