diff --git a/docs/_static/env-vars/idm_readme.md b/docs/_static/env-vars/idm_readme.md index a504c9188..fc38b5c81 100755 --- a/docs/_static/env-vars/idm_readme.md +++ b/docs/_static/env-vars/idm_readme.md @@ -19,11 +19,10 @@ rm ldap.crt ldap.key docker compose restart ``` -The certificate and key are automatically regenerated when the container starts again. For more details, see [Internal LibreIDM cert expires](https://docs.opencloud.eu/docs/admin/resources/common-issues/#internal-libreidm-cert-expires). +The certificate and key are automatically regenerated when the container starts again. For more details, see [Internal LibreIDM certificate expires](../../admin/resources/common-issues/libreidm-cert-expiry.md). Note: IDM is limited in its functionality. It only supports a subset of the LDAP operations (namely `BIND`, `SEARCH`, `ADD`, `MODIFY`, `DELETE`). Also, IDM currently does not do any schema verification (like. structural vs. auxiliary object classes, require and option attributes, syntax checks, …). Therefore it is not meant as a general purpose LDAP server. ## Table of Contents - diff --git a/docs/admin/configuration/storage/decomposeds3.md b/docs/admin/configuration/storage/decomposeds3.md index cbe7e83e2..fa18440c7 100644 --- a/docs/admin/configuration/storage/decomposeds3.md +++ b/docs/admin/configuration/storage/decomposeds3.md @@ -87,4 +87,4 @@ After logging in, you should see the OpenCloud interface: If you run into any issues or errors, check the following resource: -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/docs/admin/getting-started/container/docker-compose/docker-compose-base.md b/docs/admin/getting-started/container/docker-compose/docker-compose-base.md index 77e7490ae..5d83a279b 100644 --- a/docs/admin/getting-started/container/docker-compose/docker-compose-base.md +++ b/docs/admin/getting-started/container/docker-compose/docker-compose-base.md @@ -283,4 +283,4 @@ If you encounter issues: 1. Check Docker logs: `docker compose logs` 2. Verify domain DNS records point to your server 3. Ensure firewall allows HTTP (80) and HTTPS (443) -4. See [Common Issues & Help](../../../resources/common-issues.md) +4. See [Common Issues & Help](../../../resources/common-issues/index.md) diff --git a/docs/admin/getting-started/container/docker.md b/docs/admin/getting-started/container/docker.md index 45da011f8..4e535f612 100644 --- a/docs/admin/getting-started/container/docker.md +++ b/docs/admin/getting-started/container/docker.md @@ -76,4 +76,4 @@ Your OpenCloud server is now running and ready to use 🚀 If you encounter any issues or errors, try finding a solution here: -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/docs/admin/getting-started/other/bare-metal.md b/docs/admin/getting-started/other/bare-metal.md index 0160169dd..18fcedfba 100644 --- a/docs/admin/getting-started/other/bare-metal.md +++ b/docs/admin/getting-started/other/bare-metal.md @@ -128,4 +128,4 @@ Your OpenCloud server is now running and ready to use 🚀 If you encounter any issues or errors, try finding a solution here -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/docs/admin/maintenance/maintenance-commands.md b/docs/admin/maintenance/maintenance-commands.md index eb11bee24..0301ccd1f 100644 --- a/docs/admin/maintenance/maintenance-commands.md +++ b/docs/admin/maintenance/maintenance-commands.md @@ -237,7 +237,7 @@ docker compose stop opencloud sudo docker run -it --rm -v :/var/lib/opencloud -v :/etc/opencloud opencloudeu/opencloud: idm resetpassword ``` -See [Common Issues](../resources/common-issues.md) for the full walkthrough, including how to find the volume names. +See [Admin password cannot be changed in `.env`](../resources/common-issues/admin-password-reset.md) for the full walkthrough, including how to find the volume names. ### Create an app token diff --git a/docs/admin/maintenance/upgrade/upgrade-4.0.0.md b/docs/admin/maintenance/upgrade/upgrade-4.0.0.md index c5631cfb6..5b0f5bd60 100644 --- a/docs/admin/maintenance/upgrade/upgrade-4.0.0.md +++ b/docs/admin/maintenance/upgrade/upgrade-4.0.0.md @@ -237,6 +237,6 @@ Your OpenCloud instance should now be running on `v4.0.x`. If you encounter issues during or after the upgrade: 1. Review the logs for error messages -2. Consult the [troubleshooting guide](../../resources/common-issues) +2. Consult the [troubleshooting guide](../../resources/common-issues/index.md) 3. Restore from backup if necessary 4. Contact support or open an issue on [GitHub](https://github.com/opencloud-eu/opencloud/issues) diff --git a/docs/admin/maintenance/upgrade/upgrade-7.x.x.md b/docs/admin/maintenance/upgrade/upgrade-7.x.x.md index 69c04f3f4..467083608 100644 --- a/docs/admin/maintenance/upgrade/upgrade-7.x.x.md +++ b/docs/admin/maintenance/upgrade/upgrade-7.x.x.md @@ -374,6 +374,6 @@ If issues occur during or after the upgrade: ## Useful Resources -- [OpenCloud Troubleshooting Guide](../../resources/common-issues.md) +- [OpenCloud Troubleshooting Guide](../../resources/common-issues/index.md) - [OpenCloud GitHub Issues](https://github.com/opencloud-eu/opencloud/issues) - [OpenCloud Web Extensions Releases](https://github.com/opencloud-eu/web-extensions/releases) diff --git a/docs/admin/resources/common-issues.md b/docs/admin/resources/common-issues.md deleted file mode 100644 index 40236f946..000000000 --- a/docs/admin/resources/common-issues.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -sidebar_position: 4 -id: common-issues -title: Common Issues & Help -description: Common issues & help -draft: false ---- - -# Common Issues & Help - -## Check whether the containers are running - -```bash -docker ps -``` - -Admin general - -Several containers should be listed here, e.g., for opencloud, traefik, etc. - -## Accept Self-Signed Certificates - -As the local environment is self-signed, you must accept the security risk in your browser. - -For Firefox: - -You need to click on Advanced - -Admin general - -Confirm the risk with Accept the risk and Continue - -Admin general - -## Docker Permission Issues - -If your Docker Compose setup fails to start and the logs contain messages such as `permission denied`, it's likely due to incorrect ownership of local directories used by the containers. - -Example log output: - -```bash -opencloud-1 | {"level":"fatal","service":"nats","time":"2025-04-08T09:59:59Z","line":"github.com/opencloud-eu/opencloud/services/nats/pkg/logging/nats.go:33","message":"Can't start JetStream: could not create storage directory - mkdir /var/lib/opencloud/nats: permission denied"} -``` - -This error typically occurs when the mounted directories are owned by the wrong user, such as `root`, instead of the standard Docker user (`UID 1000`). - -Incorrect directory ownership: - -```bash -drwxr-xr-x 3 root root 4096 Apr 8 09:59 opencloud-data -``` - -Correct ownership should be: - -```bash -drwxr-xr-x 9 1000 1000 4096 Apr 7 07:57 opencloud-data -``` - -To resolve this issue, adjust the ownership of the directory using the `chown` command: - -```bash -chown -R 1000:1000 opencloud-data -``` - -:::caution -Security Warning - -The user with UID 1000 on your host system will have full access to these mounted directories. This means that any local user account with this ID can read, modify, or delete OpenCloud config and data files. - -This can pose a security risk in shared or multi-user environments. Make sure to implement proper user and permission management and consider isolating access to these directories. - -::: - -Ensure you apply this to all relevant folders that are mounted into your containers. This will grant the Docker container the necessary permissions to access and write to these directories. - -## Change Admin Password Set in `.env` - -If you initially set the OpenCloud admin password using the `.env` file, please note: - -:::caution -You cannot simply change the password again by editing the `.env` file. -Once the container is running, password changes must be made via the Web UI or terminal. -::: - -### Option 1: Change via Web UI - -If the current admin password is known: - -1. Log in to the OpenCloud Web Interface. -2. Navigate to Settings > Security. -3. Enter your current password and choose a new one. - -> If the admin password is forgotten or you prefer command-line tools, use the terminal method below. - -### Option 2: Change via Terminal - -If the admin password is forgotten or needs to be changed via the terminal: - -#### Stop the Docker container - -First, stop your OpenCloud container: - -```bash -docker compose stop opencloud -``` - -#### Run the password reset command - -Use the following command to reset the password: - -```bash -sudo docker run -it --rm -v :/var/lib/opencloud -v :/etc/opencloud opencloudeu/opencloud: idm resetpassword -``` - -#### Replace - -`` – Docker volume for OpenCloud data - -`` – Docker volume for OpenCloud config - -`` – Use latest or your specific version - -🔍 How to find the volume names -You can list your current Docker volumes with: - -```bash -docker volume ls -``` - -Look for volumes like: - -`opencloud-compose_opencloud-data` - -`opencloud-compose_opencloud-config` - -#### Example for standard setup - -```bash -sudo docker run -it --rm -v opencloud-compose_opencloud-data:/var/lib/opencloud -v opencloud-compose_opencloud-config:/etc/opencloud opencloudeu/opencloud:latest idm resetpassword -``` - -#### Start the container again - -```bash -docker compose up -d -``` - -## Internal LibreIDM cert expires - -Starting with OpenCloud 7.3, certificates used by the internal LibreIDM are renewed automatically before they expire. - -No manual certificate removal or container restart is required. - -For affected older releases, see the remediation instructions for -[OpenCloud 7.2](https://docs.opencloud.eu/docs/7.2/admin/resources/common-issues/#internal-libreidm-cert-expires) -or [OpenCloud 4.0](https://docs.opencloud.eu/docs/4.0/admin/resources/common-issues/#internal-libreidm-cert-expires). - -## Login fails with LDAP Result Code 49 (Invalid Credentials) - -When using the built-in IDM (LibreIDM), login can fail with `Unexpected HTTP response: -500` in the browser, and the logs show the internal directory rejecting a bind: - -```bash -opencloud-1 | {"level":"error","service":"idm","bind_dn":"uid=idp,ou=sysusers,o=libregraph-idm","op":"bind","message":"not found"} -opencloud-1 | {"level":"error","service":"idp","error":"ldap identifier backend logon connect error: LDAP Result Code 49 \"Invalid Credentials\": ","message":"identifier failed to logon with backend"} -``` - -The built-in IDM seeds its service-account passwords once, at first start, into a -bolt-store on the data volume (`idm.boltdb`), matching the values `opencloud init` -writes into `opencloud.yaml` on the config volume. The bind fails when the two volumes -are no longer from the same `init`. The `idm` line reads either `not found` or -`invalid credentials`; both mean the same mismatch. This usually comes from setting an -internal LDAP password in the environment, or from reusing one volume (for example a -restored or carried-over data volume) without the other. - -### Solution - -With the built-in IDM, do not set the internal LDAP or service passwords in `.env` or -the environment. Let `opencloud init` generate them, and keep only -`INITIAL_ADMIN_PASSWORD`. - -Treat `opencloud.yaml` (config volume) and the data volume as one set. When you back -up, restore, or move the instance, keep them together and from the same point in time. - -If you do not need the existing data, remove both volumes so `init` generates a -matching set, then start again: - -```bash -docker compose down -docker volume rm opencloud-compose_opencloud-config opencloud-compose_opencloud-data -docker compose up -d -``` - -:::caution -Deleting `idm.boltdb` alone may not be enough: it is re-seeded from the current config, -but a bind password still set in the environment keeps the two sides out of sync. -::: - -### Recommendation - -The built-in IDM is intended for testing and small installations. For production, use -an external identity provider, for example Keycloak with an external LDAP. diff --git a/docs/admin/resources/common-issues/_category_.json b/docs/admin/resources/common-issues/_category_.json new file mode 100644 index 000000000..aa6b5eaf8 --- /dev/null +++ b/docs/admin/resources/common-issues/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Common Issues & Help", + "position": 4, + "link": { + "type": "doc", + "id": "common-issues-overview" + } +} diff --git a/docs/admin/resources/common-issues/admin-password-reset.md b/docs/admin/resources/common-issues/admin-password-reset.md new file mode 100644 index 000000000..0b96e1805 --- /dev/null +++ b/docs/admin/resources/common-issues/admin-password-reset.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 5 +id: admin-password-reset +title: Admin password cannot be changed in `.env` +description: Change or reset the OpenCloud admin password +draft: false +hide_table_of_contents: true +--- + +# Admin password cannot be changed in `.env` + +## Problem + +Changing the OpenCloud admin password in the `.env` file has no effect after the container has been initialized, or the current password has been forgotten. + +## Cause + +The `.env` value is used to set the initial admin password. Once the container is running, password changes must be made through the Web UI or terminal. + +## Solution + +### Option 1: Change via Web UI + +If the current admin password is known: + +1. Log in to the OpenCloud Web Interface. +2. Navigate to Settings > Security. +3. Enter your current password and choose a new one. + +> If the admin password is forgotten or you prefer command-line tools, use the terminal method below. + +### Option 2: Change via Terminal + +If the admin password is forgotten or needs to be changed via the terminal: + +#### Stop the Docker container + +First, stop your OpenCloud container: + +```bash +docker compose stop opencloud +``` + +#### Run the password reset command + +Use the following command to reset the password: + +```bash +sudo docker run -it --rm -v :/var/lib/opencloud -v :/etc/opencloud opencloudeu/opencloud: idm resetpassword +``` + +Replace: + +- `` with the Docker volume for OpenCloud data. +- `` with the Docker volume for OpenCloud configuration. +- `` with `latest` or your specific version. + +To find the volume names, list the current Docker volumes: + +```bash +docker volume ls +``` + +Look for volumes such as: + +- `opencloud-compose_opencloud-data` +- `opencloud-compose_opencloud-config` + +#### Example for the standard setup + +```bash +sudo docker run -it --rm -v opencloud-compose_opencloud-data:/var/lib/opencloud -v opencloud-compose_opencloud-config:/etc/opencloud opencloudeu/opencloud:latest idm resetpassword +``` + +#### Start the container again + +```bash +docker compose up -d +``` diff --git a/docs/admin/resources/common-issues/containers-not-running.md b/docs/admin/resources/common-issues/containers-not-running.md new file mode 100644 index 000000000..db2811781 --- /dev/null +++ b/docs/admin/resources/common-issues/containers-not-running.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 2 +id: containers-not-running +title: OpenCloud containers are not running +description: Check whether the OpenCloud containers are running +draft: false +hide_table_of_contents: true +--- + +# OpenCloud containers are not running + +## Problem + +OpenCloud is unavailable or does not work as expected. + +## Cause + +One or more required containers may not be running. + +## Solution + +Check the running containers: + +```bash +docker ps +``` + +Admin general + +Several containers should be listed, for example OpenCloud and Traefik. + +If an expected container is missing or not running, check the logs for errors or warnings: + +```bash +docker compose logs +``` + +To inspect a specific service, add its name: + +```bash +docker compose logs +``` + +Use the log messages to identify the affected service and continue troubleshooting the reported error. diff --git a/docs/admin/resources/common-issues/docker-permissions.md b/docs/admin/resources/common-issues/docker-permissions.md new file mode 100644 index 000000000..ab20226ce --- /dev/null +++ b/docs/admin/resources/common-issues/docker-permissions.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 4 +id: docker-permissions +title: Docker Compose fails with permission denied +description: Fix Docker permission issues +draft: false +hide_table_of_contents: true +--- + +# Docker Compose fails with permission denied + +## Problem + +The Docker Compose setup fails to start and the logs contain messages such as `permission denied`. + +Example log output: + +```bash +opencloud-1 | {"level":"fatal","service":"nats","time":"2025-04-08T09:59:59Z","line":"github.com/opencloud-eu/opencloud/services/nats/pkg/logging/nats.go:33","message":"Can't start JetStream: could not create storage directory - mkdir /var/lib/opencloud/nats: permission denied"} +``` + +## Cause + +The mounted directories may be owned by the wrong user, such as `root`, instead of the standard Docker user (`UID 1000`). + +Incorrect directory ownership: + +```bash +drwxr-xr-x 3 root root 4096 Apr 8 09:59 opencloud-data +``` + +Correct directory ownership: + +```bash +drwxr-xr-x 9 1000 1000 4096 Apr 7 07:57 opencloud-data +``` + +## Solution + +Adjust the ownership of the directory using the `chown` command: + +```bash +chown -R 1000:1000 opencloud-data +``` + +:::caution Security warning +The user with UID 1000 on your host system will have full access to these mounted directories. Any local user account with this ID can read, modify, or delete OpenCloud configuration and data. + +This can pose a security risk in shared or multi-user environments. Implement appropriate user and permission management and consider isolating access to these directories. +::: + +Apply the ownership change to all relevant directories mounted into the containers. diff --git a/docs/admin/resources/common-issues/index.md b/docs/admin/resources/common-issues/index.md new file mode 100644 index 000000000..57a250e40 --- /dev/null +++ b/docs/admin/resources/common-issues/index.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 1 +id: common-issues-overview +title: Common Issues & Help +description: Common issues and help +draft: false +toc_max_heading_level: 2 +--- + +# Common Issues & Help + +Use this page to find troubleshooting guidance for common administration issues. + +## Startup and permissions + +- [OpenCloud containers are not running](./containers-not-running.md) +- [Docker Compose fails with permission denied](./docker-permissions.md) + +## Browser and certificates + +- [Browser rejects a self-signed certificate](./self-signed-certificates.md) + +## Access and account recovery + +- [Admin password cannot be changed in `.env`](./admin-password-reset.md) +- [Login fails with LDAP Result Code 49](./ldap-invalid-credentials.md) + +## IDM and certificates + +- [Internal LibreIDM certificate expires](./libreidm-cert-expiry.md) diff --git a/docs/admin/resources/common-issues/ldap-invalid-credentials.md b/docs/admin/resources/common-issues/ldap-invalid-credentials.md new file mode 100644 index 000000000..a623c5cdf --- /dev/null +++ b/docs/admin/resources/common-issues/ldap-invalid-credentials.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 7 +id: ldap-invalid-credentials +title: Login fails with LDAP Result Code 49 +description: Resolve invalid credentials caused by mismatched LibreIDM volumes +draft: false +hide_table_of_contents: true +--- + +# Login fails with LDAP Result Code 49 (Invalid Credentials) + +## Problem + +When using the built-in IDM (LibreIDM), login can fail with `Unexpected HTTP response: 500` in the browser, and the logs show the internal directory rejecting a bind: + +```bash +opencloud-1 | {"level":"error","service":"idm","bind_dn":"uid=idp,ou=sysusers,o=libregraph-idm","op":"bind","message":"not found"} +opencloud-1 | {"level":"error","service":"idp","error":"ldap identifier backend logon connect error: LDAP Result Code 49 \"Invalid Credentials\": ","message":"identifier failed to logon with backend"} +``` + +## Cause + +The built-in IDM seeds its service-account passwords once, at first start, into a bolt-store on the data volume (`idm.boltdb`), matching the values `opencloud init` writes into `opencloud.yaml` on the configuration volume. + +The bind fails when the two volumes are no longer from the same `init`. The `idm` log entry reads either `not found` or `invalid credentials`; both indicate the same mismatch. This usually results from setting an internal LDAP password in the environment, or from reusing one volume, such as a restored or carried-over data volume, without the other. + +## Solution + +With the built-in IDM, do not set the internal LDAP or service passwords in `.env` or the environment. Let `opencloud init` generate them, and keep only `INITIAL_ADMIN_PASSWORD`. + +Treat `opencloud.yaml` on the configuration volume and the data volume as one set. Keep them together and from the same point in time when you back up, restore, or move the instance. + +If you do not need the existing data, remove both volumes so that `init` generates a matching set, then start again: + +```bash +docker compose down +docker volume rm opencloud-compose_opencloud-config opencloud-compose_opencloud-data +docker compose up -d +``` + +:::caution +Deleting `idm.boltdb` alone may not be enough: it is re-seeded from the current configuration, but a bind password still set in the environment keeps the two sides out of sync. +::: + +### Recommendation + +The built-in IDM is intended for testing and small installations. For production, use an external identity provider, for example Keycloak with an external LDAP. diff --git a/docs/admin/resources/common-issues/libreidm-cert-expiry.md b/docs/admin/resources/common-issues/libreidm-cert-expiry.md new file mode 100644 index 000000000..0a1dd2628 --- /dev/null +++ b/docs/admin/resources/common-issues/libreidm-cert-expiry.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 6 +id: libreidm-cert-expiry +title: Internal LibreIDM certificate expires +description: Handle expired internal LibreIDM certificates +draft: false +hide_table_of_contents: true +--- + +# Internal LibreIDM certificate expires + +## Problem + +In OpenCloud releases earlier than 7.3, an expired internal LibreIDM certificate can interrupt communication with the directory service. + +## Cause + +These older releases do not automatically renew the internal LibreIDM certificate before it expires. + +## Solution + +Starting with OpenCloud 7.3, internal LibreIDM certificates are renewed automatically before they expire. No manual certificate removal or container restart is required. + +For affected older releases, see the remediation instructions for [OpenCloud 7.2](/docs/admin/resources/common-issues/libreidm-cert-expiry) or [OpenCloud 4.0](/docs/4.0/admin/resources/common-issues/#internal-libreidm-cert-expires). diff --git a/docs/admin/resources/common-issues/self-signed-certificates.md b/docs/admin/resources/common-issues/self-signed-certificates.md new file mode 100644 index 000000000..aff4ab600 --- /dev/null +++ b/docs/admin/resources/common-issues/self-signed-certificates.md @@ -0,0 +1,28 @@ +--- +sidebar_position: 3 +id: self-signed-certificates +title: Browser rejects a self-signed certificate +description: Accept a self-signed certificate in the browser +draft: false +hide_table_of_contents: true +--- + +# Browser rejects a self-signed certificate + +## Problem + +The browser displays a security warning when you access a local OpenCloud environment. + +## Cause + +The local environment uses a self-signed certificate that the browser does not trust automatically. + +## Solution + +Accept the security risk in your browser. In Firefox, select **Advanced**: + +Admin general + +Then select **Accept the Risk and Continue**: + +Admin general diff --git a/docs/admin/resources/index.md b/docs/admin/resources/index.md index 7f0ac6336..17d88541b 100644 --- a/docs/admin/resources/index.md +++ b/docs/admin/resources/index.md @@ -14,5 +14,5 @@ Use this section for troubleshooting, lifecycle information, and general admin h - [FAQ](./faq.md) - [What's New](./whats-new.md) - [Release Lifecycle](./lifecycle.md) -- [Common Issues & Help](./common-issues.md) +- [Common Issues & Help](./common-issues/index.md) - [Demo User](./demo-user.md) diff --git a/versioned_docs/version-7.2/_static/env-vars/idm_readme.md b/versioned_docs/version-7.2/_static/env-vars/idm_readme.md index a504c9188..fc38b5c81 100755 --- a/versioned_docs/version-7.2/_static/env-vars/idm_readme.md +++ b/versioned_docs/version-7.2/_static/env-vars/idm_readme.md @@ -19,11 +19,10 @@ rm ldap.crt ldap.key docker compose restart ``` -The certificate and key are automatically regenerated when the container starts again. For more details, see [Internal LibreIDM cert expires](https://docs.opencloud.eu/docs/admin/resources/common-issues/#internal-libreidm-cert-expires). +The certificate and key are automatically regenerated when the container starts again. For more details, see [Internal LibreIDM certificate expires](../../admin/resources/common-issues/libreidm-cert-expiry.md). Note: IDM is limited in its functionality. It only supports a subset of the LDAP operations (namely `BIND`, `SEARCH`, `ADD`, `MODIFY`, `DELETE`). Also, IDM currently does not do any schema verification (like. structural vs. auxiliary object classes, require and option attributes, syntax checks, …). Therefore it is not meant as a general purpose LDAP server. ## Table of Contents - diff --git a/versioned_docs/version-7.2/admin/configuration/storage/decomposeds3.md b/versioned_docs/version-7.2/admin/configuration/storage/decomposeds3.md index cbe7e83e2..fa18440c7 100644 --- a/versioned_docs/version-7.2/admin/configuration/storage/decomposeds3.md +++ b/versioned_docs/version-7.2/admin/configuration/storage/decomposeds3.md @@ -87,4 +87,4 @@ After logging in, you should see the OpenCloud interface: If you run into any issues or errors, check the following resource: -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/versioned_docs/version-7.2/admin/getting-started/container/docker-compose/docker-compose-base.md b/versioned_docs/version-7.2/admin/getting-started/container/docker-compose/docker-compose-base.md index f3cf6e89b..0187225f6 100644 --- a/versioned_docs/version-7.2/admin/getting-started/container/docker-compose/docker-compose-base.md +++ b/versioned_docs/version-7.2/admin/getting-started/container/docker-compose/docker-compose-base.md @@ -283,4 +283,4 @@ If you encounter issues: 1. Check Docker logs: `docker compose logs` 2. Verify domain DNS records point to your server 3. Ensure firewall allows HTTP (80) and HTTPS (443) -4. See [Common Issues & Help](../../../resources/common-issues.md) +4. See [Common Issues & Help](../../../resources/common-issues/index.md) diff --git a/versioned_docs/version-7.2/admin/getting-started/container/docker.md b/versioned_docs/version-7.2/admin/getting-started/container/docker.md index 45da011f8..4e535f612 100644 --- a/versioned_docs/version-7.2/admin/getting-started/container/docker.md +++ b/versioned_docs/version-7.2/admin/getting-started/container/docker.md @@ -76,4 +76,4 @@ Your OpenCloud server is now running and ready to use 🚀 If you encounter any issues or errors, try finding a solution here: -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/versioned_docs/version-7.2/admin/getting-started/other/bare-metal.md b/versioned_docs/version-7.2/admin/getting-started/other/bare-metal.md index 0160169dd..18fcedfba 100644 --- a/versioned_docs/version-7.2/admin/getting-started/other/bare-metal.md +++ b/versioned_docs/version-7.2/admin/getting-started/other/bare-metal.md @@ -128,4 +128,4 @@ Your OpenCloud server is now running and ready to use 🚀 If you encounter any issues or errors, try finding a solution here -- [Common Issues & Help](../../resources/common-issues) +- [Common Issues & Help](../../resources/common-issues/index.md) diff --git a/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-4.0.0.md b/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-4.0.0.md index c5631cfb6..5b0f5bd60 100644 --- a/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-4.0.0.md +++ b/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-4.0.0.md @@ -237,6 +237,6 @@ Your OpenCloud instance should now be running on `v4.0.x`. If you encounter issues during or after the upgrade: 1. Review the logs for error messages -2. Consult the [troubleshooting guide](../../resources/common-issues) +2. Consult the [troubleshooting guide](../../resources/common-issues/index.md) 3. Restore from backup if necessary 4. Contact support or open an issue on [GitHub](https://github.com/opencloud-eu/opencloud/issues) diff --git a/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-7.x.x.md b/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-7.x.x.md index 69c04f3f4..467083608 100644 --- a/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-7.x.x.md +++ b/versioned_docs/version-7.2/admin/maintenance/upgrade/upgrade-7.x.x.md @@ -374,6 +374,6 @@ If issues occur during or after the upgrade: ## Useful Resources -- [OpenCloud Troubleshooting Guide](../../resources/common-issues.md) +- [OpenCloud Troubleshooting Guide](../../resources/common-issues/index.md) - [OpenCloud GitHub Issues](https://github.com/opencloud-eu/opencloud/issues) - [OpenCloud Web Extensions Releases](https://github.com/opencloud-eu/web-extensions/releases) diff --git a/versioned_docs/version-7.2/admin/resources/common-issues.md b/versioned_docs/version-7.2/admin/resources/common-issues.md deleted file mode 100644 index fab2bd8bc..000000000 --- a/versioned_docs/version-7.2/admin/resources/common-issues.md +++ /dev/null @@ -1,245 +0,0 @@ ---- -sidebar_position: 4 -id: common-issues -title: Common Issues & Help -description: Common issues & help -draft: false ---- - -# Common Issues & Help - -## Check whether the containers are running - -```bash -docker ps -``` - -Admin general - -Several containers should be listed here, e.g., for opencloud, traefik, etc. - -## Accept Self-Signed Certificates - -As the local environment is self-signed, you must accept the security risk in your browser. - -For Firefox: - -You need to click on Advanced - -Admin general - -Confirm the risk with Accept the risk and Continue - -Admin general - -## Docker Permission Issues - -If your Docker Compose setup fails to start and the logs contain messages such as `permission denied`, it's likely due to incorrect ownership of local directories used by the containers. - -Example log output: - -```bash -opencloud-1 | {"level":"fatal","service":"nats","time":"2025-04-08T09:59:59Z","line":"github.com/opencloud-eu/opencloud/services/nats/pkg/logging/nats.go:33","message":"Can't start JetStream: could not create storage directory - mkdir /var/lib/opencloud/nats: permission denied"} -``` - -This error typically occurs when the mounted directories are owned by the wrong user, such as `root`, instead of the standard Docker user (`UID 1000`). - -Incorrect directory ownership: - -```bash -drwxr-xr-x 3 root root 4096 Apr 8 09:59 opencloud-data -``` - -Correct ownership should be: - -```bash -drwxr-xr-x 9 1000 1000 4096 Apr 7 07:57 opencloud-data -``` - -To resolve this issue, adjust the ownership of the directory using the `chown` command: - -```bash -chown -R 1000:1000 opencloud-data -``` - -:::caution -Security Warning - -The user with UID 1000 on your host system will have full access to these mounted directories. This means that any local user account with this ID can read, modify, or delete OpenCloud config and data files. - -This can pose a security risk in shared or multi-user environments. Make sure to implement proper user and permission management and consider isolating access to these directories. - -::: - -Ensure you apply this to all relevant folders that are mounted into your containers. This will grant the Docker container the necessary permissions to access and write to these directories. - -## Change Admin Password Set in `.env` - -If you initially set the OpenCloud admin password using the `.env` file, please note: - -:::caution -You cannot simply change the password again by editing the `.env` file. -Once the container is running, password changes must be made via the Web UI or terminal. -::: - -### Option 1: Change via Web UI - -If the current admin password is known: - -1. Log in to the OpenCloud Web Interface. -2. Navigate to Settings > Security. -3. Enter your current password and choose a new one. - -> If the admin password is forgotten or you prefer command-line tools, use the terminal method below. - -### Option 2: Change via Terminal - -If the admin password is forgotten or needs to be changed via the terminal: - -#### Stop the Docker container - -First, stop your OpenCloud container: - -```bash -docker compose stop opencloud -``` - -#### Run the password reset command - -Use the following command to reset the password: - -```bash -sudo docker run -it --rm -v :/var/lib/opencloud -v :/etc/opencloud opencloudeu/opencloud: idm resetpassword -``` - -#### Replace - -`` – Docker volume for OpenCloud data - -`` – Docker volume for OpenCloud config - -`` – Use latest or your specific version - -🔍 How to find the volume names -You can list your current Docker volumes with: - -```bash -docker volume ls -``` - -Look for volumes like: - -`opencloud-compose_opencloud-data` - -`opencloud-compose_opencloud-config` - -#### Example for standard setup - -```bash -sudo docker run -it --rm -v opencloud-compose_opencloud-data:/var/lib/opencloud -v opencloud-compose_opencloud-config:/etc/opencloud opencloudeu/opencloud:latest idm resetpassword -``` - -#### Start the container again - -```bash -docker compose up -d -``` - -## Internal LibreIDM cert expires - -### 🔧 Renewing an expired certificate in internal IDM (OpenCloud) - -When using the internal IDM (LibreIDM), the LDAP certificate may expire over time. -You can see similar errormessages in your logfiles: - -```bash -opencloud-1 | 2026-03-10T14:10:36Z WRN core access token not set host.name=3133c92656c8 pkg=rhttp service=frontend traceid=2da2886cf47f0143876953ee33f814a9 -opencloud-1 | 2026-03-10T14:10:36Z ERR failed to build subject.session error="invalid key format" service=proxy -opencloud-1 | 2026-03-10T14:10:36Z ERR handleConnection ber.ReadPacket error="remote error: tls: bad certificate" service=idm -opencloud-1 | 2026-03-10T14:10:37Z ERR could not get ldap Connection error="LDAP Result Code 200 \"Network Error\": tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2026-03-10T14:10:37Z is after 2026-03-04T10:02:39Z" service=graph -opencloud-1 | 2026-03-10T14:10:37Z ERR failed to add user error="LDAP Result Code 200 \"Network Error\": tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2026-03-10T14:10:37Z is after 2026-03-04T10:02:39Z" request-id=3133c92656c8/LlC0SVlYb4-000023 service=graph -opencloud-1 | 2026-03-10T14:10:37Z ERR handleConnection ber.ReadPacket error="remote error: tls: bad certificate" service=idm -opencloud-1 | 2026-03-10T14:10:37Z ERR could not create user: backend error error="generalException: failed to add user" request-id=3133c92656c8/LlC0SVlYb4-000023 service=graph -opencloud-1 | 2026-03-10T14:10:37Z WRN Error Response OData Error="failed to add user" service=proxy -opencloud-1 | 2026-03-10T14:10:37Z ERR Error creating user error="500 Internal Server Error" service=proxy -opencloud-1 | 2026-03-10T14:10:37Z ERR Autoprovisioning user failed error="500 Internal Server Error" service=proxy -``` - -#### 🛠️ Solution - -Navigate to the IDM directory - -```bash -cd .opencloud/idm -``` - -Delete the old certificates - -```bash -rm ldap.crt ldap.key - -Directory structure: - -.opencloud/idm -├── idm.boltdb -├── ldap.crt -└── ldap.key -``` - -Restart the OpenCloud container - -```bash -docker compose restart -``` - -➡️ The certificates will be automatically regenerated on restart. - -#### ⚠️ Recommendation - -Admins should avoid using LibreIDM in production and use OpenLDAP instead. - -## Login fails with LDAP Result Code 49 (Invalid Credentials) - -When using the built-in IDM (LibreIDM), login can fail with `Unexpected HTTP response: -500` in the browser, and the logs show the internal directory rejecting a bind: - -```bash -opencloud-1 | {"level":"error","service":"idm","bind_dn":"uid=idp,ou=sysusers,o=libregraph-idm","op":"bind","message":"not found"} -opencloud-1 | {"level":"error","service":"idp","error":"ldap identifier backend logon connect error: LDAP Result Code 49 \"Invalid Credentials\": ","message":"identifier failed to logon with backend"} -``` - -The built-in IDM seeds its service-account passwords once, at first start, into a -bolt-store on the data volume (`idm.boltdb`), matching the values `opencloud init` -writes into `opencloud.yaml` on the config volume. The bind fails when the two volumes -are no longer from the same `init`. The `idm` line reads either `not found` or -`invalid credentials`; both mean the same mismatch. This usually comes from setting an -internal LDAP password in the environment, or from reusing one volume (for example a -restored or carried-over data volume) without the other. - -### Solution - -With the built-in IDM, do not set the internal LDAP or service passwords in `.env` or -the environment. Let `opencloud init` generate them, and keep only -`INITIAL_ADMIN_PASSWORD`. - -Treat `opencloud.yaml` (config volume) and the data volume as one set. When you back -up, restore, or move the instance, keep them together and from the same point in time. - -If you do not need the existing data, remove both volumes so `init` generates a -matching set, then start again: - -```bash -docker compose down -docker volume rm opencloud-compose_opencloud-config opencloud-compose_opencloud-data -docker compose up -d -``` - -:::caution -Deleting `idm.boltdb` alone may not be enough: it is re-seeded from the current config, -but a bind password still set in the environment keeps the two sides out of sync. -::: - -### Recommendation - -The built-in IDM is intended for testing and small installations. For production, use -an external identity provider, for example Keycloak with an external LDAP. diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/_category_.json b/versioned_docs/version-7.2/admin/resources/common-issues/_category_.json new file mode 100644 index 000000000..aa6b5eaf8 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Common Issues & Help", + "position": 4, + "link": { + "type": "doc", + "id": "common-issues-overview" + } +} diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/admin-password-reset.md b/versioned_docs/version-7.2/admin/resources/common-issues/admin-password-reset.md new file mode 100644 index 000000000..0b96e1805 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/admin-password-reset.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 5 +id: admin-password-reset +title: Admin password cannot be changed in `.env` +description: Change or reset the OpenCloud admin password +draft: false +hide_table_of_contents: true +--- + +# Admin password cannot be changed in `.env` + +## Problem + +Changing the OpenCloud admin password in the `.env` file has no effect after the container has been initialized, or the current password has been forgotten. + +## Cause + +The `.env` value is used to set the initial admin password. Once the container is running, password changes must be made through the Web UI or terminal. + +## Solution + +### Option 1: Change via Web UI + +If the current admin password is known: + +1. Log in to the OpenCloud Web Interface. +2. Navigate to Settings > Security. +3. Enter your current password and choose a new one. + +> If the admin password is forgotten or you prefer command-line tools, use the terminal method below. + +### Option 2: Change via Terminal + +If the admin password is forgotten or needs to be changed via the terminal: + +#### Stop the Docker container + +First, stop your OpenCloud container: + +```bash +docker compose stop opencloud +``` + +#### Run the password reset command + +Use the following command to reset the password: + +```bash +sudo docker run -it --rm -v :/var/lib/opencloud -v :/etc/opencloud opencloudeu/opencloud: idm resetpassword +``` + +Replace: + +- `` with the Docker volume for OpenCloud data. +- `` with the Docker volume for OpenCloud configuration. +- `` with `latest` or your specific version. + +To find the volume names, list the current Docker volumes: + +```bash +docker volume ls +``` + +Look for volumes such as: + +- `opencloud-compose_opencloud-data` +- `opencloud-compose_opencloud-config` + +#### Example for the standard setup + +```bash +sudo docker run -it --rm -v opencloud-compose_opencloud-data:/var/lib/opencloud -v opencloud-compose_opencloud-config:/etc/opencloud opencloudeu/opencloud:latest idm resetpassword +``` + +#### Start the container again + +```bash +docker compose up -d +``` diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/containers-not-running.md b/versioned_docs/version-7.2/admin/resources/common-issues/containers-not-running.md new file mode 100644 index 000000000..db2811781 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/containers-not-running.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 2 +id: containers-not-running +title: OpenCloud containers are not running +description: Check whether the OpenCloud containers are running +draft: false +hide_table_of_contents: true +--- + +# OpenCloud containers are not running + +## Problem + +OpenCloud is unavailable or does not work as expected. + +## Cause + +One or more required containers may not be running. + +## Solution + +Check the running containers: + +```bash +docker ps +``` + +Admin general + +Several containers should be listed, for example OpenCloud and Traefik. + +If an expected container is missing or not running, check the logs for errors or warnings: + +```bash +docker compose logs +``` + +To inspect a specific service, add its name: + +```bash +docker compose logs +``` + +Use the log messages to identify the affected service and continue troubleshooting the reported error. diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/docker-permissions.md b/versioned_docs/version-7.2/admin/resources/common-issues/docker-permissions.md new file mode 100644 index 000000000..ab20226ce --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/docker-permissions.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 4 +id: docker-permissions +title: Docker Compose fails with permission denied +description: Fix Docker permission issues +draft: false +hide_table_of_contents: true +--- + +# Docker Compose fails with permission denied + +## Problem + +The Docker Compose setup fails to start and the logs contain messages such as `permission denied`. + +Example log output: + +```bash +opencloud-1 | {"level":"fatal","service":"nats","time":"2025-04-08T09:59:59Z","line":"github.com/opencloud-eu/opencloud/services/nats/pkg/logging/nats.go:33","message":"Can't start JetStream: could not create storage directory - mkdir /var/lib/opencloud/nats: permission denied"} +``` + +## Cause + +The mounted directories may be owned by the wrong user, such as `root`, instead of the standard Docker user (`UID 1000`). + +Incorrect directory ownership: + +```bash +drwxr-xr-x 3 root root 4096 Apr 8 09:59 opencloud-data +``` + +Correct directory ownership: + +```bash +drwxr-xr-x 9 1000 1000 4096 Apr 7 07:57 opencloud-data +``` + +## Solution + +Adjust the ownership of the directory using the `chown` command: + +```bash +chown -R 1000:1000 opencloud-data +``` + +:::caution Security warning +The user with UID 1000 on your host system will have full access to these mounted directories. Any local user account with this ID can read, modify, or delete OpenCloud configuration and data. + +This can pose a security risk in shared or multi-user environments. Implement appropriate user and permission management and consider isolating access to these directories. +::: + +Apply the ownership change to all relevant directories mounted into the containers. diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/index.md b/versioned_docs/version-7.2/admin/resources/common-issues/index.md new file mode 100644 index 000000000..57a250e40 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/index.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 1 +id: common-issues-overview +title: Common Issues & Help +description: Common issues and help +draft: false +toc_max_heading_level: 2 +--- + +# Common Issues & Help + +Use this page to find troubleshooting guidance for common administration issues. + +## Startup and permissions + +- [OpenCloud containers are not running](./containers-not-running.md) +- [Docker Compose fails with permission denied](./docker-permissions.md) + +## Browser and certificates + +- [Browser rejects a self-signed certificate](./self-signed-certificates.md) + +## Access and account recovery + +- [Admin password cannot be changed in `.env`](./admin-password-reset.md) +- [Login fails with LDAP Result Code 49](./ldap-invalid-credentials.md) + +## IDM and certificates + +- [Internal LibreIDM certificate expires](./libreidm-cert-expiry.md) diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/ldap-invalid-credentials.md b/versioned_docs/version-7.2/admin/resources/common-issues/ldap-invalid-credentials.md new file mode 100644 index 000000000..a623c5cdf --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/ldap-invalid-credentials.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 7 +id: ldap-invalid-credentials +title: Login fails with LDAP Result Code 49 +description: Resolve invalid credentials caused by mismatched LibreIDM volumes +draft: false +hide_table_of_contents: true +--- + +# Login fails with LDAP Result Code 49 (Invalid Credentials) + +## Problem + +When using the built-in IDM (LibreIDM), login can fail with `Unexpected HTTP response: 500` in the browser, and the logs show the internal directory rejecting a bind: + +```bash +opencloud-1 | {"level":"error","service":"idm","bind_dn":"uid=idp,ou=sysusers,o=libregraph-idm","op":"bind","message":"not found"} +opencloud-1 | {"level":"error","service":"idp","error":"ldap identifier backend logon connect error: LDAP Result Code 49 \"Invalid Credentials\": ","message":"identifier failed to logon with backend"} +``` + +## Cause + +The built-in IDM seeds its service-account passwords once, at first start, into a bolt-store on the data volume (`idm.boltdb`), matching the values `opencloud init` writes into `opencloud.yaml` on the configuration volume. + +The bind fails when the two volumes are no longer from the same `init`. The `idm` log entry reads either `not found` or `invalid credentials`; both indicate the same mismatch. This usually results from setting an internal LDAP password in the environment, or from reusing one volume, such as a restored or carried-over data volume, without the other. + +## Solution + +With the built-in IDM, do not set the internal LDAP or service passwords in `.env` or the environment. Let `opencloud init` generate them, and keep only `INITIAL_ADMIN_PASSWORD`. + +Treat `opencloud.yaml` on the configuration volume and the data volume as one set. Keep them together and from the same point in time when you back up, restore, or move the instance. + +If you do not need the existing data, remove both volumes so that `init` generates a matching set, then start again: + +```bash +docker compose down +docker volume rm opencloud-compose_opencloud-config opencloud-compose_opencloud-data +docker compose up -d +``` + +:::caution +Deleting `idm.boltdb` alone may not be enough: it is re-seeded from the current configuration, but a bind password still set in the environment keeps the two sides out of sync. +::: + +### Recommendation + +The built-in IDM is intended for testing and small installations. For production, use an external identity provider, for example Keycloak with an external LDAP. diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/libreidm-cert-expiry.md b/versioned_docs/version-7.2/admin/resources/common-issues/libreidm-cert-expiry.md new file mode 100644 index 000000000..2c0fe8762 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/libreidm-cert-expiry.md @@ -0,0 +1,59 @@ +--- +sidebar_position: 6 +id: libreidm-cert-expiry +title: Internal LibreIDM certificate expires +description: Renew an expired internal LibreIDM certificate +draft: false +hide_table_of_contents: true +--- + +# Internal LibreIDM certificate expires + +## Problem + +When using the internal IDM (LibreIDM), the LDAP certificate may expire. The logs may contain errors such as: + +```bash +opencloud-1 | ERR handleConnection ber.ReadPacket error="remote error: tls: bad certificate" service=idm +opencloud-1 | ERR could not get ldap Connection error="LDAP Result Code 200 \"Network Error\": tls: failed to verify certificate: x509: certificate has expired or is not yet valid" service=graph +opencloud-1 | ERR Autoprovisioning user failed error="500 Internal Server Error" service=proxy +``` + +## Cause + +OpenCloud 7.2 does not automatically renew the internal LibreIDM certificate before it expires. + +## Solution + +Navigate to the IDM directory: + +```bash +cd .opencloud/idm +``` + +Delete the expired certificate and key: + +```bash +rm ldap.crt ldap.key +``` + +The directory has the following structure: + +```text +.opencloud/idm +├── idm.boltdb +├── ldap.crt +└── ldap.key +``` + +Restart the OpenCloud container: + +```bash +docker compose restart +``` + +The certificate and key are regenerated automatically when the container restarts. + +### Recommendation + +The built-in IDM is intended for testing and small installations. For production, use an external identity provider, for example Keycloak with an external LDAP. diff --git a/versioned_docs/version-7.2/admin/resources/common-issues/self-signed-certificates.md b/versioned_docs/version-7.2/admin/resources/common-issues/self-signed-certificates.md new file mode 100644 index 000000000..aff4ab600 --- /dev/null +++ b/versioned_docs/version-7.2/admin/resources/common-issues/self-signed-certificates.md @@ -0,0 +1,28 @@ +--- +sidebar_position: 3 +id: self-signed-certificates +title: Browser rejects a self-signed certificate +description: Accept a self-signed certificate in the browser +draft: false +hide_table_of_contents: true +--- + +# Browser rejects a self-signed certificate + +## Problem + +The browser displays a security warning when you access a local OpenCloud environment. + +## Cause + +The local environment uses a self-signed certificate that the browser does not trust automatically. + +## Solution + +Accept the security risk in your browser. In Firefox, select **Advanced**: + +Admin general + +Then select **Accept the Risk and Continue**: + +Admin general diff --git a/versioned_docs/version-7.2/admin/resources/index.md b/versioned_docs/version-7.2/admin/resources/index.md index 7f0ac6336..17d88541b 100644 --- a/versioned_docs/version-7.2/admin/resources/index.md +++ b/versioned_docs/version-7.2/admin/resources/index.md @@ -14,5 +14,5 @@ Use this section for troubleshooting, lifecycle information, and general admin h - [FAQ](./faq.md) - [What's New](./whats-new.md) - [Release Lifecycle](./lifecycle.md) -- [Common Issues & Help](./common-issues.md) +- [Common Issues & Help](./common-issues/index.md) - [Demo User](./demo-user.md)