Merge branch 'main' into main

This commit is contained in:
Mauricio Siu
2026-02-15 21:12:40 -06:00
committed by GitHub
35 changed files with 3457 additions and 257 deletions

View File

@@ -78,6 +78,15 @@ _openapi:
- depth: 2
title: Notification test Lark Connection
url: '#notification-test-lark-connection'
- depth: 2
title: Notification create Pushover
url: '#notification-create-pushover'
- depth: 2
title: Notification update Pushover
url: '#notification-update-pushover'
- depth: 2
title: Notification test Pushover Connection
url: '#notification-test-pushover-connection'
- depth: 2
title: Notification get Email Providers
url: '#notification-get-email-providers'
@@ -133,9 +142,15 @@ _openapi:
id: notification-update-lark
- content: Notification test Lark Connection
id: notification-test-lark-connection
- content: Notification create Pushover
id: notification-create-pushover
- content: Notification update Pushover
id: notification-update-pushover
- content: Notification test Pushover Connection
id: notification-test-pushover-connection
- content: Notification get Email Providers
id: notification-get-email-providers
contents: []
---
<APIPage document={"./public/openapi.json"} operations={[{"method":"post","path":"/notification.createSlack"},{"method":"post","path":"/notification.updateSlack"},{"method":"post","path":"/notification.testSlackConnection"},{"method":"post","path":"/notification.createTelegram"},{"method":"post","path":"/notification.updateTelegram"},{"method":"post","path":"/notification.testTelegramConnection"},{"method":"post","path":"/notification.createDiscord"},{"method":"post","path":"/notification.updateDiscord"},{"method":"post","path":"/notification.testDiscordConnection"},{"method":"post","path":"/notification.createEmail"},{"method":"post","path":"/notification.updateEmail"},{"method":"post","path":"/notification.testEmailConnection"},{"method":"post","path":"/notification.remove"},{"method":"get","path":"/notification.one"},{"method":"get","path":"/notification.all"},{"method":"post","path":"/notification.receiveNotification"},{"method":"post","path":"/notification.createGotify"},{"method":"post","path":"/notification.updateGotify"},{"method":"post","path":"/notification.testGotifyConnection"},{"method":"post","path":"/notification.createNtfy"},{"method":"post","path":"/notification.updateNtfy"},{"method":"post","path":"/notification.testNtfyConnection"},{"method":"post","path":"/notification.createLark"},{"method":"post","path":"/notification.updateLark"},{"method":"post","path":"/notification.testLarkConnection"},{"method":"get","path":"/notification.getEmailProviders"}]} hasHead={true} />
<APIPage document={"./public/openapi.json"} operations={[{"method":"post","path":"/notification.createSlack"},{"method":"post","path":"/notification.updateSlack"},{"method":"post","path":"/notification.testSlackConnection"},{"method":"post","path":"/notification.createTelegram"},{"method":"post","path":"/notification.updateTelegram"},{"method":"post","path":"/notification.testTelegramConnection"},{"method":"post","path":"/notification.createDiscord"},{"method":"post","path":"/notification.updateDiscord"},{"method":"post","path":"/notification.testDiscordConnection"},{"method":"post","path":"/notification.createEmail"},{"method":"post","path":"/notification.updateEmail"},{"method":"post","path":"/notification.testEmailConnection"},{"method":"post","path":"/notification.remove"},{"method":"get","path":"/notification.one"},{"method":"get","path":"/notification.all"},{"method":"post","path":"/notification.receiveNotification"},{"method":"post","path":"/notification.createGotify"},{"method":"post","path":"/notification.updateGotify"},{"method":"post","path":"/notification.testGotifyConnection"},{"method":"post","path":"/notification.createNtfy"},{"method":"post","path":"/notification.updateNtfy"},{"method":"post","path":"/notification.testNtfyConnection"},{"method":"post","path":"/notification.createLark"},{"method":"post","path":"/notification.updateLark"},{"method":"post","path":"/notification.testLarkConnection"},{"method":"post","path":"/notification.createPushover"},{"method":"post","path":"/notification.updatePushover"},{"method":"post","path":"/notification.testPushoverConnection"},{"method":"get","path":"/notification.getEmailProviders"}]} hasHead={true} />

View File

@@ -21,6 +21,9 @@ _openapi:
- depth: 2
title: Registry test Registry
url: '#registry-test-registry'
- depth: 2
title: Registry test Registry By Id
url: '#registry-test-registry-by-id'
structuredData:
headings:
- content: Registry create
@@ -35,9 +38,11 @@ _openapi:
id: registry-one
- content: Registry test Registry
id: registry-test-registry
- content: Registry test Registry By Id
id: registry-test-registry-by-id
contents: []
---
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
<APIPage document={"./public/openapi.json"} webhooks={[]} operations={[{"path":"/registry.create","method":"post"},{"path":"/registry.remove","method":"post"},{"path":"/registry.update","method":"post"},{"path":"/registry.all","method":"get"},{"path":"/registry.one","method":"get"},{"path":"/registry.testRegistry","method":"post"}]} showTitle={true} />
<APIPage document={"./public/openapi.json"} webhooks={[]} operations={[{"path":"/registry.create","method":"post"},{"path":"/registry.remove","method":"post"},{"path":"/registry.update","method":"post"},{"path":"/registry.all","method":"get"},{"path":"/registry.one","method":"get"},{"path":"/registry.testRegistry","method":"post"},{"path":"/registry.testRegistryById","method":"post"}]} showTitle={true} />

View File

@@ -3,6 +3,9 @@ title: Settings
full: true
_openapi:
toc:
- depth: 2
title: Settings get Web Server Settings
url: '#settings-get-web-server-settings'
- depth: 2
title: Settings reload Server
url: '#settings-reload-server'
@@ -93,6 +96,9 @@ _openapi:
- depth: 2
title: Settings get Ip
url: '#settings-get-ip'
- depth: 2
title: Settings update Server Ip
url: '#settings-update-server-ip'
- depth: 2
title: Settings get Open Api Document
url: '#settings-get-open-api-document'
@@ -143,6 +149,8 @@ _openapi:
url: '#settings-get-dokploy-cloud-ips'
structuredData:
headings:
- content: Settings get Web Server Settings
id: settings-get-web-server-settings
- content: Settings reload Server
id: settings-reload-server
- content: Settings clean Redis
@@ -203,6 +211,8 @@ _openapi:
id: settings-read-traefik-file
- content: Settings get Ip
id: settings-get-ip
- content: Settings update Server Ip
id: settings-update-server-ip
- content: Settings get Open Api Document
id: settings-get-open-api-document
- content: Settings read Traefik Env
@@ -240,4 +250,4 @@ _openapi:
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
<APIPage document={"./public/openapi.json"} webhooks={[]} operations={[{"path":"/settings.reloadServer","method":"post"},{"path":"/settings.cleanRedis","method":"post"},{"path":"/settings.reloadRedis","method":"post"},{"path":"/settings.reloadTraefik","method":"post"},{"path":"/settings.toggleDashboard","method":"post"},{"path":"/settings.cleanUnusedImages","method":"post"},{"path":"/settings.cleanUnusedVolumes","method":"post"},{"path":"/settings.cleanStoppedContainers","method":"post"},{"path":"/settings.cleanDockerBuilder","method":"post"},{"path":"/settings.cleanDockerPrune","method":"post"},{"path":"/settings.cleanAll","method":"post"},{"path":"/settings.cleanMonitoring","method":"post"},{"path":"/settings.saveSSHPrivateKey","method":"post"},{"path":"/settings.assignDomainServer","method":"post"},{"path":"/settings.cleanSSHPrivateKey","method":"post"},{"path":"/settings.updateDockerCleanup","method":"post"},{"path":"/settings.readTraefikConfig","method":"get"},{"path":"/settings.updateTraefikConfig","method":"post"},{"path":"/settings.readWebServerTraefikConfig","method":"get"},{"path":"/settings.updateWebServerTraefikConfig","method":"post"},{"path":"/settings.readMiddlewareTraefikConfig","method":"get"},{"path":"/settings.updateMiddlewareTraefikConfig","method":"post"},{"path":"/settings.getUpdateData","method":"post"},{"path":"/settings.updateServer","method":"post"},{"path":"/settings.getDokployVersion","method":"get"},{"path":"/settings.getReleaseTag","method":"get"},{"path":"/settings.readDirectories","method":"get"},{"path":"/settings.updateTraefikFile","method":"post"},{"path":"/settings.readTraefikFile","method":"get"},{"path":"/settings.getIp","method":"get"},{"path":"/settings.getOpenApiDocument","method":"get"},{"path":"/settings.readTraefikEnv","method":"get"},{"path":"/settings.writeTraefikEnv","method":"post"},{"path":"/settings.haveTraefikDashboardPortEnabled","method":"get"},{"path":"/settings.haveActivateRequests","method":"get"},{"path":"/settings.toggleRequests","method":"post"},{"path":"/settings.isCloud","method":"get"},{"path":"/settings.isUserSubscribed","method":"get"},{"path":"/settings.health","method":"get"},{"path":"/settings.setupGPU","method":"post"},{"path":"/settings.checkGPUStatus","method":"get"},{"path":"/settings.updateTraefikPorts","method":"post"},{"path":"/settings.getTraefikPorts","method":"get"},{"path":"/settings.updateLogCleanup","method":"post"},{"path":"/settings.getLogCleanupStatus","method":"get"},{"path":"/settings.getDokployCloudIps","method":"get"}]} showTitle={true} />
<APIPage document={"./public/openapi.json"} webhooks={[]} operations={[{"path":"/settings.getWebServerSettings","method":"get"},{"path":"/settings.reloadServer","method":"post"},{"path":"/settings.cleanRedis","method":"post"},{"path":"/settings.reloadRedis","method":"post"},{"path":"/settings.reloadTraefik","method":"post"},{"path":"/settings.toggleDashboard","method":"post"},{"path":"/settings.cleanUnusedImages","method":"post"},{"path":"/settings.cleanUnusedVolumes","method":"post"},{"path":"/settings.cleanStoppedContainers","method":"post"},{"path":"/settings.cleanDockerBuilder","method":"post"},{"path":"/settings.cleanDockerPrune","method":"post"},{"path":"/settings.cleanAll","method":"post"},{"path":"/settings.cleanMonitoring","method":"post"},{"path":"/settings.saveSSHPrivateKey","method":"post"},{"path":"/settings.assignDomainServer","method":"post"},{"path":"/settings.cleanSSHPrivateKey","method":"post"},{"path":"/settings.updateDockerCleanup","method":"post"},{"path":"/settings.readTraefikConfig","method":"get"},{"path":"/settings.updateTraefikConfig","method":"post"},{"path":"/settings.readWebServerTraefikConfig","method":"get"},{"path":"/settings.updateWebServerTraefikConfig","method":"post"},{"path":"/settings.readMiddlewareTraefikConfig","method":"get"},{"path":"/settings.updateMiddlewareTraefikConfig","method":"post"},{"path":"/settings.getUpdateData","method":"post"},{"path":"/settings.updateServer","method":"post"},{"path":"/settings.getDokployVersion","method":"get"},{"path":"/settings.getReleaseTag","method":"get"},{"path":"/settings.readDirectories","method":"get"},{"path":"/settings.updateTraefikFile","method":"post"},{"path":"/settings.readTraefikFile","method":"get"},{"path":"/settings.getIp","method":"get"},{"path":"/settings.updateServerIp","method":"post"},{"path":"/settings.getOpenApiDocument","method":"get"},{"path":"/settings.readTraefikEnv","method":"get"},{"path":"/settings.writeTraefikEnv","method":"post"},{"path":"/settings.haveTraefikDashboardPortEnabled","method":"get"},{"path":"/settings.haveActivateRequests","method":"get"},{"path":"/settings.toggleRequests","method":"post"},{"path":"/settings.isCloud","method":"get"},{"path":"/settings.isUserSubscribed","method":"get"},{"path":"/settings.health","method":"get"},{"path":"/settings.setupGPU","method":"post"},{"path":"/settings.checkGPUStatus","method":"get"},{"path":"/settings.updateTraefikPorts","method":"post"},{"path":"/settings.getTraefikPorts","method":"get"},{"path":"/settings.updateLogCleanup","method":"post"},{"path":"/settings.getLogCleanupStatus","method":"get"},{"path":"/settings.getDokployCloudIps","method":"get"}]} showTitle={true} />

View File

@@ -10,6 +10,7 @@
"resend",
"gotify",
"ntfy",
"pushover",
"webhook"
]
}

View File

@@ -30,5 +30,6 @@ Dokploy supports the following notification providers:
6. **Resend**: Resend is a modern email API for developers to send transactional emails.
7. **Gotify**: Gotify is a self-hosted push notification service.
8. **Ntfy**: Ntfy is a simple HTTP-based pub-sub notification service.
8. **Pushover**: Pushover is a service for sending real-time notifications to Android, iOS, and desktop devices.
9. **Webhook**: Webhook is a generic webhook notification service.

View File

@@ -0,0 +1,27 @@
---
title: Pushover
description: 'Configure Pushover notifications for your applications.'
---
Pushover notifications are a great way to stay up to date with important events in your Dokploy panel. You can choose to receive notifications for specific events or all events.
## Pushover Notifications
To start receiving Pushover notifications, you need to fill the form with the following details:
- **Name**: Enter any name you want.
- **User Key**: Enter your Pushover user key. eg. `ub3de9kl2q...`
- **API Token**: Enter your Pushover application API token. eg. `a3d9k2q7m4...`
- **Priority**: Enter the priority of the notification (-2 to 2, default: 0).
- `-2`: Lowest priority (no sound/vibration)
- `-1`: Low priority (no sound/vibration)
- `0`: Normal priority (default)
- `1`: High priority (bypasses quiet hours)
- `2`: Emergency priority (requires acknowledgment)
For emergency priority (2), you must also provide:
- **Retry**: How often (in seconds) Pushover will retry the notification. Minimum 30 seconds.
- **Expire**: How long (in seconds) to keep retrying. Maximum 10800 seconds (3 hours).
To setup the Pushover notifications, you can read the [Pushover Documentation](https://pushover.net/api).

View File

@@ -36,11 +36,11 @@ The repo have everything you need, however you can follow the same idea for your
</Callout>
3. The repository already have a Dockerfile, so we will use that, in the case your application is different create your own Dockerfile is required for this guide.
4. We will use `Dockerhub` as an example, but you can use any container registry that you want.
5. Make sure to create the repository in the `Dockerhub` , `namespace` is your username and `repository` is `example`.
6. Create a new Github Actions workflow in `.github/workflows/deploy.yml`
7. Add the following code to the workflow:
2. The repository already have a Dockerfile, so we will use that, in the case your application is different create your own Dockerfile is required for this guide.
3. We will use `Dockerhub` as an example, but you can use any container registry that you want.
4. Make sure to create the repository in the `Dockerhub` , `namespace` is your username and `repository` is `example`.
5. Create a new Github Actions workflow in `.github/workflows/deploy.yml`
6. Add the following code to the workflow:
```yaml
name: Build Docker images
@@ -74,7 +74,7 @@ jobs:
namespace/example:latest
platforms: linux/amd64
```
8. Create your own Dockerfile, in this case we will use the `Dockerfile` from the repository.
7. Create your own Dockerfile, in this case we will use the `Dockerfile` from the repository.
```properties
FROM node:18-alpine AS base
@@ -103,14 +103,14 @@ EXPOSE 3000
CMD ["pnpm", "start"]
```
9. Now when you make a commit to your repository, the workflow will be triggered and the application will build and push to `Dockerhub`.
10. Now let's create application in Dokploy.
11. In `Source Type` select `Docker`
12. In the docker image field enter `namespace/example:latest`
13. Click on `Save`.
14. Click on `Deploy`.
15. Go to `Domains` and click `Dices` icon to generate a domain and the port set to `3000`.
16. Now you can access your application.
8. Now when you make a commit to your repository, the workflow will be triggered and the application will build and push to `Dockerhub`.
9. Now let's create application in Dokploy.
10. In `Source Type` select `Docker`
11. In the docker image field enter `namespace/example:latest`
12. Click on `Save`.
13. Click on `Deploy`.
14. Go to `Domains` and click `Dices` icon to generate a domain and the port set to `3000`.
15. Now you can access your application.
### Auto deploy

View File

@@ -0,0 +1,44 @@
---
title: Audit logs
description: Track user actions and changes for compliance and security
---
## What is logged
Typical events include:
- **Authentication** — Logins, logouts, failed attempts, SSO redirects.
- **Users and access** — User creation, updates, deletion, role changes, invite/revoke.
- **Resources** — Creation, update, and deletion of projects, applications, compose stacks, databases, domains, environment variables, and similar resources.
- **Deployments** — Deploy triggers, rollbacks, and related actions.
- **Settings** — Changes to organization, security, and whitelabel settings (where applicable).
Each entry usually includes:
- **Timestamp** (UTC)
- **Actor** (user ID, email, or service account)
- **Action** (e.g. `user.login`, `application.create`, `compose.deploy`)
- **Resource** (type and identifier)
- **Details** (e.g. old/new values or reason, when relevant)
- **IP address** (when available)
## Accessing audit logs
1. Go to **Settings** → **Audit logs** (or **Organization** → **Audit logs** in Enterprise).
2. Use filters by date range, user, action type, or resource.
3. Export results (e.g. CSV or JSON) for external tools or compliance reviews.
## Retention and storage
- Retention period and storage backend (e.g. database, external logging) depend on your Enterprise agreement.
- Configure retention and any archiving according to your compliance and security policies.
## Compliance
Audit logs help support:
- **SOC 2** — Evidence of access control and change management.
- **GDPR** — Documentation of access to and changes in personal data and configurations.
- **Internal policies** — Review of who changed what and when.
For retention, export formats, or integration with your SIEM or log pipeline, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,21 @@
---
title: Introduction
description: Enterprise features for SSO, whitelabeling, and audit logs
---
## What's included
- **Single Sign-On (SSO)** — Integrate with Auth0, Keycloak, or other OIDC/SAML providers.
{/* - **Whitelabeling** — Rebrand the UI with your logo, colors, and domain (self-hosted only) (). */}
{/* - **Audit logs** — Track user actions and changes for compliance and security. */}
More Enterprise features are on the way. [Contact us](https://dokploy.com/contact) if you want early access or have specific requirements.
## Contact us
For pricing and to enable Enterprise features on your instance, get in touch with our team:
**[Contact us →](https://dokploy.com/contact)**
We'll help you configure SSO, whitelabeling, and audit logs for your organization.

View File

@@ -0,0 +1,23 @@
---
title: License Keys
description: Activate and manage your Enterprise license
---
To use Enterprise features (SSO, whitelabeling, audit logs, and more), you need a valid license issued by the Dokploy team.
By default, all Dokploy instances run in the standard edition. If you are interested in switching to the Enterprise version, [contact us](https://dokploy.com/contact). Once you receive your license key, you can activate it in your instance.
## Activating your license
1. Go to **Settings** → **License** (or **Organization** → **License** in Enterprise).
2. Enter your license key and click **Activate**.
Your instance will then have access to Enterprise features for the duration of the license.
## How validation works
- The license is validated **every day** against our servers to verify that it is still valid.
- The **only data** used for validation is the **IP address** of your server. We check it against our license server to confirm that the key is valid and active for that server.
- No other data is sent or stored for license validation.
If your servers IP changes, or you have questions about your license, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,107 @@
---
title: Auth0
description: Configure SSO with Auth0 (OIDC or SAML)
---
<Tabs items={['SSO (OIDC)', 'SAML']}>
<Tab value="SSO (OIDC)">
## 1. Create an application in Auth0
1. Log in to the [Auth0 Dashboard](https://manage.auth0.com/).
2. Go to **Applications** → **Applications** → **Create Application**.
3. Choose **Regular Web Application** and create it.
4. Note your **Domain**, **Client ID**, and **Client Secret**.
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **OpenID Connect**.
3. Enter:
- **Provider**: myorg-name-auth0 (Unique)
- **Issuer URL**: `https://YOUR_AUTH0_DOMAIN/` (Make sure add the trailing slash)
- **Domain**: the domain users use to authenticate via Auth0 (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
- **Client ID**: from Auth0 application
- **Client Secret**: from Auth0 application
- **Scopes**: openid email profile
4. Save.
## 3. Configure Auth0
1. In your application, go to **Settings**.
2. Set **Allowed Callback URLs** to your Dokploy URL, for example:
- `https://your-dokploy-domain.com/api/auth/callback/myorg-name-auth0`
3. Set **Allowed Logout URLs** to:
- `https://your-dokploy-domain.com`
4. Set **Allowed Origins** to:
- `https://your-dokploy-domain.com`
5. Save changes.
## Troubleshooting (OIDC)
- **Redirect URI mismatch** — Ensure the callback URL in Dokploy matches exactly what is configured in Auth0 (including protocol and path).
- **Invalid client** — Double-check Client ID and Client Secret, and that the application is a web application.
- **Scopes** — Ensure Auth0 is configured to return `openid` and, if required, `email` and `profile`.
</Tab>
<Tab value="SAML">
## 1. Create a SAML application in Auth0
1. Log in to the [Auth0 Dashboard](https://manage.auth0.com/).
2. Go to **Applications** → **Applications** → **Create Application**.
3. Choose **Regular Web Application** and create it.
4. In the application, go to **Add Ons** → enable **SAML 2 Web App** and configure it, in the settings specify this callback URL: `https://your-dokploy-domain.com/api/auth/sso/saml2/callback/myorg-name-auth0-saml`.
5. Next & Save.
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **SAML**.
3. Enter:
- **Provider**: myorg-name-auth0-saml (unique name for this provider)
- **Issuer URL**: the Auth0 SAML Entity ID / Issuer located in `Add Ons` tab called `SAML 2 Web App` called `Entity ID` (e.g. `urn:auth0:your-tenant:your-app`)
- **SSO URL**: the Auth0 SAML Single Sign-On URL located in `Add Ons` tab called `SAML 2 Web App` called `Single Sign-On URL` (e.g. `https://dev-ladsadb.us.auth0.com/samlp/wgJe9bWmwhVnuAC7eNtyUsiou4b6wxuf`)
- **Certificate**: download the certificate active (x509) from the `Add Ons` tab called `SAML 2 Web App` called `Identity Provider Certificate` and paste it in the `Certificate` field.
- **Federation Metadata XML**: copy the Identity Provider Metadata XML from the certificate active and paste it in the `Metadata XML` field.
- **Domain**: the domain users use to authenticate via Auth0 (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
4. Save.
## 3. Configure Auth0 (SAML)
1. In your Auth0 SAML application, set the **Application Callback URL** (ACS URL) to your Dokploy SAML ACS URL, for example:
- `https://your-dokploy-domain.com/api/auth/sso/saml2/callback/myorg-name-auth0-saml`
2. In the **SAML 2 Web App** add-on, open **Settings** and paste the following JSON in the **Settings** (Application Settings) field. Replace `https://your-dokploy-domain.com` with your Dokploy base URL and `myorg-name-auth0-saml` with the **exact same provider name** you entered in Dokploy in step 2 (the callback URL path must match), so Dokploy can read email, display name, and other attributes:
```json
{
"audience": "https://your-dokploy-domain.com/saml/metadata",
"recipient": "https://your-dokploy-domain.com/api/auth/sso/saml2/callback/myorg-name-auth0-saml",
"destination": "https://your-dokploy-domain.com/api/auth/sso/saml2/callback/myorg-name-auth0-saml",
"signResponse": true,
"signAssertion": true,
"nameIdentifierFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"nameIdentifierProbes": [
"email"
],
"mappings": {
"email": "email",
"displayName": "name",
"givenName": "given_name",
"surname": "family_name"
}
}
```
4. Save.
## Troubleshooting (SAML)
- **ACS URL mismatch** — Ensure the callback/ACS URL in Auth0 matches exactly what Dokploy provides (including protocol and path).
- **Certificate** — Use the full x509 certificate from Auth0 (PEM format); ensure no extra spaces or line breaks.
- **Entity ID** — The Entity ID in Dokploy must match the Issuer/Entity ID configured in Auth0.
</Tab>
</Tabs>
For help with your setup, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,88 @@
---
title: Azure AD (Microsoft Entra ID)
description: Configure SSO with Azure AD / Microsoft Entra ID (OIDC or SAML)
---
<Tabs items={['SSO (OIDC)', 'SAML']}>
<Tab value="SSO (OIDC)">
## 1. Register an application in Azure
1. Log in to the [Azure Portal](https://portal.azure.com/).
2. Go to **Microsoft Entra ID** (or **Azure Active Directory**) → **App registrations** → **New registration**.
3. Enter a **Name** (e.g. Dokploy), choose supported account types, and set **Redirect URI** to **Web** with a placeholder for now (e.g. `https://your-dokploy-domain.com/api/auth/callback/myorg-name-azure`).
4. Register and note the **Application (client) ID** and **Directory (tenant) ID**.
5. Go to **Certificates & secrets** → **New client secret**, create a secret and note its **Value** (you wont see it again).
6. The **Issuer URL** for OpenID Connect is: `https://login.microsoftonline.com/{tenant-id}/v2.0` (replace `{tenant-id}` with your Directory (tenant) ID). Some setups expect a trailing slash.
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **OpenID Connect**.
3. Enter:
- **Provider**: myorg-name-azure (unique name for this provider)
- **Issuer URL**: `https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0` (use your Directory (tenant) ID; add a trailing slash if required for discovery)
- **Domain**: the domain users use to authenticate via Azure AD (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
- **Client ID**: the Application (client) ID from Azure
- **Client Secret**: the client secret value from Certificates & secrets
- **Scopes**: openid email profile
4. Save.
## 3. Configure Azure
1. In your app registration, go to **Authentication**.
2. Under **Web** → **Redirect URIs**, add:
- `https://your-dokploy-domain.com/api/auth/callback/myorg-name-azure`
3. Under **Front-channel logout URL** (optional), you can set:
- `https://your-dokploy-domain.com`
4. Go to **Token Configuration** and add optional claim, select **email**, **preferred_username** and **upn** from the list of claims.
5. Save.
## Troubleshooting (OIDC)
- **Redirect URI mismatch** — Ensure the callback URL in Dokploy matches exactly what is configured in Azure (including protocol and path). Use the same **Provider** value in the path (e.g. `.../api/auth/callback/myorg-name-azure`).
- **Invalid client** — Double-check Application (client) ID and client secret. Confirm the secret has not expired under **Certificates & secrets**.
- **Tenant** — Use the correct Directory (tenant) ID in the Issuer URL. For multi-tenant apps, you may use `common` instead of the tenant ID (e.g. `https://login.microsoftonline.com/common/v2.0`).
- **Scopes** — Ensure the app registration has the right API permissions (e.g. **OpenID permissions**, **User.Read**) if required for `openid`, `email`, and `profile`.
</Tab>
<Tab value="SAML">
## 1. Create an Enterprise Application (SAML) in Azure
1. Log in to the [Azure Portal](https://portal.azure.com/).
2. Go to **Microsoft Entra ID** → **Enterprise applications** → **New application** → **Create your own application** (or **Non-gallery application**).
3. Enter a **Name** (e.g. Dokploy) and create.
4. Go to **Single sign-on** → **SAML**.
5. Note the **Identifier (Entity ID)** and **Login URL** (SSO URL). Under **SAML Certificates**, download or copy the **Certificate (Base64)** (x509) and download the **Federation Metadata XML** file.
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **SAML**.
3. Enter:
- **Provider**: myorg-name-azure-saml (unique name for this provider)
- **Issuer URL**: the Azure SAML Entity ID (Identifier) from the Enterprise application (eg. `https://sts.windows.net/YOUR_TENANT_ID/`).
- **SSO URL**: the Azure Login URL (Single Sign-On URL) (eg. `https://login.microsoftonline.com/YOUR_TENANT_ID/saml2`)
- **Certificate**: the IdP signing certificate (x509 Base64) from Azure
- **Federation Metadata XML**: the Federation Metadata XML file from Azure
- **Domain**: the domain users use to authenticate via Azure AD (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
4. Save.
## 3. Configure Azure (SAML)
1. In your Enterprise application, go to **Single sign-on** → **SAML**.
2. Under **Basic SAML Configuration**, set **Identifier (Entity ID)** if required (SP Entity ID from Dokploy) (eg. `https://your-dokploy-instance.com`).
3. Set **Reply URL (Assertion Consumer Service URL)** to your Dokploy SAML ACS URL (eg. `https://your-dokploy-instance.com/api/auth/sso/saml2/callback/myorg-name-azure-saml`).
3. Save.
## Troubleshooting (SAML)
- **ACS URL mismatch** — Ensure the Reply URL (ACS) in Azure matches exactly what Dokploy provides (including protocol and path).
- **Certificate** — Use the Certificate (Base64) from Azure; paste as-is or convert to PEM if Dokploy expects PEM.
- **Entity ID** — The Entity ID in Dokploy must match the Identifier (Entity ID) of the Azure Enterprise application.
</Tab>
</Tabs>
For help with your setup, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,17 @@
---
title: Single Sign-On (SSO)
description: Configure SSO with Auth0, Keycloak, or other OIDC/SAML providers
---
Enterprise supports Single Sign-On via OpenID Connect (OIDC) and SAML. You can use Auth0, Keycloak, or any compatible identity provider.
Choose a provider below for step-by-step configuration:
- **[Auth0](/docs/core/enterprise/sso/auth0)** — Cloud identity platform
- **[Azure AD (Microsoft Entra ID)](/docs/core/enterprise/sso/azure)** — Microsoft's cloud identity platform
- **[Okta](/docs/core/enterprise/sso/okta)** — Cloud identity platform
- **[Keycloak](/docs/core/enterprise/sso/keycloak)** — Open-source identity and access management
You can also use any other OIDC/SAML provider by configuring the endpoints and flow manually.
For other OIDC/SAML providers, use the same endpoints and flow; [contact us](https://dokploy.com/contact) if you need help.

View File

@@ -0,0 +1,48 @@
---
title: Keycloak
description: Configure SSO with Keycloak
---
## 1. Create a client in Keycloak
1. Log in to your Keycloak Admin Console.
2. Select your realm (or create one).
3. Go to **Clients** → **Create client**.
4. Set **Client ID** (e.g. `my-client-id`) and **Client type** to **OpenID Connect**.
5. Set **Root URL** to your Dokploy base URL, e.g. `https://your-dokploy-domain.com`.
6. Save.
7. Open the client, set **Access type** to **confidential**, then open the **Credentials** tab and note the **Secret**.
8. From **Realm settings** → **OpenID Endpoint Configuration**, note the **Issuer** (e.g. `https://keycloak.example.com/realms/your-realm`).
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **OpenID Connect**.
3. Enter:
- **Provider**: my-client-id (Unique)
- **Issuer URL**: your Keycloak realm URL (e.g. `https://keycloak.example.com/realms/your-realm`)
- **Domain**: the domain users use to authenticate via Keycloak (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
- **Client ID**: my-client-id
- **Client Secret**: the secret from the Keycloak client Credentials tab
- **Scopes**: openid email profile
4. Save.
## 3. Configure Keycloak
1. In your Keycloak client, go to **Settings**.
2. Set **Valid redirect URIs** to your Dokploy callback URL, for example:
- `https://your-dokploy-domain.com/api/auth/callback/my-client-id`
3. Set **Valid post logout redirect URIs** to:
- `https://your-dokploy-domain.com`
4. Set **Allowed Origins** to:
- `https://your-dokploy-domain.com`
5. Save changes.
## Troubleshooting
- **Redirect URI mismatch** — Ensure the callback URL in Dokploy matches exactly what is configured in Keycloak (including protocol and path). Use the same **Provider** value in the path (e.g. `.../api/auth/callback/myorg-name-keycloak`).
- **Invalid client** — Double-check Client ID and Client Secret, and that the client is enabled and set to confidential access.
- **Scopes** — Ensure the client is configured to request `openid` and, if required, `email` and `profile`.
- **Attribute mapping** — If user email or name is missing, map Keycloak attributes (e.g. email, preferred_username) in Dokploy if your setup supports it.
For help with your setup, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,9 @@
{
"title": "SSO",
"pages": [
"auth0",
"azure",
"keycloak",
"okta"
]
}

View File

@@ -0,0 +1,80 @@
---
title: Okta
description: Configure SSO with Okta (OIDC or SAML)
---
<Tabs items={['SSO (OIDC)', 'SAML']}>
<Tab value="SSO (OIDC)">
## 1. Create an application in Okta
1. Log in to the [Okta Admin Console](https://login.okta.com/) (or your Okta domain).
2. Go to **Applications** → **Applications** → **Create App Integration**.
3. Choose **OIDC - OpenID Connect** and **Web Application**, then create it.
4. Note your **Client ID** and **Client Secret** (under **General** or **Client credentials**).
5. Note your Okta **domain** (e.g. `https://your-domain.okta.com`) and, if using a custom authorization server, its **issuer** (e.g. `https://your-domain.okta.com/oauth2/default`) or go to **Security** → **API** → **Authorization Servers** and note the **Issuer** (e.g. `https://your-domain.okta.com`).
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **OpenID Connect**.
3. Enter:
- **Provider**: myorg-name-okta (unique name for this provider)
- **Issuer URL**: your Okta issuer URL (e.g. `https://your-domain.okta.com`)
- **Domain**: the domain users use to authenticate via Okta (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
- **Client ID**: from the Okta application
- **Client Secret**: from the Okta application
- **Scopes**: openid email profile
4. Save.
## 3. Configure Okta
1. In your Okta application, go to **General** (or **Sign-in** / **Assignments** as needed).
2. Set **Sign-in redirect URIs** to your Dokploy callback URL, for example:
- `https://your-dokploy-domain.com/api/auth/callback/myorg-name-okta`
3. Set **Sign-out redirect URIs** (optional) to:
- `https://your-dokploy-domain.com`
4. Under **Trusted Origins**, add your Dokploy URL as an origin (e.g. `https://your-dokploy-domain.com`) if required for CORS.
5. Save.
## Troubleshooting (OIDC)
- **Redirect URI mismatch** — Ensure the callback URL in Dokploy matches exactly what is configured in Okta (including protocol and path). Use the same **Provider** value in the path (e.g. `.../api/auth/callback/myorg-name-okta`).
- **Invalid client** — Double-check Client ID and Client Secret, and that the application is a Web Application with the correct grant types (e.g. Authorization Code).
- **Issuer URL** — Use the full issuer URL for your authorization server (e.g. `https://your-domain.okta.com`).
- **Scopes** — Ensure the Okta authorization server is configured to allow `openid`, and if needed `email` and `profile`.
</Tab>
<Tab value="SAML">
## 1. Create a SAML application in Okta
1. Log in to the [Okta Admin Console](https://login.okta.com/) (or your Okta domain).
2. Go to **Applications** → **Applications** → **Create App Integration**.
3. Choose **SAML 2.0** and create it.
4. Enter an **App name** (e.g. Dokploy). Under **Configure SAML**, in the Single sign-on URL field, set the SAML ACS URL (eg. `https://your-dokploy-instance.com/api/auth/sso/saml2/callback/myorg-name-okta-saml`) and in the Audience URI (SP Entity ID) field, set the SP Entity ID (eg. `https://your-dokploy-instance.com`).
5. Next & Save.
## 2. Configure Dokploy
1. In Dokploy, go to **Settings** (or **Organization** / **Security** in Enterprise).
2. Enable **SSO** and choose **SAML**.
3. Enter:
- **Provider**: myorg-name-okta-saml (unique name for this provider)
- **Issuer URL**: the Okta Identity Provider issuer (Entity ID) located in `Sign On` tab called `Issuer` (eg. `http://www.okta.com/exkzq3acyuEtIuNrW697`)
- **SSO URL**: the Okta Identity Provider single sign-on URL located in `Sign On` tab called `Single sign-on URL` (eg. `https://trial-2804699.okta.com/app/trial-2802699_something/exkzqi3cyuEtIuNrW697/sso/saml`)
- **Certificate**: go to `Signing Certificate` tab and download the certificate active (x509) and paste it in the `Certificate` field.
- **Federation Metadata XML**: copy the idp metadata XML from the certificate active and paste it in the `Metadata XML` field.
- **Domain**: the domain users use to authenticate via Okta (e.g. your organization domain like `acme.com`), not the Dokploy instance URL
4. Save.
## Troubleshooting (SAML)
- **ACS URL mismatch** — Ensure the Single sign-on URL (ACS) in Okta matches exactly what Dokploy provides (including protocol and path).
- **Certificate** — Use the x509 certificate from Oktas IdP metadata (PEM or Base64); ensure it is the one used to sign assertions.
- **Entity ID** — The Entity ID in Dokploy must match the Identity Provider issuer in Okta.
</Tab>
</Tabs>
For help with your setup, [contact us](https://dokploy.com/contact).

View File

@@ -0,0 +1,37 @@
---
title: Whitelabeling
description: Rebrand Dokploy with your logo, colors, and domain
---
## What you can customize
- **Logo** — Header and login logo.
- **Favicon** — Browser tab icon.
- **Colors** — Primary color and accent (e.g. buttons, links).
- **Custom domain** — Serve the app from your own domain (e.g. `deploy.yourcompany.com`).
## Configuration
Whitelabel settings are managed in the Enterprise admin area (or via environment variables, depending on your deployment).
1. Go to **Settings** → **Whitelabel** (or equivalent in your Enterprise setup).
2. Upload your **logo** (recommended: SVG or PNG, transparent background).
3. Upload your **favicon** (e.g. ICO or PNG).
4. Set **primary color** and **accent color** (hex codes).
5. If using a custom domain, configure your reverse proxy (e.g. Traefik, Nginx) and DNS to point to your Dokploy instance, and set the **base URL** in Dokploy to match.
## Custom domain
1. Create a CNAME (or A) record pointing your domain to the server or load balancer where Dokploy runs.
2. Configure TLS (e.g. Let's Encrypt) on your reverse proxy for that hostname.
3. In Dokploy, set the **Application URL** (or equivalent) to `https://your-domain.com`.
4. Restart or reload Dokploy so it uses the new base URL for redirects and links.
## Best practices
- Use high-resolution logos (e.g. 2x) for sharp display on retina screens.
- Keep primary and accent colors accessible (sufficient contrast for text and buttons).
- Test login and main flows after changing logo and colors to ensure nothing is broken or hard to read.
For help enabling or configuring whitelabeling, [contact us](https://dokploy.com/contact).

View File

@@ -372,3 +372,34 @@ curl -sSL https://dokploy.com/install.sh | sh
export ADVERTISE_ADDR=192.168.1.100
curl -sSL https://dokploy.com/install.sh | sh
```
## Updating Traefik Manually
Dokploy does not update the Traefik container automatically when you upgrade. This is intentional to avoid unexpected downtime for your services. If you need a newer Traefik version (for example, due to a breaking change or security fix), you can update it manually.
1. Remove the existing Traefik container.
2. Create a new container with the desired Traefik image version and the same configuration.
3. Connect the new container to the Dokploy network.
Example (replace `v3.6.7` with the version you want):
```bash
docker rm -f dokploy-traefik
docker run -d \
--name dokploy-traefik \
--restart always \
-v /etc/dokploy/traefik/traefik.yml:/etc/traefik/traefik.yml \
-v /etc/dokploy/traefik/dynamic:/etc/dokploy/traefik/dynamic \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-p 80:80/tcp \
-p 443:443/tcp \
-p 443:443/udp \
traefik:v3.6.7
docker network connect dokploy-network dokploy-traefik
```
<Callout type='warn'>
**Breaking changes:** Some Traefik versions introduce breaking changes that may not be compatible with the configuration and structure Dokploy uses. Before upgrading, check the [Traefik release notes](https://github.com/traefik/traefik/releases) and [Dokploy releases](https://github.com/Dokploy/dokploy/releases) for any announced breaking changes. Using an incompatible version can cause routing issues (e.g. 404s for applications using domains).
</Callout>

View File

@@ -35,7 +35,6 @@
"applications",
"docker-compose",
"databases",
"templates",
"(examples)",
"auto-deploy",
"schedule-jobs",
@@ -49,11 +48,17 @@
"remote-servers/deployments",
"remote-servers/security",
"remote-servers/validate",
"---Advanced---",
"cluster",
"---Enterprise---",
"enterprise/index",
"enterprise/license-keys",
"enterprise/sso",
"enterprise/whitelabeling",
"enterprise/audit-logs",
"---Guides---",
"guides/cloudflare-tunnels",
"guides/tailscale",
"guides/ec2-instructions",
"---Advanced---",
"cluster"
"guides/ec2-instructions"
]
}

View File

@@ -1,122 +0,0 @@
---
title: Open Source Templates
description: Deploy open source templates with Dokploy
---
By default we include a set of templates, that you can use to spin up templates quickly. You can also create your own templates.
## Templates
The following templates are available (100):
- **Appwrite**: End-to-end backend server for Web, Mobile, Native, or Backend apps with user authentication, database, storage, and more.
- **Outline**: Self-hosted knowledge base and documentation platform.
- **Supabase**: The open-source Firebase alternative with a dedicated Postgres database for web, mobile, and AI applications.
- **Pocketbase**: Open-source backend for your next SaaS and Mobile app in 1 file.
- **Plausible**: Open-source, privacy-focused, self-hosted web analytics platform.
- **Calcom**: Open-source alternative to Calendly for creating scheduling and booking services.
- **Grafana**: Open-source platform for data visualization and monitoring.
- **Directus**: API-first, open-source headless CMS for building custom backends.
- **Baserow**: Open-source database management tool.
- **Budibase**: Open-source low-code platform for building forms, portals, and approval apps.
- **Ghost**: Professional publishing platform built on Node.js.
- **Uptime Kuma**: Free and open-source monitoring tool.
- **n8n**: Open-source low-code platform for automating workflows.
- **Wordpress**: Free and open-source CMS for publishing websites.
- **Odoo**: Free and open-source business management software.
- **Appsmith**: Open-source platform for building internal tools.
- **Excalidraw**: Open-source online diagramming tool.
- **Documenso**: Open-source alternative to DocuSign.
- **NocoDB**: Airtable alternative for databases.
- **Meilisearch**: Free and open-source search engine.
- **Phpmyadmin**: Web interface for MySQL/MariaDB management.
- **Rocketchat**: Open-source web chat platform.
- **Minio**: Open-source object storage server.
- **Metabase**: Open-source business intelligence tool.
- **Glitchtip**: Simple, open-source error tracking.
- **Open WebUI**: Open-source ChatGPT alternative.
- **Listmonk**: Self-hosted newsletter manager.
- **Double Zero**: Self-hostable SES dashboard.
- **Umami**: Privacy-focused analytics alternative.
- **Jellyfin**: Free software media system.
- **Teable**: No-code database with spreadsheet interface.
- **Zipline**: ShareX/file upload server.
- **Soketi**: Open-source WebSockets server.
- **Aptabase**: Self-hosted analytics platform.
- **Typebot**: Open-source chatbot builder.
- **Gitea**: Self-hosted software development service.
- **Roundcube**: Open-source webmail software.
- **File Browser**: Web-based file manager.
- **Tolgee**: Web-based localization platform.
- **Portainer**: Container management tool.
- **InfluxDB**: Time-series data platform.
- **Infisical**: Configuration and secrets manager.
- **Docmost**: Collaborative wiki software.
- **Vaultwarden**: Bitwarden-compatible server.
- **Hi.events**: Event management platform.
- **Windows/MacOS**: Dockerized operating systems.
- **Coder**: Cloud development environment.
- **Stirling PDF**: PDF tools suite.
- **Lobe Chat**: Modern AI chat framework.
- **Peppermint**: API development platform.
- **Windmill**: Workflow and internal apps platform.
- **Activepieces**: No-code automation tool.
- **InvoiceShelf**: Self-hosted invoicing system.
- **Postiz**: Content management platform.
- **Slash**: Bookmarking and link shortener.
- **Discord Tickets**: Support ticket bot.
- **Nextcloud AIO**: File storage and collaboration.
- **Blender**: 3D creation suite.
- **HeyForm**: Conversational form builder.
- **Chatwoot**: Customer engagement platform.
- **Discourse**: Modern forum software.
- **Immich**: Photo/video backup solution.
- **Twenty CRM**: Modern CRM alternative.
- **YOURLS**: URL shortening service.
- **Ryot**: Media tracking platform.
- **PhotoPrism**: AI-powered photos app.
- **Ontime**: Event rundown manager.
- **Trigger.dev**: Event-driven application platform.
- **Browserless**: Headless browser automation.
- **draw.io**: Diagramming application.
- **Kimai**: Time-tracking application.
- **Logto**: Identity management platform.
- **Penpot**: Open-source design tool.
- **Huly**: Project management platform.
- **Unsend**: Email service platform.
- **Langflow**: Low-code AI application builder.
- **Elasticsearch**: Search and analytics engine.
- **OneDev**: Git server with CI/CD.
- **Unifi Network**: Network management platform.
- **GLPI**: Service management software.
- **Checkmate**: Server monitoring tool.
- **Gotenberg**: PDF generation API.
- **Actual Budget**: Privacy-focused finance app.
- **Conduit/Conduwuit**: Matrix chat servers.
- **Cloudflared**: Cloudflare Tunnel daemon.
- **CouchDB**: Document-oriented database.
- **IT Tools**: Developer utilities collection.
- **Superset**: Data visualization platform.
- **Glance/Homarr**: Dashboard solutions.
- **ERPNext**: Open-source ERP software.
- **Maybe**: Finance tracking application.
- **Spacedrive**: Cross-platform file manager.
- **AList**: Multi-storage file manager.
- **Answer**: Q&A platform.
- **Shlink**: URL shortener.
- **Frappe HR**: HR & Payroll software.
- **Formbricks**: Survey platform.
- **Trilium**: Note-taking application.
- **Convex**: Reactive database platform.
For an up to date list of available template you can visit [Dokploy templates website](https://templates.dokploy.com/).
## Create your own template
We accept contributions to upload new templates to the dokploy repository.
Make sure to follow the guidelines for creating a template:
[Steps to create your own template](https://github.com/Dokploy/templates)
[^1]: Please note that if you're self-hosting a mail server you need port 25 to be open for SMTP (Mail Transmission Protocol that allows you to send and receive) to work properly. Some VPS providers like [Hetzner](https://docs.hetzner.com/cloud/servers/faq/#why-can-i-not-send-any-mails-from-my-server) block this port by default for new clients.

View File

@@ -1,3 +1,3 @@
{
"pages": ["core", "cli", "api"]
"pages": ["core", "cli", "api", "templates"]
}