Merge branch 'master' into patch-1

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
This commit is contained in:
rakekniven 2025-03-21 22:46:47 +01:00 committed by GitHub
commit df0cb8d30d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
915 changed files with 66485 additions and 10655 deletions

4
.codespellignore Normal file
View File

@ -0,0 +1,4 @@
SME
te
jus
nin

4
.codespellrc Normal file
View File

@ -0,0 +1,4 @@
[codespell]
skip = ./build/*,**/_build/*,*.pot,conf.py,./static/*,./admin_manual/configuration_server/config_sample_php_parameters.rst,./_shared_assets/*,./COPYING
ignore-words = .codespellignore
check-filenames = true

10
.github/CODEOWNERS vendored
View File

@ -1,12 +1,10 @@
/*/groupware/ @ChristophWurst
/*/groupware/calendar.rst @miaulalala
/*/groupware/contacts.rst @hamza221
/*/groupware/mail.rst @GretaD
/*/groupware/calendar.rst @SebastianKrupinski @st3iny @tcitworld
/*/groupware/contacts.rst @GVodyanov @hamza221 @SebastianKrupinski
/*/groupware/mail.rst @ChristophWurst @GretaD @kesselb
/*/security.rst @nickvergessen
/admin_manual/configuration_database @nickvergessen
/admin_manual/file_workflows @nickvergessen
/developer_manual/client_apis/OCS/ocs-status-api.rst @Antreesy @nickvergessen
/developer_manual/digging_deeper/groupware/ @ChristophWurst
/developer_manual/digging_deeper/groupware/calendar.rst @miaulalala
/developer_manual/digging_deeper/groupware/calendar.rst @SebastianKrupinski @st3iny @tcitworld
/developer_manual/digging_deeper/talk.rst @nickvergessen
/user_manual/talk/ @Antreesy @DorraJaouad @nickvergessen

View File

@ -2,6 +2,9 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Block merges during freezes
@ -27,10 +30,10 @@ jobs:
steps:
- name: Register server reference to fallback to master branch
run: |
server_ref="$(if [ "${{ github.base_ref }}" = "main" ]; then echo -n "master"; else echo -n "${{ github.base_ref }}"; fi)"
server_ref="$(if [ '${{ github.base_ref }}' = 'main' ]; then echo -n 'master'; else echo -n '${{ github.base_ref }}'; fi)"
echo "server_ref=$server_ref" >> $GITHUB_ENV
- name: Download version.php from ${{ env.server_ref }}
run: curl https://raw.githubusercontent.com/nextcloud/server/${{ env.server_ref }}/version.php --output version.php
run: curl 'https://raw.githubusercontent.com/nextcloud/server/${{ env.server_ref }}/version.php' --output version.php
- name: Run check
run: cat version.php | grep 'OC_VersionString' | grep -i -v 'RC'

22
.github/workflows/codespell.yml vendored Normal file
View File

@ -0,0 +1,22 @@
name: 'Codespell'
on:
pull_request:
push:
branches:
- master
jobs:
codespell:
name: Check spelling
runs-on: self-hosted
steps:
- name: Check out code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Check spelling
uses: codespell-project/actions-codespell@406322ec52dd7b488e48c1c4b82e2a8b3a1bf630 # v2.1
with:
skip: '**.svg, **.js'

View File

@ -1,51 +0,0 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Rebase command
on:
issue_comment:
types: created
permissions:
contents: read
jobs:
rebase:
runs-on: ubuntu-latest
permissions:
contents: none
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
- name: Checkout the latest code
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
- name: Automatic Rebase
uses: cirrus-actions/rebase@b87d48154a87a85666003575337e27b8cd65f691 # 1.8
env:
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"

View File

@ -2,6 +2,9 @@
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Block fixup and squash commits
@ -28,6 +31,6 @@ jobs:
steps:
- name: Run check
uses: skjnldsv/block-fixup-merge-action@42d26e1b536ce61e5cf467d65fb76caf4aa85acf # v1
uses: skjnldsv/block-fixup-merge-action@c138ea99e45e186567b64cf065ce90f7158c236a # v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -12,30 +12,45 @@ jobs:
user_manual:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- uses: ammaraskar/sphinx-action@master
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
with:
python-version: '3.13'
- uses: ammaraskar/sphinx-action@54e52bfb642e9b60ea5b6bcb05fe3f74b40d290a # v8.2.3
with:
docs-folder: "user_manual/"
pre-build-command: pip install -r requirements.txt
build-command: make gettext
pre-build-command: "pip install -r requirements.txt"
build-command: "make gettext"
- uses: peter-evans/create-pull-request@v6
- name: Change file owner to correct user
run: |
ls -la user_manual/locale/source
sudo chown -R 1001:1001 user_manual/locale/source
ls -la user_manual/locale/source
- uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
id: cpr
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: "chore(l10n): Updates catalog templates (POT files fetched automatically by transifex)"
title: Updates catalog templates
branch: update-l10n
commit-message: 'chore(l10n): Updates catalog templates (POT files fetched automatically by transifex)'
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
signoff: true
branch: 'automated/noid/update-l10n'
title: 'Updates catalog templates'
- uses: hmarr/auto-approve-action@v4.0.0
- uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
if: steps.cpr.outputs.pull-request-operation == 'created'
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
pull-request-number: ${{ steps.cpr.outputs.pull-request-number }}
- uses: pascalgn/automerge-action@v0.16.3
- uses: pascalgn/automerge-action@7961b8b5eec56cc088c140b56d864285eabd3f67 # v0.16.4
if: steps.cpr.outputs.pull-request-operation == 'created'
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@ -15,12 +15,12 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
submodules: true
- name: Set up php
uses: shivammathur/setup-php@c665c7a15b5295c2488ac8a87af9cb806cd72198 # v2
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2
with:
php-version: '8.1'
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation

View File

@ -17,10 +17,11 @@ on:
jobs:
pr-feedback:
if: ${{ github.repository_owner == 'nextcloud' }}
runs-on: ubuntu-latest
steps:
- name: The get-github-handles-from-website action
uses: marcelklehr/get-github-handles-from-website-action@a739600f6b91da4957f51db0792697afbb2f143c # v1.0.0
uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
id: scrape
with:
website: 'https://nextcloud.com/team/'
@ -35,7 +36,7 @@ jobs:
with:
feedback-message: |
Hello there,
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process.
@ -45,6 +46,6 @@ jobs:
(If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).)
days-before-feedback: 14
start-date: "2024-04-30"
exempt-authors: "${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }},nextcloud-command,nextcloud-android-bot"
start-date: '2024-04-30'
exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}'
exempt-bots: true

View File

@ -11,7 +11,7 @@ jobs:
user_manual:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-python@v5
with:
python-version: '3.10'
@ -23,7 +23,7 @@ jobs:
shell: bash
run: tar czf /tmp/documentation.tar.gz -C user_manual/_build/html .
- name: Upload static documentation
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.6.1
with:
name: User manual.zip
path: "/tmp/documentation.tar.gz"
@ -31,7 +31,7 @@ jobs:
user_manual-en:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-python@v5
with:
python-version: '3.10'
@ -43,7 +43,7 @@ jobs:
developer_manual:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-python@v5
with:
python-version: '3.10'
@ -55,7 +55,7 @@ jobs:
shell: bash
run: tar czf /tmp/documentation.tar.gz -C developer_manual/_build/html/com .
- name: Upload static documentation
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.6.1
with:
name: Developer manual.zip
path: "/tmp/documentation.tar.gz"
@ -63,7 +63,7 @@ jobs:
admin_manual:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-python@v5
with:
python-version: '3.10'
@ -75,7 +75,7 @@ jobs:
shell: bash
run: tar czf /tmp/documentation.tar.gz -C admin_manual/_build/html/com .
- name: Upload static documentation
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.6.1
with:
name: Administration manual.zip
path: "/tmp/documentation.tar.gz"

View File

@ -17,7 +17,7 @@ jobs:
name: Auto-merge
needs: approve
steps:
- uses: pascalgn/automerge-action@v0.16.3
- uses: pascalgn/automerge-action@v0.16.4
if: github.actor == 'transifex-integration[bot]'
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@ -42,4 +42,4 @@ openapi-spec: get-server-sources
clean:
rm -r admin_manual/_build developer_manual/_build user_manual/_build user_manual_de_/_build
rm -vrf admin_manual/_build developer_manual/_build user_manual/_build user_manual_de_/_build

View File

@ -170,7 +170,7 @@ Using the VSCode DevContainer
This repository contains a full-featured `VSCode DevContainer <https://code.visualstudio.com/docs/devcontainers/containers>`_.
You can use it in your local development environment or via `GitHub Codespaces <https://github.com/features/codespaces>`_.
Just open the container an use one of the commands from above to build the project. For example ``make`` to build the full
documentaion, ``make html`` to build the HTML documentaion or ``make pdf`` to build the PDF documentation. You can also use
documentation, ``make html`` to build the HTML documentation or ``make pdf`` to build the PDF documentation. You can also use
``make SPHINXBUILD=sphinx-autobuild html`` in combination with `port forwarding <https://code.visualstudio.com/docs/devcontainers/containers#_forwarding-or-publishing-a-port>`_
to watch file changes and automatically reload the html preview.

View File

@ -92,4 +92,20 @@ div#list-of-available-icons > blockquote > div > div > p {
font-size: 90%;
font-style: normal;
text-align: center;
}
.wy-nav-content {
max-width: clamp(800px, calc(100vw - 600px), 1200px) !important;
}
.wy-nav-content section {
max-width: 900px;
}
table.docutils {
min-width: 50%;
}
#code-style table.docutils {
width: 100%;
}

View File

@ -3,7 +3,7 @@
# You can set these variables from the command line.
SPHINXOPTS +=
SPHINXBUILD = sphinx-build
SPHINXBUILD = buf_size=1000000 sphinx-build
PAPER =
BUILDDIR = _build
@ -115,7 +115,7 @@ latex:
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
buf_size=10000000 $(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
pdf:

View File

@ -0,0 +1,18 @@
{% if READTHEDOCS %}
{# Add rst-badge after rst-versions for small badge style. #}
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Read the Docs</span>
v: {{ current_version }}
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>{{ _('Versions') }}</dt>
{% for slug, url in versions %}
<dd><a href="{{ url }}">{{ slug }}</a></dd>
{% endfor %}
</dl>
</div>
</div>
{% endif %}

View File

@ -4,15 +4,36 @@ AI as a Service
.. _ai-ai_as_a_service:
At Nextcloud we focus on creating on-premise AI apps that run fully self-hosted on your own servers in order to preserve your privacy and data sovereignty. However, you can also offload these resource-heavy tasks to an "AI as a Service" provider offering API access in exchange for payment. Examples of such providers are `OpenAI <https://platform.openai.com/>`_, with its ChatGPT APIs providing language model access among other APIs as well as `replicate <https://replicate.com/>`_.
At Nextcloud we focus on creating on-premise AI apps that run fully self-hosted on your own servers in order to preserve your privacy and data sovereignty.
However, you can also offload these resource-heavy tasks to an "AI as a Service" provider offering API access in exchange for payment.
Examples of such providers are `OpenAI <https://platform.openai.com/>`_, with its ChatGPT APIs providing language model access
among other APIs as well as `Replicate <https://replicate.com/>`_.
Installation
------------
In order to use these providers you will need to install the respective app from the app store:
* ``integration_openai`` (With this application, you can also connect to a self-hosted LocalAI instance or to any service that implements an API similar to OpenAI, for example Plusserver or MistralAI.)
* ``integration_openai``
* ``integration_replicate``
You can then add your API token and rate limits in the administration settings and set the providers live in the "Artificial intelligence" section of the admins settings.
Optionally but recommended, setup background workers for faster pickup of tasks. See :ref:`the relevant section in AI Overview<ai-overview_improve-ai-task-pickup-speed>` for more information.
OpenAI integration
------------------
With this application, you can also connect to a self-hosted LocalAI or Ollama instance or to any service that implements an API similar enough to the OpenAI API,
for example `IONOS AI Model Hub <https://docs.ionos.com/cloud/ai/ai-model-hub>`_,
`Plusserver <https://www.plusserver.com/en/ai-platform/>`_, `Groqcloud <https://console.groq.com>`_, `MistralAI <https://mistral.ai>`_ or `Together AI <https://together.ai>`_.
Do note however, that we test the Assistant tasks that this app implements only with OpenAI models and only against the OpenAI API, we thus cannot guarantee other models and APIs will work.
Some APIs claiming to be compatible with OpenAI might not be fully compatible so we cannot guarantee that they will work with this app.
Improve performance
-------------------
Prompts from integration_openai and integration_replicate can have a delay of 5 minutes. This can be optimized and more information can be found in :ref:`the relevant section in AI Overview <ai-overview_improve-ai-task-pickup-speed>`.

View File

@ -1,36 +0,0 @@
========================
AppAPI and External Apps
========================
.. _ai-app_api:
Previously, Nextcloud only supported applications written in the PHP programming language. In order to support a wider range of use cases,
the External App ecosystem was introduced, which allows installing apps that are docker containers.
Most of our AI apps nowadays are ExApps (External Apps) and thus require some preparation of your Nextcloud before you can install them.
Installation
------------
1. You will need to install the `AppAPI <https://apps.nextcloud.com/apps/app_api>`_ Nextcloud app from the app store.
2. You will need to set up a Deploy Daemon in the AppAPI admin settings. A Deploy Daemon is a way for Nextcloud to install and communicate with and control External Apps.
1. You will need to `setup a docker container called docker-socket-proxy that proxies access to docker for your Nextcloud instance <https://github.com/cloud-py-api/docker-socket-proxy#readme>`_
2. Now you can connect your Nextcloud to the docker-socket-proxy by entering its details in the Deploy Daemon creation form in the AppAPI settings.
3. Make sure to enable GPU support if you want the installed ExApps to be able to use the GPU
3. You can now install ExApps from the Nextcloud Appstore by clicking "Install" on the respective app in the AppAPI apps page.
FAQ
---
* I have two graphic cards XXX with 6/8/Y GB of ram each, how can I run something what does not fit in one graphic card?
* Distributing models across multiple GPUs is currently not supported. You will need a GPU that fits all of the model you are trying to use.
* I have YYY graphic card that does not supports CUDA - can I use it and how?
* No, our AI apps require GPUs with CUDA support to function
* What is the minimum VRAM size requirement for a GPU if I want to install multiple apps?
* When running multiple ExApps on the same GPU, it is currently required that the GPU can hold the largest model of the apps you install
* Is it possible to add more graphics cards for my instance to enable parallel requests or to speed up one request?
* Parallel processing of AI workloads of the same app with multiple GPUs is currently not supported
* Can I use in parallel CPU and GPU for AI processing?
* No, you can only process AI workloads for one app either on CPU or GPU. Between apps you can decide which app you want to run on CPU or GPU.

View File

@ -6,7 +6,7 @@ Nextcloud Assistant
Nextcloud assistant is the primary graphical user interface for interacting with artificial intelligence features in Nextcloud.
It offers the graphical user interface for text processing tasks like summarizing text, generating headlines, and asking arbitrary questions, for Speech-To-Text transcription of media files, for Text-To-Image picture generation and it integrates with the context_chat app to offer in-context answers about your own data stored in Nextcloud. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
It offers the graphical user interface for the unified AI Task processing API offering features like summarizing text, generating headlines, asking arbitrary questions, transcription of media files, image generation and it integrates with the context_chat app to offer in-context answers about your own data stored in Nextcloud. The assistant app also offers a chat interface to interact with the chosen language model. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
Find the user documentation here: `<https://github.com/nextcloud/assistant/tree/main/docs/user>`_
@ -36,16 +36,20 @@ Related apps
Artificial intelligence at Nextcloud is built in a modular way, allowing you to choose from a variety of solutions for your needs. In order to make use of the various features of the Assistant you will need additional apps that act as backends to provide the actual implementation of the AI functionality. In the Nextcloud administration settings under "Artificial intelligence" you can select which AI backend app to use for which tasks. Note that some of the backend apps are only community maintained, while others are available for Customer support upon request.
The AI admin settings will show all types of Assistant Tasks that are implemented by all your installed apps. Task types can be disabled in the AI admin settings so they are not available for the Assistant or other apps even if they are implemented. All implemented Task types are enabled by default.
**Note**: At Nextcloud we focus on creating on-premise AI apps that run fully self-hosted on your own servers in order to preserve your privacy and data sovereignty. However, you can also offload these resource-heavy tasks to an :ref:`"AI as a Service" provider<ai-ai_as_a_service>`.
**Note**: When using our on-premise AI apps, make sure you have a GPU with enough VRAM that fits all the features you need. For each app documented here you will find its hardware requirements.
.. _machine_translation:
Machine translation
~~~~~~~~~~~~~~~~~~~
In order to make use of machine translation features in the assistant, you will need an app that provides a translation backend:
* :ref:`translate<ai-app-translate>` - Runs open source AI translation models locally on your own server hardware (Customer support available upon request)
* :ref:`translate2 (ExApp)<ai-app-translate2>` - Runs open source AI translation models locally on your own server hardware (Customer support available upon request)
* *integration_deepl* - Integrates with the deepl API to provide translation functionality from Deepl.com servers (Only community supported)
* *integration_libretranslate* - Integrates with the open source LibreTranslate API to provide translation functionality hosted commercially or on your own hardware (Only community supported)
Speech-To-Text
~~~~~~~~~~~~~~
@ -63,12 +67,26 @@ In order to make use of text processing features in the assistant, you will need
* :ref:`llm2<ai-app-llm2>` - Runs open source AI language models locally on your own server hardware (Customer support available upon request)
* *integration_openai* - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
These apps currently implement the following Assistant Tasks:
* *Generate text* (Tested with OpenAI GPT-3.5 and Llama 3.1 8B)
* *Summarize* (Tested with OpenAI GPT-3.5 and Llama 3.1 8B)
* *Generate headline* (Tested with OpenAI GPT-3.5 and Llama 3.1 8B)
* *Extract topics* (Tested with OpenAI GPT-3.5 and Llama 3.1 8B)
Additionally, *integration_openai* also implements the following Assistant Tasks:
* *Context write* (Tested with OpenAI GPT-3.5)
* *Reformulate text* (Tested with OpenAI GPT-3.5)
These tasks may work with other models, but we can give no guarantees.
Text-To-Image
~~~~~~~~~~~~~
In order to make use of Text-To-Image features, you will need an app that provides an image generation backend:
* text2image_stablediffusion2 (Customer support available upon request)
* :ref:`tex2image_stablediffusion2<ai-app-text2image_stablediffusion2>` (Customer support available upon request)
* *integration_openai* - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
* *integration_replicate* - Integrates with the replicate API to provide AI functionality from replicate servers (see :ref:`AI as a Service<ai-ai_as_a_service>`)
@ -79,6 +97,18 @@ In order to make use of our special Context Chat feature, offering in-context in
* :ref:`context_chat + context_chat_backend<ai-app-context_chat>` - (Customer support available upon request)
You will also need a text processing provider as specified above (ie. llm2 or integration_openai).
Context Agent
~~~~~~~~~~~~~
In order to make use of our AI agent feature, offering the execution of actions on behalf of the user based on the AI chat, you will need the following apps:
* :ref:`context_agent<ai-app-context_agent>` - (Customer support available upon request)
You will also need a text processing provider as specified above (ie. *llm2* or *integration_openai*).
Configuration
-------------
@ -94,7 +124,7 @@ Assistant configuration
.. code-block::
occ config:app:set assistant assistant_enabled --value=1 --type=integer
occ config:app:set assistant assistant_enabled --value=1 --type=string
To enable/disable the assistant button from the top-right corner for all the users.
@ -102,7 +132,7 @@ To enable/disable the assistant button from the top-right corner for all the use
.. code-block::
occ config:app:set assistant free_prompt_picker_enabled --value=1 --type=integer
occ config:app:set assistant free_prompt_picker_enabled --value=1 --type=string
To enable/disable the AI text generation smart picker for all the users.
@ -110,7 +140,7 @@ To enable/disable the AI text generation smart picker for all the users.
.. code-block::
occ config:app:set assistant text_to_image_picker_enabled --value=1 --type=integer
occ config:app:set assistant text_to_image_picker_enabled --value=1 --type=string
To enable/disable the text-to-image smart picker for all the users.
@ -118,10 +148,45 @@ To enable/disable the text-to-image smart picker for all the users.
.. code-block::
occ config:app:set assistant speech_to_text_picker_enabled --value=1 --type=integer
occ config:app:set assistant speech_to_text_picker_enabled --value=1 --type=string
To enable/disable the speech-to-text smart picker for all the users.
Task processing
~~~~~~~~~~~~~~~
1. List Tasks
.. code-block::
occ taskprocessing:task:list
lists all task processing tasks.
2. Get Task
.. code-block::
occ taskprocessing:task:get $TASK_ID
shows all information for a specific task.
3. Enable or disable a Task type
.. code-block::
occ taskprocessing:task-type:set-enabled $TASK_TYPE_ID 1
Set 1 to enable and 0 to disable an implemented task type.
4. Get Task statistics
.. code-block::
occ taskprocessing:task:stats
shows statistics for all task processing Tasks.
Image storage
~~~~~~~~~~~~~
@ -142,6 +207,8 @@ Chat with AI
The user instructions that are prepended before the chat messages for the AI model to understand the context of the block of text. This is a good place not only to instruct the AI model to be polite and kind but also to for example answer all the queries in a particular language or better yet, follow the user's language. The sky is the limit.
**Note**: The default instructions are optimized to work well across a variety of language models, but may not be optimal for the specific model you choose. Specifically, the model may be tempted to mention the user's name a bit too often and may mention the user's language in an unusual manner.
2. Chat User Instructions for Title Generation
.. code-block::
@ -158,3 +225,8 @@ This field is appended to the block of chat messages, i.e. attached after the me
The number of latest messages to consider for generating the next message. This does not include the user instructions, which is always considered in addition to this. This value should be adjusted in case you are hitting the token limit in your conversations too often.
The AI text generation provider should ideally handle the max token limit case.
Improve AI task pickup speed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
See :ref:`the relevant section in AI Overview<ai-overview_improve-ai-task-pickup-speed>` for more information.

View File

@ -0,0 +1,140 @@
==================================
App: Context Agent (context_agent)
==================================
.. _ai-app-context_agent:
The *context_agent* app is the app that provides AI agent functionality in Nextcloud and acts as a backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
When the Context Agent app is installed the AI Chat in Nextcloud Assistant will be able to interact with your Nextcloud apps via virtual integrations that are called "tools". They allow the Assistant to perform actions in your Nextcloud upon sending instructions in a chat message.
Currently implemented tools:
* List the user's calendars
* Example prompt: *"List my calendars"*
* List the user's talk conversations
* Example prompt: *"List my talk conversations"*
* List messages in a talk conversation
* Example prompt: *"List the latest messages in my conversation with Andrew"*
* Find a person in the user's contacts
* Example prompt: *"What is Andrew's Email address?"*
* Find the current user's details
* Example prompt: *"Where do I live?"*
* Ask a question to context chat
* Example prompt: *"What is the company's sick leave process?"*
* Get coordinates for an Address from Open Street Maps Nomatim
* Example prompt: *"List my calendars"*
* Get the current weather at a location
* Example prompt: *"How is the weather in Berlin?"*
* Schedule an event in the user's calendar
* Example prompt: *"Make schedule an event with Andrew tomorrow at noon."*
* Send a message to a talk conversation
* Example prompt: *"Can you send a joke to Andrew in talk?"*
* Create a deck card
* Example prompt: *"Create a deck card for 'Buy Groceries' in my Personal board."*
* Access information in deck boards
* Example prompt: *"Which deck cards are currently in the To do list in my Personal board?"*
* Create a task
* Example prompt: *"Create a task for 'Renovate flat' in my Personal calendar. The task should be due Monday next week."*
* Search for youtube videos
* Example prompt: *"Show me the youtube video of the Nextcloud hub 10 launch."*
* Send an email via Nextcloud Mail
* Example prompt *"Send a test email from carry@company.com to Andrew@company.com from my account with id 12"*
* (The account ID will soon be irrelevant)
These tools can also be combined by the agent to fulfil tasks like the following:
* *"How is the weather where Andrew lives?"*
* Uses contacts to look up Andrew's address and then checks the weather
* *"How is the weather where I live?"*
* Look up the current user's address and then checks the weather
* *"Send an email from carry@company.com to Andrew"*
* Uses contacts to look up Andrew's email and then sends an email
Requirements
------------
* This app is built as an External App and thus depends on AppAPI v3.1.0 or higher
* Nextcloud AIO is supported
* No GPU is necessary for Context Agent but one might be useful if you use it with a self-hosted provider like llm2
* CPU Sizing
* At least 1GB of system RAM
Installation
------------
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
2. Install the "Context Agent" ExApp via the "Apps" page in the Nextcloud web admin user interface
3. Install a text generation backend like :ref:`llm2 <ai-app-llm2>` or :ref:`integration_openai <ai-ai_as_a_service>` via the "Apps" page in Nextcloud
Model requirements
~~~~~~~~~~~~~~~~~~
This app requires underlying Large language models to support tool calling. The default model in *llm2* does *not* support tool calling. Instead we recommend:
* Mistral 3 small 24B
* Qwen 2.5 8B or higher (May not work well with languages other than English)
* Watt Tool 8B or higher
See :ref:`llm2 documentation <ai-app-llm2>` on how to configure alternate models.
Scaling
-------
It is currently not possible to scale this app, we are working on this.
App store
---------
You can also find the app in our app store, where you can write a review: `<https://apps.nextcloud.com/apps/context_agent>`_
Repository
----------
You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: `<https://github.com/nextcloud/context_agent>`_
Nextcloud customers should file bugs directly with our Support system.
Known Limitations
-----------------
* Make sure to test the language model you are using in concert with this app for whether they meet the use-case's quality requirements
* Most models have difficulties with languages other than English. Some sometimes answer in another language than used by the user.
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)

View File

@ -11,46 +11,96 @@ Context Chat is an :ref:`assistant<ai-app-assistant>` feature that is implemente
Together they provide the ContextChat text processing tasks accessible via the :ref:`Nextcloud Assistant app<ai-app-assistant>`.
The *context_chat* and *context_chat_backend* apps run only open source models and do so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
The *context_chat* and *context_chat_backend* apps will use the Free text-to-text task processing providers like OpenAI integration, LLM2, etc. and such a provider is required on a fresh install, or it can be configured to run open source models entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
This app supports input and output in the same languages that the currently configured Free text-to-text task processing provider supports.
Requirements
------------
* Minimal Nextcloud version: 28
* The *context_chat_backend* app is built as an External App and thus depends on AppAPI v2.3.0 and later
* Minimal Nextcloud version: 30
* Nextcloud AIO is supported
* We currently support NVIDIA GPUs and x86_64 CPUs
* GPU Sizing
* CPU that supports AVX and AVX2 instruction
* CUDA >= v12.2 on your host system
* GPU Setup Sizing
* A NVIDIA GPU with at least 8GB VRAM
* At least 12GB of system RAM
* A NVIDIA GPU with at least 2GB VRAM
* The requirements for the Free text-to-text providers should be checked separately
* llm2's requirements can be found :ref:`here <ai-app-llm2>`
* integration_openai does not have any additional GPU requirements
* At least 8GB of system RAM
* 2 GB + additional 500MB for each concurrent request made to the backend if configuration parameters are changed
* CPU Sizing
* CPU Setup Sizing
* At least 12GB of system RAM
* 2 GB + additional 500MB for each request made to the backend if the Free text-to-text provider is not on the same machine
* 8 GB is recommended in the above case for the default settings
* This app makes use of the configured free text-to-text task processing provider instead of running its own language model by default, you will thus need 4+ cores for the embedding model only (backed configuration needs changes to make use of the extra cores, refer to `Configuration Options (Backend)`_)
* A dedicated machine is recommended
Space usage
~~~~~~~~~~~
This app employs a bundled Vector DB called `Chroma<https://github.com/chroma-core/chroma>`. All the users' textual data is duplicated, chunked and stored on disk in this vector DB along with semantic embedding vectors for the content.
Assuming no shared files between users you can calculate with roughly the amount of textual data in user files (e.g. for PDFs, only the text counts, no images are kept). Any shared files will be duplicated per user, however, so, assuming all files are shared with all users you need to calculate with "the amount of textual data in user files * number of users". The reality will lie between these two estimates, of course.
This app employs a bundled DB with Vector support called `PostgreSQL <https://www.postgresql.org/>`_. All the users' textual data is duplicated, chunked and stored on disk in this vector DB along with semantic embedding vectors for the content.
Installation
------------
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
2. Install the *context_chat_backend* ExApp via the "External Apps" admin page in Nextcloud
3. Install the *context_chat* app via the "Apps" page in Nextcloud, or by executing
1. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
2. Setup a :ref:`Deploy Demon <ai-app_api>` in AppAPI Admin settings
3. Install the *context_chat_backend* ExApp via the "Apps" page in Nextcloud, or by executing (checkout the readme at https://github.com/nextcloud/context_chat_backend for manual install steps)
.. code-block::
occ app_api:app:register context_chat_backend
4. Install the *context_chat* app via the "Apps" page in Nextcloud, or by executing
.. code-block::
occ app:enable context_chat
5. Install a text generation backend like :ref:`llm2 <ai-app-llm2>` or `integration_openai <https://github.com/nextcloud/integration_openai>`_ via the "Apps" page in Nextcloud
6. Optionally but recommended, setup background workers for faster pickup of tasks. See :ref:`the relevant section in AI Overview<ai-overview_improve-ai-task-pickup-speed>` for more information.
**Note**: Both apps need to be installed and both major version and minor version of the two apps must match for the functionality to work (ie. "v1.3.4" and "v1.3.1"; but not "v1.3.4" and "v2.1.6"; and not "v1.3.4" and "v1.4.5"). Keep this in mind when updating.
Initial loading of data
-----------------------
Auto-indexing
~~~~~~~~~~~~~
| Context chat will automatically load user data into the Vector DB using asynchronous background jobs.
| The initial loading of data can take a long time depending on the number of files and their size.
The indexing jobs are set up to run during the Nextcloud instance's maintenance window (typically during the night) only. If you have not set a maintenance window, indexing will run 24/7.
You can set up a background job worker explicitly for Context Chat to avoid slowing down normal background job operation on larger instances.
.. code-block::
php cron.php "OCA\\ContextChat\\BackgroundJobs\\IndexerJob" "OCA\\ContextChat\\BackgroundJobs\\ActionJob" "OCA\\ContextChat\\BackgroundJobs\\SubmitContentJob" "OCA\\ContextChat\\BackgroundJobs\\StorageCrawlJob" "OCA\\ContextChat\\BackgroundJobs\\InitialContentImportJob"
You can set this command to run every 15 minutes on weekends using cron for example.
Synchronous indexing
~~~~~~~~~~~~~~~~~~~~
| To index all the files synchronously, use the following command:
| Note: This does not interact with the auto-indexing feature and that list would remain unchanged. However, the indexed files would be skipped when the auto indexer runs.
.. code-block::
occ context_chat:scan <user_id>
**Note**: The synchronous command could take several days to complete. On larger systems we thus recommend to use auto-indexing.
Scaling
-------
@ -68,13 +118,93 @@ You can find the app's code repository on GitHub where you can report bugs and c
Nextcloud customers should file bugs directly with our Customer Support.
Commands (OCC)
--------------
The options for each command can be found like this, using scan as example: ``context_chat:scan --help``
* ``context_chat:diagnostics``
Check currently running ContextChat background processes.
* ``context_chat:prompt``
Ask a question about your data, with options for selective context.
* ``context_chat:scan``
Scan and index the user's documents based on the user ID provided, synchronously.
* ``context_chat:stats``
| Shows the time taken to complete the initial indexing of the documents if it has finished,
| and the current no. of items in the indexer and actions queue.
| "Actions" refers to tasks like file deletions, ownership changes through share changes, etc.
| These file and ownership changes are synced with the backed through this actions queue.
Configuration Options (OCC)
---------------------------
* ``auto_indexing`` boolean (default: true)
To allow/disallow the IndexerJob from running in the background
.. code-block::
occ config:app:set context_chat auto_indexing --value=true --type=boolean
* ``indexing_batch_size`` integer (default: 5000)
The number of files to index per run of the indexer background job (this is limited by `indexing_max_time`)
.. code-block::
occ config:app:set context_chat indexing_batch_size --value=100 --type=integer
* ``indexing_job_interval`` integer (default: 1800)
The interval at which the indexer jobs run in seconds
.. code-block::
occ config:app:set context_chat indexing_job_interval --value=1800 --type=integer
* ``indexing_max_time`` integer (default: 1800)
The number of seconds to index files for per run, regardless of batch size
.. code-block::
occ config:app:set context_chat indexing_max_time --value=1800 --type=integer
* ``request_timeout`` integer (default: 3000)
Request timeout in seconds for all requests made to the Context chat backend (the external app in AppAPI).
If a docker socket proxy is used, the ``TIMEOUT_SERVER`` environment variable should be set to a value higher than ``request_timeout``.
.. code-block::
occ config:app:set context_chat request_timeout --value=3 --type=integer
Configuration Options (Backend)
-------------------------------
Refer to `the Configuration head <https://github.com/nextcloud/context_chat_backend?tab=readme-ov-file#configuration>`_ in the backend's readme.
Logs
----
Logs for the ``context_chat`` PHP app can be found in the Nextcloud log file, which is usually located in the Nextcloud data directory. The log file is named ``nextcloud.log``.
| For the backend, warning and error logs can be found in the docker container logs, and the complete logs can be found in ``logs/`` directory in the persistent storage of the docker container.
| That will be ``/nc_app_context_chat_backend/logs/`` in the docker container.
| See `the Logs head <https://github.com/nextcloud/context_chat_backend?tab=readme-ov-file#logs>`_ in the backend's readme for more information.
Possibility of Data Leak
------------------------
| It is possible that some users who had access to certain files/folders (and have later have been denied this access) still have access to the content of those files/folders through the Context Chat app. We're working on a solution for this.
| The users who never had access to a particular file/folder will NOT be able to see those contents in any way.
Known Limitations
-----------------
* The underlying language model used by Context Chat cannot be changed
* We currently only support the English language
* Language models are likely to generate false information and should thus only be used in situations that are not critical. It's recommended to only use AI at the beginning of a creation process and not at the end, so that outputs of AI serve as a draft for example and not as final product. Always check the output of language models before using it.
* Make sure to test this app for whether it meets your use-case's quality requirements
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)
* Due to technical limitations that we are in the process of mitigating, each task currently incurs a time cost of between 0 and 5 minutes in addition to the actual processing time
* Nextcloud usernames can be only 56 characters long. This is a limitation of the vector database we use (Chroma DB) and will be fixed soon.
* Language models are likely to generate false information and should thus only be used in situations that are not critical. It's recommended to only use AI at the beginning of a creation process and not at the end, so that outputs of AI serve as a draft for example and not as final product. Always check the output of language models before using it and make sure whether it meets your use-case's quality requirements.
* Context Chat is not integrated into the Chat UI of assistant app, at the moment, but has it's own interface in the assistant modal
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI).
* Large files are not supported in "Selective context" in the Assistant UI if they have not been indexed before. Use ``occ context_chat:scan <user_id> -d <directory_path>`` to index the desired directory synchronously and then use the Selective context option. "Large files" could mean differently for different users. It depends on the amount of text inside the documents in question and the hardware on which the indexer is running. Generally 20 MB should be large for a CPU-backed setup and 100 MB for a GPU-backed system.
* Password protected PDFs or any other files are not supported. There will be error logs mentioning cryptography and AES in the docker container when such files are encountered but it is nothing to worry about, they will be simply ignored and the system will continue to function normally.

View File

@ -4,31 +4,50 @@ App: Local large language model (llm2)
.. _ai-app-llm2:
The *llm2* app is one of the apps that provide text processing functionality using Large language models in Nextcloud and act as a text processing backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`, the *mail* app and :ref:`other apps making use of the core Translation API<tp-consumer-apps>`. The *llm2* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
The *llm2* app is one of the apps that provide text processing functionality using Large language models in Nextcloud and act as a text processing backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`, the *mail* app and :ref:`other apps making use of the core Text Processing API<tp-consumer-apps>`. The *llm2* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
This app uses `ctransformers <https://github.com/marella/ctransformers>`_ under the hood and is thus compatible with any model in *gguf* format. Output quality will differ depending on which model you use, we recommend the following models:
This app uses `llama.cpp <https://github.com/abetlen/llama-cpp-python>`_ under the hood and is thus compatible with any model in *gguf* format.
* `Llama2 7b Chat <https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF>`_ (Slightly older; good quality; good acclaim)
* `NeuralBeagle14 7B <https://huggingface.co/mlabonne/NeuralBeagle14-7B-GGUF>`_ (Newer; good quality; less well known)
However, we only test with Llama 3.1. Output quality will differ depending on which model you use and downstream tasks like summarization or Context Chat may not work on other models.
We thus recommend the following models:
* `Llama3.1 8b Instruct <https://huggingface.co/QuantFactory/Meta-Llama-3.1-8B-Instruct-GGUF>`_ (reasonable quality; fast; good acclaim; comes shipped with the app)
* `Llama3.1 70B Instruct <https://huggingface.co/bartowski/Meta-Llama-3.1-70B-Instruct-GGUF>`_ (good quality; good acclaim)
Multilinguality
---------------
This app supports input and output in languages other than English if the underlying model supports the language.
Llama 3.1 `supports the following languages: <https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct#multilingual-benchmarks>`_
* English
* Portuguese
* Spanish
* Italian
* German
* French
* Hindi
* Thai
Note, that other languages may work as well, but only the above languages are guaranteed to work.
Requirements
------------
* This app is built as an External App and thus depends on AppAPI v2.3.0
* This app is built as an External App and thus depends on AppAPI v3.1.0 or higher
* Nextcloud AIO is supported
* Using GPU processing is supported, but not required; be prepared for slow performance unless you are using GPU
* We currently only support NVIDIA GPUs
* We currently support NVIDIA GPUs and x86_64 CPUs
* CPU that supports AVX and AVX2 instruction
* CUDA >= v12.2 on your host system
* GPU Sizing
* You will need a GPU with enough VRAM to hold the model you choose
* for 7B parameter models, 5bit-quantized variants and lower should fit on a 8GB VRAM, but of course have lower quality
* for 7B parameter models, 6bit-quantized variants and up will need 12GB VRAM
* If you want better reasoning capabilities, you will need to look for models with more parameters, like 14B and higher, which of course also need more VRAM
* A NVIDIA GPU with at least 8GB VRAM
* At least 12GB of system RAM
* CPU Sizing
* If you don't have a GPU, this app will utilize your CPU cores
* At least 12GB of system RAM
* The more cores you have and the more powerful the CPU the better, we recommend 10-20 cores
* The app will hog all cores by default, so it is usually better to run it on a separate machine
@ -37,7 +56,7 @@ Installation
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
2. Install the "Local large language model" ExApp via the "External Apps" page in the Nextcloud web admin user interface
2. Install the "Local large language model" ExApp via the "Apps" page in the Nextcloud web admin user interface
Supplying alternate models
~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -49,6 +68,43 @@ This app allows supplying alternate LLM models as *gguf* files in the ``/nc_app_
3. Restart the llm2 ExApp
4. Select the new model in the Nextcloud AI admin settings
Configuring alternate models
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Since every model requires slightly different inference parameters, you can pass along a configuration file for the alternate model files you supply.
The configuration file for a model file must have the same name as the model file but must end in ``.json`` instead of ``.gguf``.
The strings ``{system_prompt}`` and ``{user_prompt}`` are variables that will be filled in by the app, so they must be part of your prompt template.
Here is an example config file for Llama 2:
.. code-block:: json
{
"prompt": "<|im_start|> system\n{system_prompt}\n<|im_end|>\n<|im_start|> user\n{user_prompt}\n<|im_end|>\n<|im_start|> assistant\n",
"loader_config": {
"n_ctx": 4096,
"max_tokens": 2048,
"stop": ["<|im_end|>"]
}
}
Here is an example configuration for Llama 3:
.. code-block:: json
{
"prompt": "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n{system_prompt}<|eot_id|><|start_header_id|>user<|end_header_id|>\n{user_prompt}<|eot_id|>\n<|start_header_id|>assistant<|end_header_id|>\n",
"loader_config": {
"n_ctx": 8000,
"max_tokens": 4000,
"stop": ["<|eot_id|>"],
"temperature": 0.3
}
}
Scaling
-------
@ -69,9 +125,32 @@ Nextcloud customers should file bugs directly with our Support system.
Known Limitations
-----------------
* We currently only support the English language
* We currently only support languages that the underlying model supports; correctness of language use in languages other than English may be poor depending on the language's coverage in the model's training data (We recommended model Llama 3 or other models explicitly trained on multiple languages)
* Language models can be bad at reasoning tasks
* Language models are likely to generate false information and should thus only be used in situations that are not critical. It's recommended to only use AI at the beginning of a creation process and not at the end, so that outputs of AI serve as a draft for example and not as final product. Always check the output of language models before using it.
* Make sure to test the language model you are using it for whether it meets the use-case's quality requirements
* Language models notoriously have a high energy consumption, if you want to reduce load on your server you can choose smaller models or quantized models in excahnge for lower accuracy
* Language models notoriously have a high energy consumption, if you want to reduce load on your server you can choose smaller models or quantized models in exchange for lower accuracy
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)
* Due to technical limitations that we are in the process of mitigating, each task currently incurs a time cost of between 0 and 5 minutes in addition to the actual processing time
Addendum: Running with a fully open model
-----------------------------------------
If you would like to use a fully open model that scores a green score on our Ethical AI rating, we recommend the following model:
* OLMo 2 (either in 7B or 13B): `<https://huggingface.co/allenai/OLMo-2-1124-7B-Instruct-GGUF>`_
What makes OLMo a fully open model?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The code for training, fine-tuning and inference of the model is publicly available and fully open source
* The training data with which the model is pretrained is publicly available
* The model itself is publicly available and fully open source
* The instruction tuning data is publicly available
* The Reinforcement learning model is publicly available and fully open source
Limitations
~~~~~~~~~~~
* OLMo currently only works well with English language input
* In our tests it sometimes produced hallucinated or garbled output; make sure to thoroughly test the model for your use case
* It cannot use tools, so cannot be used in conjunction with :ref:`Context Agent <ai-app-context_agent>`

View File

@ -6,10 +6,14 @@ App: Local Whisper Speech-To-Text (stt_whisper2)
The *stt_whisper2* app is one of the apps that provide Speech-To-Text functionality in Nextcloud and act as a media transcription backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`, the *talk* app and :ref:`other apps making use of the core Translation API<stt-consumer-apps>`. The *stt_whisper2* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
This app supports input and output in languages other than English if the underlying model supports the language.
This app uses `faster-whisper <https://github.com/SYSTRAN/faster-whisper>`_ under the hood. Output quality will differ depending on which model you use, we recommend the following models:
* OpenAI Whisper large-v2 or v3
* OpenAI Whisper medium.en
* OpenAI Whisper large-v2 or v3 (multilingual)
* OpenAI Whisper medium.en (English only)
Whisper large v3 supports about ~100 languages and shows outstanding performance in ~10 of them. For more details see the `OpenAI Whisper paper <https://cdn.openai.com/papers/whisper.pdf>`_
Requirements
------------
@ -17,37 +21,28 @@ Requirements
* Minimal Nextcloud version: 28
* This app is built as an External App and thus depends on AppAPI v2.3.0
* Nextcloud AIO is supported
* Using GPU processing is supported, but not required; be prepared for slow performance unless you are using GPU
* We currently only support NVIDIA GPUs
* GPU Sizing
* You will need a GPU with enough VRAM to hold the model you choose
* the small model should fit on 2GB VRAM
* the large-v2 (the best and largest) will need 6GB VRAM
* The distil-whisper variants have half the parameters of the original models while supposedly staying within 1% of the original error rate (your mileage may vary)
* Using GPU is currently not supported
* CPU Sizing
* If you don't have a GPU, this app will utilize your CPU cores
* The more cores you have and the more powerful the CPU the better, we recommend 10-20 cores
* The app will hog all cores by default, so it is usually better to run it on a separate machine
* 4GB for the app
Installation
------------
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
2. Install the *stt_whisper2* "Local Speech-To-Text" ExApp via the "External Apps" page in the Nextcloud web admin user interface
2. Install the *stt_whisper2* "Local Speech-To-Text" ExApp via the "Apps" page in the Nextcloud web admin user interface
Supplying alternate models
~~~~~~~~~~~~~~~~~~~~~~~~~~
This app allows supplying alternate LLM models as *gguf* files in the ``/nc_app_llm2_data`` directory of the docker container. You can use any `*faster-whisper* model by Systran on hugging face <https://huggingface.co/Systran>`_ by simply
This app allows supplying alternate models in the ``/nc_app_stt_whisper2_data`` directory of the docker container. You can use any `*faster-whisper* model by Systran on hugging face <https://huggingface.co/Systran>`_ in the following way:
1. git cloning the respective repository
2. Copying the folder with the git repository to ``/nc_app_llm2_data`` inside the docker container.
2. Copying the folder with the git repository to ``/nc_app_stt_whisper2_data`` inside the docker container.
3. Restarting the Whisper ExApp
4. Selecting the respective model in the Nextcloud AI admin settings
@ -76,6 +71,6 @@ Known Limitations
* The whisper models perform unevenly across languages, and may show lower accuracy on low-resource and/or low-discoverability languages or languages where there was less training data available. The models also exhibit disparate performance on different accents and dialects of particular languages, which may include higher word error rate across speakers of different genders, races, ages, or other demographic criteria.
* Language models are likely to generate false information and should thus only be used in situations that are not critical. It's recommended to only use AI at the beginning of a creation process and not at the end, so that outputs of AI serve as a draft for example and not as final product. Always check the output of language models before using it.
* Make sure to test the language model you are using it for whether it meets the use-case's quality requirements
* Language models notoriously have a high energy consumption, if you want to reduce load on your server you can choose smaller models or quantized models in excahnge for lower accuracy
* Language models notoriously have a high energy consumption, if you want to reduce load on your server you can choose smaller models or quantized models in exchange for lower accuracy
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)
* Due to technical limitations that we are in the process of mitigating, each task currently incurs a time cost of between 0 and 5 minutes in addition to the actual processing time

View File

@ -0,0 +1,137 @@
==========================================
App: Summary Bot (Talk chat summarize bot)
==========================================
.. _ai-app-summary-bot:
The *Summary Bot* app utilizes Large Language Model (LLM) providers in Nextcloud and can be added to a conversation in `Nextcloud Talk` to generate summaries from the chat messages of that room either on-demand or following a schedule.
It can run on only open source or proprietary models either on-premises or in the cloud leveraging apps like `Local large language model app <https://apps.nextcloud.com/apps/llm2>`_ or `OpenAI and LocalAI integration app <https://apps.nextcloud.com/apps/integration_openai>`_.
Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
The app currently supports the following languages:
* English (en)
The quality of summaries depends directly on the quality of the underlying model. It is recommended to test the model for the desired use-case before applying it.
Requirements
------------
* Minimal Nextcloud version: 30
* Docker
* AppAPI >= 3.0.0
* Talk
* Task Processing Provider like Local large language model app (llm2) or OpenAI and LocalAI integration app (integration_openai)
Space usage
~~~~~~~~~~~
* ~100MB
Installation
------------
0. Make sure the following apps are installed:
- `Nextcloud AppAPI app <https://apps.nextcloud.com/apps/app_api>`_
- `Nextcloud Talk app (Spreed) <https://apps.nextcloud.com/apps/spreed>`_
- One of the following AI model providers:
- `Nextcloud Local large language model app <https://apps.nextcloud.com/apps/llm2>`_
- `Nextcloud OpenAI and LocalAI integration app <https://apps.nextcloud.com/apps/integration_openai>`_
Setup (via App Store)
~~~~~~~~~~~~~~~~~~~~~
1. Install the *Summary Bot* app via the "Apps" page in Nextcloud
2. Enable the *Summary Bot* Bot for the selected Chatroom via the three dots menu of the Chatroom (The Bots settings are located inside the *Bots* section)
Setup (Manual)
~~~~~~~~~~~~~~
After cloning this app *manually* (cloned via git to your apps directory) you will need to execute the following steps:
1. Change to the folder you have cloned the source to:
.. code-block::
cd /path/to/your/nextcloud/webroot/apps/summary_bot/
2. Build the docker image:
.. code-block::
docker build --no-cache -f Dockerfile -t local_summary_bot .
3. Run the docker image:
*Info:*
- APP_VERSION environment variable should be equal to the version of the *Summary Bot* you are using
- NEXTCLOUD_URL environment variable must be set to your Nextcloud instance's URL, ensuring it's reachable by the docker image.
.. code-block::
sudo docker run -ti -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro -e APP_ID=summary_bot -e APP_DISPLAY_NAME="Summary Bot" -e APP_HOST=0.0.0.0 -e APP_PORT=9031 -e APP_SECRET=12345 -e APP_VERSION=1.0.0 -e NEXTCLOUD_URL='<YOUR_NEXTCLOUD_URL_REACHABLE_FROM_INSIDE_DOCKER>' -p 9031:9031 local_summary_bot
4. Un-register the Summary Bot if its already installed
.. code-block::
sudo -u <the_user_the_webserver_is_running_as> php /path/to/your/nextcloud/webroot/occ app_api:app:unregister summary_bot
5. Register the Summary Bot so that your Nextcloud instance is aware of it
*Info:* Adjust the host value in the following example to the IP address of the docker container (for added security)
.. code-block::
sudo -u <the_user_the_webserver_is_running_as> php ./occ app_api:app:register summary_bot manual_install --json-info '{ "id": "summary_bot", "name": "Summary Bot", "daemon_config_name": "manual_install", "version": "1.0.0", "secret": "12345", "host": "0.0.0.0", "port": 9031, "scopes": ["AI_PROVIDERS", "TALK", "TALK_BOT"], "protocol": "http"}' --force-scopes --wait-finish
6. Enable the *Summary Bot* for the selected Chatroom via the three dots menu of the Chatroom (The Bots settings are located inside the *Bots* section)
Usage
-----
After enabling the *Summary Bot* in a Chatroom, you can test its functionality by simply sending the message below:
"@summary" or "@summary help"
App store
---------
You can also find the app in our app store, where you can write a review: `<https://apps.nextcloud.com/apps/summary_bot>`_
Repository
----------
You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: `<https://github.com/nextcloud/summary_bot>`_
Nextcloud customers should file bugs directly with our Customer Support.
Ethical AI Rating
-----------------
The ethical rating of the *Summary Bot*, which utilizes a model for text processing through the Nextcloud Assistant app, is significantly influenced by the choice and implementation of the underlying model.
Learn more about the Nextcloud Ethical AI Rating `in our blog<https://nextcloud.com/blog/nextcloud-ethical-ai-rating/>`.
Known Limitations
-----------------
* The Summary Bot cannot access previous conversations, it only recognizes messages from the moment it was enabled in the chatroom.
* Summary of maximum 40000 characters is supported. This assumes the underlying model can handle this amount of text (which should be close to 16000 context length).
* Languages other than English are not supported. The underlying model may still be able to understand other languages.
* AI models may occasionally produce inaccurate information. Therefore, they should be employed with caution in non-critical scenarios. It's essential to verify the accuracy of the bot's output before application.
* Be aware that AI models can consume a significant amount of energy. It's advisable to consider this factor in the planning and operation of AI systems if hosted on-premises or sustainability is a concern.
* AI models can exhibit extended processing times when run on CPUs. For enhanced efficiency, utilizing GPU support is recommended to expedite request handling.
* Customer support is available upon request, however we can't solve false or problematic output (hallucinations), most performance issues, or other problems caused by the underlying models. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)

View File

@ -0,0 +1,60 @@
=========================================================
App: Local Image Generation (text2image_stablediffusion2)
=========================================================
.. _ai-app-text2image_stablediffusion2:
The *text2image_stablediffusion2* app is one of the apps that provide image generation functionality in Nextcloud and act as an image generation backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>` and other apps making use of the image generation functionality. The *text2image_stablediffusion2* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
Requirements
------------
* This app is built as an External App and thus depends on AppAPI v3.1.0 or higher
* Nextcloud AIO is supported
* We currently support NVIDIA GPUs and x86_64 CPUs
* CUDA >= v12.2 on your host system
* GPU Sizing
* A NVIDIA GPU with at least 8GB VRAM
* CPU Sizing
* At least 8GB of system RAM
* The more cores you have and the more powerful the CPU the better, we recommend 10-20 cores
* The app will hog all cores by default, so it is usually better to run it on a separate machine
Installation
------------
* Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
* :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
* Install the "Local large language model" ExApp via the "Apps" page in the Nextcloud web admin user interface
Scaling
-------
It is currently not possible to scale this app, we are working on this. Based on our calculations an instance has a rough capacity of 120 image requests per hour (each user request can be for multiple images). However, this number is based on theory and we do appreciate real-world feedback on this.
App store
---------
You can also find the app in our app store, where you can write a review: `<https://apps.nextcloud.com/apps/text2image_stablediffusion2>`_
Repository
----------
You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: `<https://github.com/nextcloud/text2image_stablediffusion2>`_
Nextcloud customers should file bugs directly with our Support system.
Known Limitations
-----------------
* The generated images are of a fixed resolution (512x512 pix), and the model does not achieve perfect photorealism
* The model cannot render legible text
* Faces and people in general may not be generated properly
* The results for certain image generation requests can be biased and may enforce stereotypes
* We currently only support languages that the underlying model supports; correctness of language use in languages other than English may be poor depending on the language's coverage in the model's training data
* Make sure to test the app for whether it meets the use-case's quality requirements
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying model. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)

View File

@ -1,103 +0,0 @@
==========================================
App: Local Machine translation (translate)
==========================================
.. _ai-app-translate:
The *translate* app is one of the apps that provide machine translation functionality in Nextcloud and act as a translation backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`, the *text* app and :ref:`other apps making use of the core Translation API<mt-consumer-apps>`. The *translate* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
The app currently supports the following languages:
* English (en)
* German (de)
* French (fr)
* Spanish (es)
* Chinese (zh)
As the models are entirely open source, the quality of translations may not be comparable to commercially available machine translation services.
Requirements
------------
* Minimal Nextcloud version: 26
* x86 CPU
* GNU lib C (musl is not supported)
* This app does not support using GPU for processing and may thus not be performing ideally for long texts
(*Note*: Nextcloud AIO is currently not supported due to it using musl)
Space usage
~~~~~~~~~~~
* ~1GB per language pair
* ~10GB in total
Installation
------------
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. Install the *translate* app via the "Apps" page in Nextcloud, or by executing
occ app:enable translate
Setup
~~~~~
After installing this app you will need to run:
.. code-block::
occ translate:download-models
You may also download only specific languages by using the following command:
.. code-block::
occ translate:download-models <languages>
For example
.. code-block::
occ translate:download-models de en
will download both en->de and de->en.
.. code-block::
occ translate:download-models de en es
will download en->de, de->en, en->es, es->en, es->de, de->es
App store
---------
You can also find the app in our app store, where you can write a review: `<https://apps.nextcloud.com/apps/translate>`_
Repository
----------
You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: `<https://github.com/nextcloud/translate>`_
Nextcloud customers should file bugs directly with our Customer Support.
Ethical AI Rating
-----------------
Rating: 🟢
~~~~~~~~~~
Positive:
* the software for training and inference of this model is open source
* the trained model is freely available, and thus can be run on-premises
* the training data is freely available, making it possible to check or correct for bias or optimise the performance and CO2 usage.
Learn more about the Nextcloud Ethical AI Rating `in our blog<https://nextcloud.com/blog/nextcloud-ethical-ai-rating/>`.
Known Limitations
-----------------
* Language models are likely to generate false information and should thus only be used in situations that are not critical. It's recommended to only use AI at the beginning of a creation process and not at the end, so that outputs of AI serve as a draft for example and not as final product. Always check the output of language models before using it.
* Make sure to test the translation model you are using it for whether it meets the use-case's quality requirements
* Language models notoriously have a high energy consumption
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying models. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI)

View File

@ -0,0 +1,81 @@
=============================================
App: Local Machine translation 2 (translate2)
=============================================
.. _ai-app-translate2:
The *translate2* app is one of the apps that provide machine translation functionality in Nextcloud and act as a translation backend for the :ref:`Nextcloud Assistant app<ai-app-assistant>`. The *translate2* app specifically runs only open source models and does so entirely on-premises. Nextcloud can provide customer support upon request, please talk to your account manager for the possibilities.
The app currently supports 400+ languages. See the complete list here: https://huggingface.co/datasets/allenai/MADLAD-400
Requirements
------------
* Minimal Nextcloud version: 30
* This app is built as an External App and thus depends on AppAPI v3.1.0 or higher
* Nextcloud AIO is supported
* We currently support NVIDIA GPUs and x86_64 CPUs
* CUDA >= v12.2.2 on your host system
* GPU Sizing
* A NVIDIA GPU with at least 4 GB VRAM
* At least 6 GB of system RAM
* CPU Sizing
* x86 CPU with 4-8 cores for the app to use (The more cores the faster it will be)
* At least 6 GB of RAM for the app should be enough (includes software+libraries and the model)
Space usage
~~~~~~~~~~~
* ~ 2.95 GB for the docker container
* ~ 2.77 GB for the default model
Installation
------------
0. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed
1. :ref:`Install AppAPI and setup a Deploy Demon<ai-app_api>`
2. Install the "Local Machine Translation" (translate2) ExApp via the "Apps" page in the Nextcloud web admin user interface
Model Switch
------------
1. Remove ``hf_model_path`` key from ``loader`` object in the ``config.json`` file in the docker container named ``nc_app_translate2``.
2. Change ``model_name`` to the new model name to ``Nextcloud-AI/madlad400-7b-mt-bt-ct2-int8_float32``.
3. Restart the docker container ``docker restart nc_app_translate2``
App store
---------
You can also find the app in our app store, where you can write a review: `<https://apps.nextcloud.com/apps/translate2>`_
Repository
----------
You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: `<https://github.com/nextcloud/translate2>`_
Nextcloud customers should file bugs directly with our Customer Support.
Ethical AI Rating
-----------------
Rating: 🟢
~~~~~~~~~~
Positive:
* the software for training and inference of this model is open source
* the trained model is freely available, and thus can be run on-premises
* the training data is freely available, making it possible to check or correct for bias or optimise the performance and CO2 usage.
Learn more about the Nextcloud Ethical AI Rating `in our blog <https://nextcloud.com/blog/nextcloud-ethical-ai-rating>`_.
Known Limitations
-----------------
* AI translations are not a replacement for human professional translations and in many cases post-editing is required. AI translations can be used for understanding the main content of a text but not for translations that require special knowledge (such as technical content or legal content), or translations that require specific writing style to convey style, deeper meaning, or emotions (such as marketing content or translating books).
* While the quality of the output will be fine for the most common languages (English, French, Spanish) the quality will suffer for languages that have less coverage in the original training set.
* Make sure to test the translation model you are using it for whether it meets the use-case's quality requirements. The default model is the smallest of the batch and might produce duplicate translation outputs. Switch to a larger model if you need better quality and less artifacts, see `Model Switch`_.
* Language models notoriously have a high energy consumption.
* Customer support is available upon request, however we can't solve false or problematic output, most performance issues, or other problems caused by the underlying models. Support is thus limited only to bugs directly caused by the implementation of the app (connectors, API, front-end, AppAPI).

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 280 KiB

View File

@ -7,10 +7,12 @@ Artificial Intelligence
overview
app_assistant
app_translate
app_translate2
app_llm2
app_stt_whisper2
app_text2image_stablediffusion2
app_recognize
app_context_chat
app_api_and_external_apps
app_context_agent
app_summary_bot
ai_as_a_service

View File

@ -11,6 +11,9 @@ Overview of AI features
Nextcloud uses modularity to separate raw AI functionality from the Graphical User interfaces and apps that make use of said functionality. Each instance can thus make use of various backends that provide the functionality for the same frontends and the same functionality can be implemented by multiple apps using on-premises processing or third-party AI service providers.
.. figure:: images/ai_overview.png
:scale: 80%
.. csv-table::
:header: "Feature","App","Rating","Open source","Freely available model","Freely available training data","Privacy: Keeps data on premises"
@ -22,23 +25,45 @@ Nextcloud uses modularity to separate raw AI functionality from the Graphical Us
"Suspicious login detection","`Suspicious Login <https://apps.nextcloud.com/apps/suspicious_login>`_","Green","Yes","Yes","Yes","Yes"
"Related resources","`Related Resources <https://apps.nextcloud.com/apps/related_resources>`_","Green","Yes","Yes","Yes","Yes"
"Recommended files","recommended_files","Green","Yes","Yes","Yes","Yes"
"Machine translation","`Translate <https://apps.nextcloud.com/apps/translate>`_","Green","Yes","Yes - Opus models by University Helsinki","Yes","Yes"
"","`LibreTranslate integration <https://apps.nextcloud.com/apps/integration_libretranslate>`_","Green","Yes","Yes - OpenNMT models","Yes","Yes"
"Text processing using LLMs","`llm2 (ExApp) <https://apps.nextcloud.com/apps/llm2>`_","Green","Yes","Yes - Llama 3.1 model by Meta","Yes","Yes"
"","`OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_","Red","No","No","No","No"
"","`OpenAI and LocalAI integration (via LocalAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - e.g. Llama models by Meta", "No","Yes"
"","`OpenAI and LocalAI integration (via Ollama) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - e.g. Llama models by Meta", "No","Yes"
"","`OpenAI and LocalAI integration (via IONOS AI Model Hub) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Plusserver) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Groqcloud) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via MistralAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"Machine translation","`Local Machine Translation 2 (ExApp) <https://apps.nextcloud.com/apps/translate2>`_","Green","Yes","Yes - MADLAD models by Google","Yes","Yes"
"","`DeepL integration <https://apps.nextcloud.com/apps/integration_deepl>`_","Red","No","No","No","No"
"","`OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_","Red","No","No","No","No"
"","`OpenAI and LocalAI integration (via LocalAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Green","Yes","Yes","Yes","Yes"
"","`Local Whisper Speech-To-Text 2 (ExApp) <https://apps.nextcloud.com/apps/stt_whisper2>`_","Yellow","Yes","Yes - Whisper models by OpenAI","No","Yes"
"","`OpenAI and LocalAI integration (via Ollama) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - e.g. Llama models by Meta", "No","Yes"
"","`OpenAI and LocalAI integration (via IONOS AI Model Hub) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Plusserver) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Groqcloud) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via MistralAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"Speech to Text","`Local Whisper Speech-To-Text 2 (ExApp) <https://apps.nextcloud.com/apps/stt_whisper2>`_","Yellow","Yes","Yes - Whisper models by OpenAI","No","Yes"
"","`OpenAI and LocalAI integration <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - Whisper models by OpenAI","No","No"
"","`OpenAI and LocalAI integration (via LocalAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Green","Yes","Yes","Yes","Yes"
"","`OpenAI and LocalAI integration (via Ollama) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - e.g. Whisper", "No","Yes"
"","`OpenAI and LocalAI integration (via IONOS AI Model Hub) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Plusserver) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Groqcloud) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via MistralAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`Replicate integration <https://apps.nextcloud.com/apps/integration_replicate>`_","Yellow","Yes","Yes - Whisper models by OpenAI","No","No"
"Image generation","`Local Stable Diffusion <https://apps.nextcloud.com/apps/text2image_stablediffusion>`_","Yellow","Yes","Yes - StableDiffusion XL model by StabilityAI","No","Yes"
"","`OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_","Red","No","No","No","No"
"","`OpenAI and LocalAI integration (via LocalAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - StableDiffusion models by StabilityAI","No","Yes"
"","`Replicate integration <https://apps.nextcloud.com/apps/integration_replicate>`_","Yellow","Yes","Yes - StableDiffusion models by StabilityAI","No","No"
"","`Local large language model 2 (ExApp) <https://apps.nextcloud.com/apps/llm2>`_","Yellow","Yes","Yes","No","Yes"
"","`OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_","Red","No","No","No","No"
"","`OpenAI and LocalAI integration (via LocalAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Green","Yes","Yes","Yes","Yes"
"","`OpenAI and LocalAI integration (via Ollama) <https://apps.nextcloud.com/apps/integration_openai>`_","Yellow","Yes","Yes - e.g. Llama models by Meta", "No","Yes"
"","`OpenAI and LocalAI integration (via IONOS AI Model Hub) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Plusserver) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via Groqcloud) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"","`OpenAI and LocalAI integration (via MistralAI) <https://apps.nextcloud.com/apps/integration_openai>`_","Orange","No","Yes","No","No"
"Context Chat","`Nextcloud Assistant Context Chat <https://apps.nextcloud.com/apps/context_chat>`_","Yellow","Yes","Yes","No","Yes"
"","`Nextcloud Assistant Context Chat (Backend) <https://apps.nextcloud.com/apps/context_chat_backend>`_","Yellow","Yes","Yes","No","Yes"
"Context Agent","`Nextcloud Context Agent <https://apps.nextcloud.com/apps/context_agent>`_","Green","Yes","Yes","Yes","Yes"
Ethical AI Rating
@ -66,6 +91,30 @@ Features used by other apps
Some of our AI features are realized as generic APIs that any app can use and any app can provide an implementation for by registering a provider. So far, these are
Machine translation, Speech-To-Text, Image generation, Text processing and Context Chat.
Text processing
^^^^^^^^^^^^^^^
.. _tp-consumer-apps:
As you can see in the table above we have multiple apps offering text processing using Large language models.
In downstream apps like Context Chat and assistant, users can use the text processing functionality regardless of which app implements it behind the scenes.
Frontend apps
~~~~~~~~~~~~~
* *Text* for offering an inline graphical UI for the various tasks
* `Assistant <https://apps.nextcloud.com/apps/assistant>`_ for offering a graphical UI for the various tasks and a smart picker
* `Mail <https://apps.nextcloud.com/apps/mail>`_ for summarizing mail threads (see :ref:`the Nextcloud Mail docs<mail_thread_summary>` for how to enable this)
* `Summary Bot <https://apps.nextcloud.com/apps/summary_bot>`_ for summarizing chat histories in `Talk <https://apps.nextcloud.com/apps/spreed>`_
Backend apps
~~~~~~~~~~~~
* :ref:`llm2<ai-app-llm2>` - Runs open source AI LLM models on your own server hardware (Customer support available upon request)
* `OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_ - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
Machine translation
^^^^^^^^^^^^^^^^^^^
@ -84,9 +133,8 @@ Frontend apps
Backend apps
~~~~~~~~~~~~
* :ref:`translate<ai-app-translate>` - Runs open source AI translation models locally on your own server hardware (Customer support available upon request)
* :ref:`translate2 (ExApp)<ai-app-translate2>` - Runs open source AI translation models locally on your own server hardware (Customer support available upon request)
* *integration_deepl* - Integrates with the deepl API to provide translation functionality from Deepl.com servers (Only community supported)
* *integration_libretranslate* - Integrates with the open source LibreTranslate API to provide translation functionality hosted commercially or on your own hardware (Only community supported)
Speech-To-Text
^^^^^^^^^^^^^^
@ -99,37 +147,15 @@ Frontend apps
~~~~~~~~~~~~~
* `Assistant <https://apps.nextcloud.com/apps/assistant>`_ offering a graphical translation UI and a smart picker
* `Speech-to-Text Helper <https://apps.nextcloud.com/apps/stt_helper>`_ for providing a Speech-To-Text smart picker (deprecated; was merged into assistant)
* `Talk <https://apps.nextcloud.com/apps/spreed>`_ for transcribing calls (see `Nextcloud Talk docs <https://nextcloud-talk.readthedocs.io/en/latest/settings/#app-configuration>`_ for how to enable this)
Backend apps
~~~~~~~~~~~~
* :ref:`stt_whisper2<ai-app-stt_whisper2>` - Runs open source AI Speech-To-Text models on your own server hardware (Customer support available upon request)
* *integration_openai* - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
* `OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_ - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
Text processing
^^^^^^^^^^^^^^^
.. _tp-consumer-apps:
As you can see in the table above we have multiple apps offering Text processing capabilities. In downstream apps like the Nextcloud Assistant app, users can use the text processing functionality regardless of which app implements it behind the scenes.
Frontend apps
~~~~~~~~~~~~~
* `Assistant <https://apps.nextcloud.com/apps/assistant>`_ for offering a graphical UI for the various tasks and a smart picker
* `GPTFreePrompt <https://apps.nextcloud.com/apps/gptfreeprompt>`_ for providing an llm smart picker (deprecated; was merged into assistant)
* `Mail <https://apps.nextcloud.com/apps/mail>`_ for summarizing mail threads (see :ref:`the Nextcloud Mail docs<mail_thread_summary>` for how to enable this)
* `SummarAI <https://apps.nextcloud.com/apps/summarai>`_ for summarizing chat histories in `Talk <https://apps.nextcloud.com/apps/spreed>`_
Backend apps
~~~~~~~~~~~~
* :ref:`llm2<ai-app-llm2>` - Runs open source AI language models locally on your own server hardware (Customer support available upon request)
* *integration_openai* - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
Image generation
^^^^^^^^^^^^^^^^
@ -141,18 +167,17 @@ Frontend apps
~~~~~~~~~~~~~
* `Assistant <https://apps.nextcloud.com/apps/assistant>`_ for offering a graphical UI and a smart picker
* `Text-to-Image Helper <https://apps.nextcloud.com/apps/stt_helper>`_ for providing a Text-to-Image smart picker (deprecated; was merged into assistant)
Backend apps
~~~~~~~~~~~~
* text2image_stablediffusion2 (Customer support available upon request)
* *integration_openai* - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
* text2image_stablediffusion (Customer support available upon request)
* `OpenAI and LocalAI integration (via OpenAI API) <https://apps.nextcloud.com/apps/integration_openai>`_ - Integrates with the OpenAI API to provide AI functionality from OpenAI servers (Customer support available upon request; see :ref:`AI as a Service<ai-ai_as_a_service>`)
* *integration_replicate* - Integrates with the replicate API to provide AI functionality from replicate servers (see :ref:`AI as a Service<ai-ai_as_a_service>`)
Context Chat (Tech preview)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Context Chat
^^^^^^^^^^^^
Our Context Chat feature was introduced in Nextcloud Hub 7 (v28). It allows asking questions to the assistant related to your documents in Nextcloud. You will need to install both the context_chat app as well as the context_chat_backend External App. Be prepared that things might break or be a little rough around the edges. We look forward to your feedback!
Frontend apps
@ -165,6 +190,97 @@ Backend apps
* :ref:`context_chat + context_chat_backend<ai-app-context_chat>` - (Customer support available upon request)
Provider apps
~~~~~~~~~~~~~
Apps can integrate their content with Context Chat to make it available for querying using Context Chat. The following apps have implemented this integration so far:
* *files*
* `Analytics <https://apps.nextcloud.com/apps/analytics>`_
.. _ai-overview_improve-ai-task-pickup-speed:
Improve AI task pickup speed
----------------------------
Most AI tasks will be run as part of the background job system in Nextcloud which only runs jobs every 5 minutes by default.
To pick up scheduled jobs faster you can set up background job workers inside your Nextcloud main server/container that process AI tasks as soon as they are scheduled.
If the PHP code or the Nextcloud settings values are changed while a worker is running, those changes won't be effective inside the runner. For that reason, the worker needs to be restarted regularly. It is done with a timeout of N seconds which means any changes to the settings or the code will be picked up after N seconds (worst case scenario). This timeout does not, in any way, affect the processing or the timeout of the AI tasks.
Screen or tmux session
^^^^^^^^^^^^^^^^^^^^^^
Run the following occ command inside a screen or a tmux session, preferably 4 or more times for parallel processing of multiple requests by different or the same user (and as a requirement for some apps like context_chat).
It would be best to run one command per screen session or per tmux window/pane to keep the logs visible and the worker easily restartable.
.. code-block::
set -e; while true; do sudo -u www-data occ background-job:worker -v -t 60 "OC\TaskProcessing\SynchronousBackgroundJob"; done
For Nextcloud-AIO you should use this command on the host server.
.. code-block::
set -e; while true; do docker exec -u www-data -it nextcloud-aio-nextcloud php occ background-job:worker -v -t 60 "OC\TaskProcessing\SynchronousBackgroundJob"; done
You may want to adjust the number of workers and the timeout (in seconds) to your needs.
The logs of the worker can be checked by attaching to the screen or tmux session.
Systemd service
^^^^^^^^^^^^^^^
1. Create a systemd service file in ``/etc/systemd/system/nextcloud-ai-worker@.service`` with the following content:
.. code-block::
[Unit]
Description=Nextcloud AI worker %i
After=network.target
[Service]
ExecStart=/opt/nextcloud-ai-worker/taskprocessing.sh %i
Restart=always
StartLimitInterval=60
StartLimitBurst=10
[Install]
WantedBy=multi-user.target
2. Create a shell script in ``/opt/nextcloud-ai-worker/taskprocessing.sh`` with the following content and make sure to make it executable:
.. code-block::
#!/bin/sh
echo "Starting Nextcloud AI Worker $1"
cd /path/to/nextcloud
sudo -u www-data php occ background-job:worker -t 60 'OC\TaskProcessing\SynchronousBackgroundJob'
You may want to adjust the timeout to your needs (in seconds).
3. Enable and start the service 4 or more times:
.. code-block::
for i in {1..4}; do systemctl enable --now nextcloud-ai-worker@$i.service; done
The status of the workers can be checked with (replace 1 with the worker number):
.. code-block::
systemctl status nextcloud-ai-worker@1.service
The list of workers can be checked with:
.. code-block::
systemctl list-units --type=service | grep nextcloud-ai-worker
The complete logs of the workers can be checked with (replace 1 with the worker number):
.. code-block::
journalctl -xeu nextcloud-ai-worker@1.service -f
Frequently Asked Questions
--------------------------

View File

@ -21,9 +21,9 @@ During the Nextcloud server installation, some apps are enabled by default.
To see which apps are enabled go to your Apps page.
Those apps are supported and developed by Nextcloud GmbH directly and
have an **Featured**-tag. See :doc:`installation/apps_supported` for a list of supported apps.
have an **Featured**-tag.
.. note:: Your Nextcloud server needs to be able to communicate with
.. note:: Your Nextcloud server needs to be able to communicate with
``https://apps.nextcloud.com`` to list and download apps. Please make sure to whitelist this target in your firewall or proxy if necessary.
.. note:: To get access to work-arounds, long-term-support, priority bug fixing
@ -55,11 +55,11 @@ in the Application View field. Clicking the **Enable** button will enable the ap
If the app is not part of the Nextcloud installation, it will be downloaded from
the app store, installed and enabled.
App updates will also be offered to you on this page. Simply click on the **Update**
button to update a specific app or use the **Update all** button on top of the page to
App updates will also be offered to you on this page. Simply click on the **Update**
button to update a specific app or use the **Update all** button on top of the page to
update all apps.
.. note:: **Beta releases**: You can also install beta releases of apps directly from here by
.. note:: **Beta releases**: You can also install beta releases of apps directly from here by
switching your Nextcloud to the beta channel in the admin overview.
Update notifications
@ -81,6 +81,38 @@ By default guest users, when using the guests app, are not notified, to enable n
occ config:app:set --type boolean --value="true" updatenotification app_updated.notify_guests
Enabling apps via occ command
-----------------------------
In addition to managing apps via the web interface, administrators can also enable or disable apps using the `occ` command.
To enable an app, use the following command:
::
occ app:enable <app-id>
For example, to enable the "files" app, run:
::
occ app:enable files
To enable the app for specific groups, use the `--groups` option:
::
occ app:enable files --groups=admin
This command enables the "files" app only for the "admin" group.
To disable an app, use:
::
occ app:disable <app-id>
Using private API
-----------------
@ -96,7 +128,7 @@ folder. The key **url** defines the HTTP web path to that folder, starting at
the Nextcloud web root. The key **writable** indicates if a user can install apps
in that folder.
Example: To ensure that the default ``/apps/`` folder only contains apps shipped
Example: To ensure that the default ``/apps/`` folder only contains apps shipped
with Nextcloud, follow this example to setup an ``/extra-apps/`` folder
which will be used to store any additional apps you install:
@ -116,14 +148,14 @@ which will be used to store any additional apps you install:
],
.. danger:: Make sure that the values you choose for ``path`` and ``url`` for any custom
apps directories do not conflict with directories which already exist in your Nextcloud
apps directories do not conflict with directories which already exist in your Nextcloud
Server root (installation directory).
.. tip:: Apps paths can be located outside the server root. However, for any
**path** outside the server root, you need to create a symbolic link in the server
root that points **url** to **path**. For instance, if **path** is
``/var/local/lib/nextcloud/extra-apps``, and **url** is ``/extra-apps``, then
you would use the command ``ln`` to create the symbolic link like this:
``/var/local/lib/nextcloud/extra-apps``, and **url** is ``/extra-apps``, then
you would use the command ``ln`` to create the symbolic link like this:
``ln -sf /var/local/lib/nextcloud/extra-apps ./extra-apps``
Using a self hosted apps store
@ -147,6 +179,6 @@ To enable a self hosted apps store:
"appstoreurl" => "https://my.appstore.instance/v1",
By default the apps store is enabled and configured to use ``https://apps.nextcloud.com/api/v1`` as apps store url. Nextcloud will fetch ``apps.json`` and ``categories.json`` from there. To use the defaults again remove **appstoreenabled** and **appstoreurl** from the configuration.
By default the apps store is enabled and configured to use ``https://apps.nextcloud.com/api/v1`` as apps store url. Nextcloud will fetch ``apps.json`` and ``categories.json`` from there. To use the defaults again remove **appstoreenabled** and **appstoreurl** from the configuration.
Example: If ``categories.json`` is available at ``https://apps.nextcloud.com/api/v1/categories.json`` the apps store url is ``https://apps.nextcloud.com/api/v1``.

View File

@ -32,7 +32,7 @@ from conf import *
extensions += ['sphinx.ext.todo', 'rst2pdf.pdfbuilder', 'sphinx.ext.intersphinx']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['../_shared_assets/templates']
templates_path = ['../_shared_assets/templates', '_templates']
# The suffix of source filenames.
source_suffix = '.rst'
@ -52,6 +52,8 @@ master_doc = 'contents'
# The full version, including alpha/beta/rc tags.
#release = '12'
language = 'en'
# General information about the project.
project = u'Nextcloud %s Administration Manual' % (version)
#copyright = u'2012-2017, The Nextcloud developers'

View File

@ -37,7 +37,7 @@ The ``occ db:convert-type`` command handles all the tasks of the conversion. The
php occ db:convert-type [options] type username hostname database
``type`` should be the target database type. The same values are available here as for the ``config.php`` ``dbtype`` parameter. It should be one of: ``mysql`` for MariaDB/MySQL,
``pgsql`` for PostgresSQL, or ``oci`` for Oracle.
``pgsql`` for PostgreSQL, or ``oci`` for Oracle.
The options:

View File

@ -18,7 +18,7 @@ Requirements
* Decide whether you wish to use MySQL / MariaDB, PostgreSQL, or Oracle as your database
* Pick a recommendeded version of your database by checking the Nextcloud :doc:`System Requirements <../installation/system_requirements>`
* Install and set up the chosen database server software (and preferrred version) before deploying Nextcloud Server
* Install and set up the chosen database server software (and preferred version) before deploying Nextcloud Server
.. note:: The steps for configuring a third party database are beyond the
scope of this document. Please refer to the documentation for your specific
@ -208,7 +208,7 @@ like this:
extension=pdo_pgsql.so
extension=pgsql.so
[PostgresSQL]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1

View File

@ -1,3 +1,5 @@
.. _uploading_big_files:
===========================
Uploading big files > 512MB
===========================
@ -89,7 +91,7 @@ Apache with mod_proxy_fcgi
nginx
^^^^^
* `client_max_body_size <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_
* `fastcgi_read_timeout <https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout>`_
* `fastcgi_read_timeout <https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout>`_ [often the solution to 504 timeouts during ``MOVE`` transactions that occur even when using chunking]
* `client_body_temp_path <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_temp_path>`_
Since nginx 1.7.11 a new config option `fastcgi_request_buffering
@ -150,17 +152,18 @@ low. This setting needs to be configured to at least the time (in seconds) that
the longest upload will take. If unsure remove this completely from your
configuration to reset it to the default shown in the ``config.sample.php``.
.. _files_configure_max_chunk_size:
Adjust chunk size on Nextcloud side
-----------------------------------
For upload performance improvements in environments with high upload bandwidth, the server's upload chunk size may be adjusted::
sudo -u www-data php occ config:app:set files max_chunk_size --value 20971520
sudo -u www-data php occ config:system:set --type int --value 20971520 files.chunked_upload.max_size
Put in a value in bytes (in this example, 20MB). Set ``--value 0`` for no chunking at all.
Default is 10485760 (10 MiB).
Default is ``104857600`` (100 MiB).
.. note:: Changing ``max_chunk_size`` will not have any performance impact on files uploaded through File Drop shares as unauthenticated file uploads are not chunked.
@ -174,6 +177,8 @@ to the actual file on the Nextcloud servers temporary directory. It is recommend
the size of your temp directory accordingly and also ensure that request timeouts are high
enough for PHP, webservers or any load balancers involved.
.. TODO ON RELEASE: Update version number above on release
.. tip:: In more recent versions of Nextcloud Server, when uploading to S3 in *Primary Storage* mode, we use S3 `MultipartUpload`. This allows chunked upload streaming of the chunks directly to S3 so that the final MOVE request no longer needs to assemble the final file on the Nextcloud server. This requires your ``memcache.distributed`` to be set to use Redis (or Memcached), otherwise we fall back on the prior behavior which consumes space on the Nextcloud Server for file assembly (as described above).
Federated Cloud Sharing

View File

@ -79,6 +79,14 @@ the Nextcloud Web interface. If you lose your encryption keys your files are not
recoverable. Always have backups of your encryption keys stored in a safe
location, and consider enabling all recovery options.
Please be aware that a `master key` is generated during enabling the encryption.
This ensures that admin(s) can recover passwords and installed Nextcloud apps can
function properly.
If you do not want to use a master key setup, but wish to use user key encryption
instead, please run the following command before enabling the encryption::
occ encryption:disable-master-key
You have more options via the ``occ`` command (see :ref:`occ_encryption_label`)
.. _enable_encryption_label:

View File

@ -21,12 +21,12 @@ These conventions apply throughout this document:
Key type: master key
--------------------
This is the default encryption mode in Nextcloud. With master key encryption enabled there is one central key that is used to secure the files handled by Nextcloud. The master key is protected by a password that can be generated by the server administrator. The advantage of the master key encryption is that the encryption is transparent to the users but has the disadvantage that the server administrator is able to decrypt user files without knowing any user password.
This is the default encryption mode in Nextcloud. With master key encryption enabled there is one central key that is used to secure the files handled by Nextcloud. The master key is protected by the instance `secret` that is generated at installation time. The advantage of the master key encryption is that the encryption is transparent to the users but has the disadvantage that the server administrator is able to decrypt user files without knowing any user password.
Key type: public sharing key
----------------------------
The public sharing key is used to secure files that have been publicly shared. The public sharing key is protected by a password that can be generated by the server administrator. The advantage of the public sharing key is that it is independent of the selected encryption mode so that Nextcloud is able to provide publicly shared files to outside parties.
The public sharing key is used to secure files that have been publicly shared. The advantage of the public sharing key is that it is independent of the selected encryption mode so that Nextcloud is able to provide publicly shared files to outside parties.
Key type: recovery key
----------------------
@ -345,9 +345,9 @@ Each block is (by default) AES-256-CTR decrypted with the ``$iv[$position]`` and
Sources
-------
- `nextcloud-tools repository on GitHub <https://github.com/syseleven/nextcloud-tools>`_
- `encryption-recovery-tools repository on GitHub <https://github.com/nextcloud/encryption-recovery-tools>`_
- `Nextcloud Encryption Configuration documentation <https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/encryption_configuration.html>`_
- `Nextcloud Help response concering the usage of version information <https://help.nextcloud.com/t/allow-file-decryption-with-only-the-files-keys-and-passwords/436/12>`_
- `Nextcloud Help response concerning the usage of version information <https://help.nextcloud.com/t/allow-file-decryption-with-only-the-files-keys-and-passwords/436/12>`_
- `Sourcecode: Creation of the Message Authentication Code <https://github.com/nextcloud/server/blob/a374d8837d6de459500e619cf608e0721ea14574/apps/encryption/lib/Crypto/Crypt.php#L504>`_
- `Sourcecode: Derivation of the Encryption Key <https://github.com/nextcloud/server/blob/a374d8837d6de459500e619cf608e0721ea14574/apps/encryption/lib/Crypto/Crypt.php#L346>`_
- `Sourcecode: Encryption of the File <https://github.com/nextcloud/server/blob/a374d8837d6de459500e619cf608e0721ea14574/apps/encryption/lib/Crypto/Crypt.php#L234>`_

View File

@ -42,6 +42,8 @@ access your S3 mount.
The ``Enable SSL`` checkbox enables HTTPS connections and generally preferred. It is the default unless
you disable it here.
Optionally, a 32-byte base64 encoded SSE-C key can be provided for server side encryption. See :doc:`../primary_storage` and the `SSE-C AWS documentation <https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html>`_ for more information how to generate a key.
.. figure:: images/amazons3.png
:alt:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -5,9 +5,7 @@ SFTP
Nextcloud's SFTP (SSH File Transfer Protocol) backend supports both password and
public key authentication.
The **Host** field is required; a port can be specified as part of the **Host**
field in the following format: ``hostname.domain:port``. The default port is 22
(SSH).
The **Host** field is required. The default port is 22 (SSH).
For public key authentication, you can generate a public/private key pair from
your **SFTP with secret key login** configuration.

View File

@ -93,7 +93,7 @@ individually with the following options:
* Previews
* Enable Sharing
* Filesystem check frequency (Never, Once per direct access)
* Mac NFD Compatability
* Mac NFD Compatibility
* Read Only
The **Encryption** checkbox is visible only when the Encryption app is enabled. Note that server-side
@ -159,6 +159,6 @@ changed remotely (files changed without going through Nextcloud), especially
when it's very deep in the folder hierarchy of the external storage.
You might need to setup a cron job that runs ``sudo -u www-data php occ files:scan --all``
(or replace ``--all`` with the user name, see also :doc:`../configuration_server/occ_command`)
(or replace ``--all`` with the user name, see also :doc:`../occ_command`)
to trigger a rescan of the user's files periodically (for example every 15 minutes), which includes
the mounted external storage.

View File

@ -0,0 +1,7 @@
===============
File conversion
===============
In the majority of cases, it is recommended that either the Pandoc or :doc:`Nextcloud Office <../office/installation>` apps
are enabled, as they provide the majority of file conversions available. Other apps may also
support their own file conversions for other file types if more specific conversions are required.

View File

@ -172,7 +172,7 @@ Trashbin contents are not transferred::
occ files:transfer-ownership user1 user2
(See :doc:`../configuration_server/occ_command` for a complete ``occ``
(See :doc:`../occ_command` for a complete ``occ``
reference.)
Users may also transfer files or folders selectively by themselves.

View File

@ -49,7 +49,7 @@ recommended if Redis is running on the same system as Nextcloud) use this exampl
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/var/run/redis/redis.sock',
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),

View File

@ -20,3 +20,4 @@ File sharing and management
previews_configuration
file_versioning
trashbin_configuration
file_conversion

View File

@ -16,12 +16,13 @@ By default, Nextcloud can generate previews for the following filetypes:
* Cover of MP3 files
* Text documents
.. note:: Technically Nextcloud can also generate the previews
of other file types such as PDF, SVG or various office documents.
Due to security concerns those providers have been disabled by
default and are considered unsupported.
While those providers are still available, we discourage enabling
them, and they are not documented.
.. note:: Nextcloud can also generate previews of other file types (such as PDF, SVG,
various Office document formats, and various video formats). Due to security and
performance concerns those providers are disabled by default. While those providers
are still available, we discourage enabling them and they are considered unsupported.
The full list of the preview providers that are enabled by default (as well as those
disabled by default) can be found under the ``enabledPreviewProviders``
:doc:`configuration parameter </configuration_server/config_sample_php_parameters>`.
Parameters
----------
@ -32,6 +33,9 @@ values.
But deemed necessary, following changes have to be made in ``config/config.php`` file. As a best practice, take a backup of this config file before making a lot of changes.
After changing one or more of the following parameters, you might want to run the ``preview:cleanup`` occ command to get rid of the previews with obsolete settings.
See :ref:`occ_cleanup_previews` to learn more.
Disabling previews:
^^^^^^^^^^^^^^^^^^^
@ -106,3 +110,18 @@ Default JPEG quality setting for preview images is '80'. Change this with:
::
occ config:app:set preview jpeg_quality --value="60"
Maximum memory for image generation:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By default, Nextcloud generates image previews using the GD Graphics Library.
This configuration option limits the amount of memory that is allowed for preview generation.
If creating the preview image would allocate more memory than the limit,
preview generation will be disabled and the default mimetype icon is shown.
Default limit is 256 MB. Set to ``-1`` for no limit.
::
<?php
'preview_max_memory' => 256,

View File

@ -195,6 +195,8 @@ Optional parameters less commonly needing adjustment:
* :code:`timeout` defaults to :code:`15`
* :code:`uploadPartSize` defaults to :code:`524288000`
* :code:`putSizeLimit` defaults to :code:`104857600`
* :code:`useMultipartCopy` defaults to :code:`true`
* :code:`copySizeLimit` defaults to :code:`5242880000`
* :code:`legacy_auth` has no default
* :code:`version` defaults to :code:`latest`
* :code:`verify_bucket_exists` defaults to :code:`true` [Note: Setting this to :code:`false` *after* confirming the bucket has been created may provide a performance benefit, but may not be possible in multibucket scenarios.]

View File

@ -5,6 +5,12 @@ Deleted Items (trash bin)
If the trash bin app is enabled (default), this setting defines the policy
for when files and folders in the trash bin will be permanently deleted.
.. note::
If the user quota limit is exceeded due to deleted files in the trash bin,
retention settings will be ignored and files will be cleaned up until
the quota requirements are met.
The app allows for two settings, a minimum time for trash bin retention,
and a maximum time for trash bin retention.
Minimum time is the number of days a file will be kept, after which it
@ -15,7 +21,7 @@ file and folder deletion. For migration purposes, this setting is installed
initially set to "auto", which is equivalent to the default setting in
Nextcloud.
You may alter the default pattern in ``config.php``. The default setting is
You may alter the default pattern in ``config.php``. The default setting is
``auto``, which sets the default pattern::
'trashbin_retention_obligation' => 'auto',
@ -41,11 +47,11 @@ Available values:
Background job
--------------
To permanently delete files a background jobs runs every 30 minutes.
To permanently delete files a background jobs runs every 30 minutes.
It's possible to deactivate the background job and setup a (system) cron to expire the versions via occ.
Deactivate background job: ``occ config:app:set --value=no files_trashbin background_job_expire_trash``
Activate background job: ``occ config:app:delete files_trashbin background_job_expire_trash``
Expire versions: ``occ trashbin:expire`` or ``occ trashbin:expire --quiet`` (without the progress bar)
Expire versions: ``occ trashbin:expire`` or ``occ trashbin:expire --quiet`` (without the progress bar)

View File

@ -25,7 +25,7 @@ Ubuntu Linux::
# you may also need to update the mimetype for existing files, see nextcloud/server#30566
$ sudo -u www-data php occ maintenance:mimetype:update-db --repair-filecache
See :doc:`../configuration_server/occ_command` to learn more about ``occ``.
See :doc:`../occ_command` to learn more about ``occ``.
Some common mimetypes that may be useful in creating aliases are:

View File

@ -72,3 +72,19 @@ To implement the samples mentioned above, the following three entries are necess
If you want to manually send out all activity emails which are queued, you can run
``occ activity:send-mails`` without any argument.
Excluding users from the activity expiration
--------------------------------------------
For certain users, it might make sense to never expire their activity data, for example
administrators.
You can set the config value `activity_expire_exclude_users` in your Nextcloud config to
exclude these users from expiration::
'activity_expire_exclude_users' => [
'admin',
'group_admin',
'second_admin'
]
For these users, their activity records will never deleted from the database.

View File

@ -5,40 +5,43 @@ Administration privileges (Delegation)
Introduction
~~~~~~~~~~~~
Nextcloud has built-in functionality which permits administrators to delegate authority
to others without granting them full administration privileges (and without making
them a member of the ``admin`` group).
Nextcloud has built-in functionality which permits administrators to delegate authority
to others without granting them full administration privileges (and without making
them a member of the ``admin`` group).
This administration privilege delegation functionality is supported by many shipped and
This administration privilege delegation functionality is supported by many shipped and
ecosystem apps that have their own settings areas under *Administration settings*.
.. note:: If you're an app developer and would like administrators to be able to utilize this
functionality for your app, you need to enable support for delegation of your settings (see
functionality for your app, you need to enable support for delegation of your settings (see
the Developer Manual for specifics).
.. tip:: Delegation of user management isn't handled here, but through the use of
.. tip:: Delegation of user management is possible, but you can also use
:doc:`Group Administrators <../configuration_user/user_configuration>`.
.. warning:: Delegation of user management allow the delegated users to add themselves to groups
receiving delegation of other settings. This can be used to escalate privileges.
Usage
~~~~~
By default only members of the ``admin`` group can access *Administration settings*. You can
create additional user groups (or use existing ones) and then grant these groups access to specific
By default only members of the ``admin`` group can access *Administration settings*. You can
create additional user groups (or use existing ones) and then grant these groups access to specific
settings.
While logged in to an account that is a member of the ``admin`` group, go to
*Administration settings* -> *Administration privilege*. You will be presented with the list of
While logged in to an account that is a member of the ``admin`` group, go to
*Administration settings* -> *Administration privilege*. You will be presented with the list of
settings pages and sections, including for any installed apps, that support delegation.
.. figure:: images/admin-right.png
By clicking on the combo box, you will be able to choose which groups are able to access the
selected settings. You can revoke access at any time by removing the group from the selection
(or, if you wish only to revoke access for an individual account, by removing that account from
By clicking on the combo box, you will be able to choose which groups are able to access the
selected settings. You can revoke access at any time by removing the group from the selection
(or, if you wish only to revoke access for an individual account, by removing that account from
the configured group).
.. tip::
Not every settings page or section supports delegation. This is either because delegating
access to that particular settings page would enable privilege escalation (i.e. bypassing
of the limited administration authority) or delegation has not yet been implemented for
Not every settings page or section supports delegation. This is either because delegating
access to that particular settings page would enable privilege escalation (i.e. bypassing
of the limited administration authority) or delegation has not yet been implemented for
that specific settings page or app.

View File

@ -117,8 +117,6 @@ Which returns::
.. note:: On some systems it might be required to call **php-cli** instead of **php**.
.. note:: For some configurations, it might be necessary to append ``--define apc.enable_cli=1`` to the cron command. Please refer to :doc:`./caching_configuration` (section APCu).
.. note:: Please refer to the crontab man page for the exact command syntax.
.. _easyCron: https://www.easycron.com/

View File

@ -24,7 +24,7 @@ needs. The supported caching backends are:
* `APCu <https://pecl.php.net/package/APCu>`_, APCu 4.0.6 and up required.
A local cache for systems.
* `Redis <http://redis.io/>`_, PHP module 2.2.6 and up required.
* `Redis <http://redis.io/>`_, server 4.0.0 and up required.
For local and distributed caching, as well as transactional file locking.
* `Memcached <https://www.memcached.org/>`_
For distributed caching.
@ -116,10 +116,23 @@ After restarting your Web server, add this line to your ``config.php`` file::
Refresh your Nextcloud admin page, and the cache warning should disappear.
.. warning:: APCu is disabled by default on CLI which could cause issues with nextcloud's
cron jobs. Please make sure you set the ``apc.enable_cli`` to ``1`` on your ``php.ini``
config file or append ``--define apc.enable_cli=1`` to the cron job call.
Depending on your installation size and the number of users and interactions
with the system you may want to adapt the ``apc.shm_size`` setting in your
``php.ini``. The default value is 32M which is usually too low for Nextcloud. A
good starting point is 128M. If you have a lot of users and/or a lot of apps
installed you may want to increase this value further. Keep in mind that this
memory needs to be available in your system's memory and kept in mind when
sizing the amount of workers on your server.
A frequently resetting cache can lead to unexpected slow downs when the cache is
being cleared and refilled.
There is an admin check trying to detect too low memory sizing, but make sure to
monitor the APCu cache status to see if the cache is full and if you need to
increase the size. `APCu provides a script
<https://github.com/krakjoe/apcu/blob/master/apc.php>`_ that can help with this,
otherwise the `serverinfo app <https://github.com/nextcloud/serverinfo>`_ in
Nextcloud can also show the APCu cache status.
Redis
-----
@ -206,7 +219,7 @@ The following options are available to configure when using a redis cluster (all
'dbindex' => 0,
],
.. note:: The port is required as part of the server URL. However, it is not necesarry to list all servers: for example, if all servers are load balanced via the same DNS name, only that server name is required.
.. note:: The port is required as part of the server URL. However, it is not necessary to list all servers: for example, if all servers are load balanced via the same DNS name, only that server name is required.
Connecting to single Redis server over TCP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -2,27 +2,205 @@
Configuration Parameters
========================
Nextcloud uses the ``config/config.php`` file to control server operations.
``config/config.sample.php`` lists all the configurable parameters within
Nextcloud, along with example or default values. This document provides a more
detailed reference. Most options are configurable on your Admin page, so it
is usually not necessary to edit ``config/config.php``.
Introduction
------------
.. note:: The installer creates a configuration containing the essential parameters.
Only manually add configuration parameters to ``config/config.php`` if you need to
use a special value for a parameter. **Do not copy everything from**
``config/config.sample.php`` **. Only enter the parameters you wish to modify!**
Nextcloud uses ``config/config.php`` as its main configuration file. This file controls
various fundamental aspects of server operations. It is typically modified as part of initial
deployment, when troubleshooting, and when making adjustments to surrounding infrastructure.
Multiple config.php file
------------------------
This is a required file for all Nextcloud deployments and thus it is critical for Nextcloud
administrators to be familiar with managing it.
This section of the *Administration Manual* documents how to adjust this essential file,
certain special characteristics of the ``config/`` directory, and all of the supported
parameters that can be specified in a ``config/config.php`` file.
.. note:: While ``config/config.php`` is a required file, many Nextcloud or Nextcloud app
settings are managed elsewhere and thus not included in it. These settings are typically
managed via individual apps.
Loading
-------
Configuration files located in ``config/`` are parsed automatically when Nextcloud
starts up. They are also checked for changes periodically (approximately every two seconds
in a standard PHP environment running with default *OPcache* settings; approximately every
sixty seconds in many pre-packaged Nextcloud installation methods).
The ``config/config.php`` file may be supplemented by additional ``*.config.php`` files
placed in the ``config/`` directory (if appropriately named and formatted).
.. danger:: Be cautious when naming or creating backup copies of your active
``config/config.php``. If a backup is located within ``config/`` and is named
``(ANYTHING).config.php``, it will be loaded as part of your live configuration
and override your ``config/config.php`` values!
.. tip:: If your configuration changes don't seem to be taking effect, check: (a) your PHP opcache
configuration; (b) for additional ``*.config.php`` files located in ``config/``; (c) the documentation
for your Nextcloud installation method/package; (d) the output of ``occ config:list system``.
Format
------
The short answer is that ``config/`` files are plain text files with some special formatting
requirements for different types of parameters and values. This makes it extensible and easy for
Nextcloud to interact with. It also makes it easy for administartors to view with any text viewer
and from the command-line.
Technically these configuration files are PHP files containing a special (to Nextcloud) PHP array
called ``$CONFIG``. This array consists of various Nextcloud specific "key-value" pairs (in some cases
arrays themselves). Each pair has the form ``key => value`` and is comma-separated.
Types of Values
^^^^^^^^^^^^^^^
Strings:
* ``"thisIsAnImportantValue"``
* Note: These must be either single or double quoted - i.e. ``"string"`` or ``'string'``.
* Note: IP addresses are considered strings.
* Examples:
- ``'logo_url' => 'https://example.org',``
- ``'versions_retention_obligation' => 'auto, D',``
- ``'logtimezone' => 'Europe/Berlin',``
Boolean:
* ``true`` or ``false``
* Note: These should **not** be surrounded by quote marks within the configuration file itself.
* Examples:
- ``'session_keepalive' => true,``
- ``'hide_login_form' => false,``
Numerical:
* ``12``
* This includes both integers and floating point numbers.
* Note: These should **not** be surrounded by quote marks within the configuration file itself.
* Examples:
- ``'loglevel' => 2,``
- ``'session_lifetime' => 60 * 60 * 24,``
Arrays of any of the above types:
* ``[ 'value1', 'value2' ]``
* All value types (including other arrays) can be included in arrays.
* Note: Only some parameters support array style values.
* Examples:
- ``'connectivity_check_domains' => [ 'www.nextcloud.com', 'www.eff.org', ],``
- ``'enabledPreviewProviders' => [ 'OC\Preview\BMP', 'OC\Preview\GIF', 'OC\Preview\JPEG', ],``
.. tip:: Nextcloud attempts to remedy some value type/formatting mistakes, but this is not foolproof.
Use the correct formatting (for the type of value in question) to avoid unexpected results arising
from values being cast in unexpected ways.
Modifying
---------
Parameters may be modified in a standard text editor (i.e. via the command-line or externally
then re-uploaded). They may also, in most cases, be modified using the commands in
the ``occ config:system:*`` namespace.
.. tip:: Incorrectly formatted ``key => value`` entries (or incorrectly specified values) may
not generate immediate errors or problems (such as parsing / syntax errors), but may still
lead to unexpected and undesirable results. Review your fully parsed (by PHP) configuration
by using the command ``occ config:list system`` and/or ``occ config:list system --private``
to identify anything unexpected.
Defaults
--------
Nextcloud creates a base ``config/config.php`` file at installation time containing the most
essential parameters for operations. These values are a mixture of auto-generated and drawn from
information provided by the administrator at installation time.
The file ``config/config.sample.php`` lists all the parameters within Nextcloud that can be
specified in ``config/`` files, along with example and default values for each. The content of
that sample configuration file is included :ref:`below<config-php-sample>` for ease of reference
and alongside additional context.
.. tip:: Only add parameters to ``config/config.php`` that you wish to modify.
.. danger:: Do not copy everything from ``config/config.sample.php`` into your own
``config/config.php``! Besides being unnecessary, it will break things and possibly even
require re-installation.
Multiple/Merged Configuration Files
-----------------------------------
Nextcloud supports loading configuration parameters from multiple files. You can add arbitrary
files ending with ``.config.php*`` (i.e. ``*.config.php``) in the ``config/`` directory. The values
in these files take precedence over ``config/config.php``. This allows you to easily create and
manage custom configurations, or to divide a large complex configuration file into a set of smaller files.
These custom files are not overwritten by Nextcloud.
For example, you could place your email server configuration in ``config/email.config.php`` and
whatever parameters you specify in it will be merged with your ``config/config.php``.
.. note:: The values in these additional configuration files **always** take precedence over
``config/config.php``.
.. tip:: To view your fully merged configuration (i.e. incorporating all config files), use
``occ config:list system`` and/or ``occ config:list system --private``.
.. danger:: Be cautious when naming or creating backup copies of your active
``config/config.php``. If a backup config file is located within ``config/`` and happens to be
named ``(ANYTHING).config.php``, it will be loaded as part of your live configuration and override
your ``config/config.php`` values!
Examples
--------
These are some examples of the content of typical ``config/config.php`` files immediately after
a basic installation of Nextcloud.
When you use SQLite as your Nextcloud database, your ``config.php`` looks like
this after installation. The SQLite database is stored in your Nextcloud
``data/`` directory::
<?php
$CONFIG = array (
'instanceid' => 'occ6f7365735',
'passwordsalt' => '2c5778476346786306303',
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'studio',
),
'datadirectory' => '/var/www/nextcloud/data',
'dbtype' => 'sqlite3',
'version' => '7.0.2.1',
'installed' => true,
);
.. note:: SQLite is a simple, lightweight embedded database that is fine for testing
and simple installations, but production environments you should use MySQL/MariaDB,
Oracle, or PosgreSQL.
This example is from a new Nextcloud installation using MariaDB::
<?php
$CONFIG = array (
'instanceid' => 'oc8c0fd71e03',
'passwordsalt' => '515a13302a6b3950a9d0fdb970191a',
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'studio',
2 => '192.168.10.155'
),
'datadirectory' => '/var/www/nextcloud/data',
'dbtype' => 'mysql',
'version' => '7.0.2.1',
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'oc_carla',
'dbpassword' => '67336bcdf7630dd80b2b81a413d07',
'installed' => true,
);
Nextcloud supports loading configuration parameters from multiple files.
You can add arbitrary files ending with :file:`.config.php` in the :file:`config/`
directory, for example you could place your email server configuration
in :file:`email.config.php`. This allows you to easily create and manage
custom configurations, or to divide a large complex configuration file
into a set of smaller files. These custom files are not overwritten by
Nextcloud, and the values in these files take precedence over :file:`config.php`.
.. The following section is auto-generated from
.. https://github.com/nextcloud/server/blob/master/config/config.sample.php
@ -261,54 +439,7 @@ Defaults to ``false``
.. DEFAULT_SECTION_END
.. Generated content above. Don't change this.
Default config.php Examples
---------------------------
When you use SQLite as your Nextcloud database, your ``config.php`` looks like
this after installation. The SQLite database is stored in your Nextcloud
``data/`` directory. SQLite is a simple, lightweight embedded database that
is good for testing and for simple installations, but for production Nextcloud
systems you should use MySQL, MariaDB, or PosgreSQL.
::
<?php
$CONFIG = array (
'instanceid' => 'occ6f7365735',
'passwordsalt' => '2c5778476346786306303',
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'studio',
),
'datadirectory' => '/var/www/nextcloud/data',
'dbtype' => 'sqlite3',
'version' => '7.0.2.1',
'installed' => true,
);
This example is from a new Nextcloud installation using MariaDB::
<?php
$CONFIG = array (
'instanceid' => 'oc8c0fd71e03',
'passwordsalt' => '515a13302a6b3950a9d0fdb970191a',
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'studio',
2 => '192.168.10.155'
),
'datadirectory' => '/var/www/nextcloud/data',
'dbtype' => 'mysql',
'version' => '7.0.2.1',
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'oc_carla',
'dbpassword' => '67336bcdf7630dd80b2b81a413d07',
'installed' => true,
);
.. _config-php-sample:
.. Generated content below. Don't change this.
.. ALL_OTHER_SECTIONS_START
@ -375,6 +506,20 @@ login or shared items. User's locale preferences configured under "personal
Defaults to ``en``
reduce_to_languages
^^^^^^^^^^^^^^^^^^^
::
'reduce_to_languages' => [],
With this setting is possible to reduce the languages available in the
language chooser. The languages have to be set as array values using ISO_639-1
language codes such as ``en`` for English, ``de`` for German etc.
For example: Set to ['de', 'fr'] to only allow German and French languages.
default_phone_region
^^^^^^^^^^^^^^^^^^^^
@ -464,8 +609,9 @@ skeletondirectory
'skeletondirectory' => '/path/to/nextcloud/core/skeleton',
The directory where the skeleton files are located. These files will be
copied to the data directory of new users. Leave empty to not copy any
skeleton files.
copied to the data directory of new users. Set empty string to not copy any
skeleton files. If unset and templatedirectory is empty string, shipped
templates will be used to create a template directory for the user.
``{lang}`` can be used as a placeholder for the language of the user.
If the directory does not exist, it falls back to non dialect (from ``de_DE``
@ -482,16 +628,15 @@ templatedirectory
'templatedirectory' => '/path/to/nextcloud/templates',
The directory where the template files are located. These files will be
copied to the template directory of new users. Leave empty to not copy any
copied to the template directory of new users. Set empty string to not copy any
template files.
``{lang}`` can be used as a placeholder for the language of the user.
If the directory does not exist, it falls back to non dialect (from ``de_DE``
to ``de``). If that does not exist either, it falls back to ``default``
If this is not set creating a template directory will only happen if no custom
``skeletondirectory`` is defined, otherwise the shipped templates will be used
to create a template directory for the user.
To disable creating a template directory, set both skeletondirectory and
templatedirectory to empty strings.
User session
------------
@ -535,6 +680,18 @@ davstorage.request_timeout
The timeout in seconds for requests to servers made by the DAV component (e.g., needed for federated shares).
carddav_sync_request_timeout
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'carddav_sync_request_timeout' => 30,
The timeout in seconds for synchronizing address books, e.g. federated system address books (as run by `occ federation:sync-addressbooks`).
Defaults to ``30`` seconds
session_relaxed_expiry
^^^^^^^^^^^^^^^^^^^^^^
@ -574,8 +731,10 @@ auto_logout
'auto_logout' => false,
Enable or disable the automatic logout after session_lifetime, even if session
keepalive is enabled. This will make sure that an inactive browser will be logged out
even if requests to the server might extend the session lifetime.
keepalive is enabled. This will make sure that an inactive browser will log itself out
even if requests to the server might extend the session lifetime. Note: the logout is
handled on the client side. This is not a way to limit the duration of potentially
compromised sessions.
Defaults to ``false``
@ -625,6 +784,22 @@ Disabling this is discouraged for security reasons.
Defaults to ``true``
auth.bruteforce.protection.force.database
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'auth.bruteforce.protection.force.database' => false,
Whether the brute force protection should write into the database even when a memory cache is available
Using the database is most likely worse for performance, but makes investigating
issues a lot easier as it's possible to look directly at the table to see all
logged remote addresses and actions.
Defaults to ``false``
auth.bruteforce.protection.testing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -643,6 +818,22 @@ and should only be done for debugging and on CI when running tests.
Defaults to ``false``
auth.bruteforce.max-attempts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'auth.bruteforce.max-attempts' => 10,
Brute force protection: maximum number of attempts before blocking
When more than max-attempts login requests are sent to Nextcloud, requests
will abort with "429 Too Many Requests".
For security reasons, change it only if you know what you are doing.
Defaults to ``10``
ratelimit.protection.enabled
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -774,6 +965,9 @@ mail_smtpdebug
Enable SMTP class debugging.
NOTE: ``loglevel`` will likely need to be adjusted too. See docs:
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/email_configuration.html#enabling-debug-mode
Defaults to ``false``
mail_smtpmode
@ -784,7 +978,7 @@ mail_smtpmode
'mail_smtpmode' => 'smtp',
Which mode to use for sending mail: ``sendmail``, ``smtp`` or ``qmail``.
Which mode to use for sending mail: ``sendmail``, ``smtp``, ``qmail`` or ``null``.
If you are using local or remote SMTP, set this to ``smtp``.
@ -794,6 +988,9 @@ the server, with ``/usr/sbin/sendmail`` installed on your Unix system.
For ``qmail`` the binary is /var/qmail/bin/sendmail, and it must be installed
on your Unix system.
Use the string ``null`` to send no mails (disable mail delivery). This can be
useful if mails should be sent via APIs and rendering messages is not necessary.
Defaults to ``smtp``
mail_smtphost
@ -1020,6 +1217,9 @@ Use this configuration parameter to specify the base URL for any URLs which
are generated within Nextcloud using any kind of command line tools (cron or
occ). The value should contain the full base URL:
``https://www.example.com/nextcloud``
Please make sure to set the value to the URL that your users mainly use to access this Nextcloud.
Otherwise there might be problems with the URL generation via cron.
Defaults to ``''`` (empty string)
@ -1149,6 +1349,10 @@ trashbin_retention_obligation
If the trash bin app is enabled (default), this setting defines the policy
for when files and folders in the trash bin will be permanently deleted.
If the user quota limit is exceeded due to deleted files in the trash bin,
retention settings will be ignored and files will be cleaned up until
the quota requirements are met.
The app allows for two settings, a minimum time for trash bin retention,
and a maximum time for trash bin retention.
@ -1322,10 +1526,10 @@ connectivity_check_domains
::
'connectivity_check_domains' => [
'www.nextcloud.com',
'www.startpage.com',
'www.eff.org',
'www.edri.org'
'https://www.nextcloud.com',
'https://www.startpage.com',
'https://www.eff.org',
'https://www.edri.org'
],
Which domains to request to determine the availability of an Internet
@ -1340,10 +1544,10 @@ If a protocol is provided, only this one will be tested.
Defaults to the following domains:
- www.nextcloud.com
- www.startpage.com
- www.eff.org
- www.edri.org
- https://www.nextcloud.com
- https://www.startpage.com
- https://www.eff.org
- https://www.edri.org
check_for_working_wellknown_setup
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1568,6 +1772,15 @@ log.condition
'shared_secret' => '57b58edb6637fe3059b3595cf9c41b9',
'users' => ['sample-user'],
'apps' => ['files'],
'matches' => [
[
'shared_secret' => '57b58edb6637fe3059b3595cf9c41b9',
'users' => ['sample-user'],
'apps' => ['files'],
'loglevel' => 1,
'message' => 'contains substring'
],
],
],
Log condition for log level increase based on conditions. Once one of these
@ -1581,6 +1794,9 @@ Supported conditions:
this condition is met
- ``apps``: if the log message is invoked by one of the specified apps,
this condition is met
- ``matches``: if all the conditions inside a group match,
this condition is met. This allows to log only entries to an app
by a few users.
Defaults to an empty array.
@ -1686,6 +1902,8 @@ customclient_desktop
'https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8',
'customclient_ios_appid' =>
'1125420102',
'customclient_fdroid' =>
'https://f-droid.org/packages/com.nextcloud.client/',
This section is for configuring the download links for Nextcloud clients, as
seen in the first-run wizard and on Personal pages.
@ -1696,6 +1914,7 @@ Defaults to:
- Android client: ``https://play.google.com/store/apps/details?id=com.nextcloud.client``
- iOS client: ``https://itunes.apple.com/us/app/nextcloud/id1125420102?mt=8``
- iOS client app id: ``1125420102``
- F-Droid client: ``https://f-droid.org/packages/com.nextcloud.client/``
Apps
----
@ -1711,9 +1930,10 @@ defaultapp
'defaultapp' => 'dashboard,files',
Set the default app to open on login. Use the app names as they appear in the
URL after clicking them in the Apps menu, such as documents, calendar, and
gallery. You can use a comma-separated list of app names, so if the first
Set the default app to open on login. The entry IDs can be retrieved from
the Navigations OCS API endpoint: https://docs.nextcloud.com/server/latest/develper_manual/_static/openapi.html#/operations/core-navigation-get-apps-navigation.
You can use a comma-separated list of app names, so if the first
app is not enabled for a user then Nextcloud will try the second one, and so
on. If no enabled apps are found it defaults to the dashboard app.
@ -1920,7 +2140,8 @@ preview_ffmpeg_path
custom path for ffmpeg binary
Defaults to ``null`` and falls back to searching ``avconv`` and ``ffmpeg`` in the configured ``PATH`` environment
Defaults to ``null`` and falls back to searching ``avconv`` and ``ffmpeg``
in the configured ``PATH`` environment
preview_imaginary_url
^^^^^^^^^^^^^^^^^^^^^
@ -1932,7 +2153,12 @@ preview_imaginary_url
Set the URL of the Imaginary service to send image previews to.
Also requires the ``OC\Preview\Imaginary`` provider to be enabled.
Also requires the ``OC\Preview\Imaginary`` provider to be enabled in the
``enabledPreviewProviders`` array, to create previews for these mimetypes: bmp,
x-bitmap, png, jpeg, gif, heic, heif, svg+xml, tiff, webp and illustrator.
If you want Imaginary to also create preview images from PDF Documents, you
have to add the ``OC\Preview\ImaginaryPDF`` provider as well.
See https://github.com/h2non/imaginary
@ -1999,6 +2225,35 @@ Defaults to the following providers:
- ``OC\Preview\TXT``
- ``OC\Preview\XBitmap``
metadata_max_filesize
^^^^^^^^^^^^^^^^^^^^^
::
'metadata_max_filesize' => 256,
Maximum file size for metadata generation.
If a file exceeds this size, metadata generation will be skipped.
Note: memory equivalent to this size will be used for metadata generation.
Default: 256 megabytes.
max_file_conversion_filesize
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'max_file_conversion_filesize' => 100,
Maximum file size for file conversion.
If a file exceeds this size, the file will not be converted.
Default: 100 MiB
LDAP
----
@ -2606,6 +2861,20 @@ when running "occ files:transfer-ownership".
Defaults to false, so incoming shares are not transferred if not specifically requested
by a command line argument.
Federated Cloud Sharing
-----------------------
sharing.federation.allowSelfSignedCertificates
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'sharing.federation.allowSelfSignedCertificates' => false,
Allow self-signed certificates for federated shares
Hashing
-------
@ -2837,39 +3106,80 @@ restricted. Defaults to the value of `datadirectory` if unset.
If set, the value MUST be located _outside_ of the installation directory of Nextcloud and
writable by the Web server user.
blacklisted_files
^^^^^^^^^^^^^^^^^
forbidden_filenames
^^^^^^^^^^^^^^^^^^^
::
'blacklisted_files' => ['.htaccess'],
'forbidden_filenames' => ['.htaccess'],
Blacklist a specific file or files and disallow the upload of files
with this name. ``.htaccess`` is blocked by default.
Block a specific file or files and disallow the upload of files with this name.
This blocks any access to those files (read and write).
``.htaccess`` is blocked by default.
WARNING: USE THIS ONLY IF YOU KNOW WHAT YOU ARE DOING.
Note that this list is case-insensitive.
Defaults to ``array('.htaccess')``
forbidden_chars
^^^^^^^^^^^^^^^
forbidden_filename_basenames
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'forbidden_chars' => [],
'forbidden_filename_basenames' => [],
Blacklist characters from being used in filenames. This is useful if you
Disallow the upload of files with specific basenames.
Matching existing files can no longer be updated and in matching folders no files can be created anymore.
The basename is the name of the file without the extension,
e.g. for "archive.tar.gz" the basename would be "archive".
Note that this list is case-insensitive.
Defaults to ``array()``
forbidden_filename_characters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'forbidden_filename_characters' => [],
Block characters from being used in filenames. This is useful if you
have a filesystem or OS which does not support certain characters like windows.
The '/' and '\' characters are always forbidden.
Matching existing files can no longer be updated and in matching folders no files can be created anymore.
Example for windows systems: ``array('?', '<', '>', ':', '*', '|', '"', chr(0), "\n", "\r")``
The '/' and '\' characters are always forbidden, as well as all characters in the ASCII range [0-31].
Example for windows systems: ``array('?', '<', '>', ':', '*', '|', '"')``
see https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits
Defaults to ``array()``
forbidden_filename_extensions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'forbidden_filename_extensions' => ['.part', '.filepart'],
Deny extensions from being used for filenames.
Matching existing files can no longer be updated and in matching folders no files can be created anymore.
The '.part' extension is always forbidden, as this is used internally by Nextcloud.
Defaults to ``array('.filepart', '.part')``
theme
^^^^^
@ -2897,6 +3207,18 @@ This must be a valid ITheme ID.
E.g. dark, dark-highcontrast, default, light, light-highcontrast, opendyslexic
theming.standalone_window.enabled
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'theming.standalone_window.enabled' => true,
This setting allows to disable the PWA functionality that allows browsers to open web applications in dedicated windows.
Defaults to ``true``
cipher
^^^^^^
@ -2933,7 +3255,7 @@ minimum.supported.desktop.version
::
'minimum.supported.desktop.version' => '2.3.0',
'minimum.supported.desktop.version' => '2.7.0',
The minimum Nextcloud desktop client version that will be allowed to sync with
this server instance. All connections made from earlier clients will be denied
@ -2944,7 +3266,21 @@ When changing this, note that older unsupported versions of the Nextcloud deskto
client may not function as expected, and could lead to permanent data loss for
clients or other unexpected results.
Defaults to ``2.3.0``
Defaults to ``2.7.0``
maximum.supported.desktop.version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'maximum.supported.desktop.version' => '99.99.99',
The maximum Nextcloud desktop client version that will be allowed to sync with
this server instance. All connections made from later clients will be denied
by the server.
Defaults to ``99.99.99``
localstorage.allowsymlinks
^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -3144,6 +3480,21 @@ Nextcloud, bypassing access controls and making logs useless!
Defaults to ``'HTTP_X_FORWARDED_FOR'``
allowed_admin_ranges
^^^^^^^^^^^^^^^^^^^^
::
'allowed_admin_ranges' => ['192.0.2.42/32', '233.252.0.0/24', '2001:db8::13:37/64'],
List of trusted IP ranges for admin actions
If this list is non-empty, all admin actions must be triggered from
IP addresses inside theses ranges.
Defaults to an empty array.
max_filesize_animated_gifs_public_sharing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -3161,26 +3512,6 @@ no limit.
Defaults to ``10`` megabytes
filelocking.enabled
^^^^^^^^^^^^^^^^^^^
::
'filelocking.enabled' => true,
Enables transactional file locking.
This is enabled by default.
Prevents concurrent processes from accessing the same files
at the same time. Can help prevent side effects that would
be caused by concurrent operations. Mainly relevant for
very large installations with many users working with
shared files.
Defaults to ``true``
filelocking.ttl
^^^^^^^^^^^^^^^
@ -3574,10 +3905,76 @@ enable_non-accessible_features
'enable_non-accessible_features' => true,
Enable features that are do respect accessibility standards yet.
Enable features that don't respect accessibility standards yet.
Defaults to ``true``
binary_search_paths
^^^^^^^^^^^^^^^^^^^
::
'binary_search_paths' => [
'/usr/local/sbin',
'/usr/local/bin',
'/usr/sbin',
'/usr/bin',
'/sbin',
'/bin',
'/opt/bin',
],
Directories where nextcloud looks for binaries.
This is used to find external binaries like libreoffice, sendmail, ffmpeg and more.
Defaults to ``['/usr/local/sbin','/usr/local/bin','/usr/sbin','/usr/bin','/sbin','/bin','/opt/bin']``
files.chunked_upload.max_size
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'files.chunked_upload.max_size' => 100 * 1024 * 1024,
The maximum chunk size to use for chunked uploads.
A bigger chunk size results in higher throughput, but above 100 MiB there are only diminishing returns,
while services like Cloudflare already limit to 100 MiB.
Defaults to 100 MiB.
files.chunked_upload.max_parallel_count
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
'files.chunked_upload.max_parallel_count' => 5,
The maximum number of chunks uploaded in parallel during chunked uploads.
A bigger count results in higher throughput, but will also consume more server workers,
while the improvements diminish.
Defaults to 5.
files.trash.delete
^^^^^^^^^^^^^^^^^^
::
'files.trash.delete' => true,
Allow users to manually delete files from their trashbin.
Automated deletions are not affected and will continue to work in cases like low remaining quota for example.
Defaults to true.
.. ALL_OTHER_SECTIONS_END
.. Generated content above. Don't change this.

View File

@ -28,3 +28,9 @@ The default layout of the dashboard for all users can be set with the following
occ config:app:set dashboard layout --value="files,activity,calendar"
Changing the default layout will not affect existing users that already have a custom layout stored.
It is possible to replace the default app, which is the dashboard app, with a custom app with the following command:
occ config:app:set core defaultpage --value "/apps/files/extstoragemounts"

View File

@ -33,6 +33,17 @@ Sendmail when your mail server is on the same machine as Nextcloud.
.. _email-smtp-config:
Mail Providers
--------------
.. versionadded:: 30
A mail provider is an app that provides outbound mail service to Nextcloud and allows the sending of system emails
directly through a user's configured personal email account instead of the system email account.
At present, this functionality is limited to calendar invitations.
This feature automatically matches a users email address to a configured mail provider account, when a system message is sent.
The only app that supports this functionality at present is Nextcloud Mail 4.1 or higher, a configured email account is required.
Configuring an SMTP server
--------------------------
@ -43,6 +54,7 @@ connect Nextcloud to a remote SMTP server:
* STARTTLS cannot be enforced. It will be used automatically if the mail server supports it. The encryption type should be set to 'None/STARTTLS' in this case. See :ref:`here<TLSPeerVerification>` for an example on how to configure self signed certificates.
* NTLM authentication for Microsoft Exchange is not supported by the new mailer library. Try using `basic authentication <https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/authentication-and-ews-in-exchange#basic-authentication>`_ instead.
* Outlook and Microsoft Exchange have discontinued support for Basic authentication. It is no longer possible to use their services as your default email handler.
* Encryption type: None/STARTTLS or SSL

View File

@ -7,6 +7,5 @@ Nextcloud configuration
:glob:
security_setup_warnings
occ_command
config_sample_php_parameters
*

View File

@ -95,10 +95,10 @@ Traefik 2
Using Docker labels:
::
traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex'
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: true
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex: 'https://(.*)/.well-known/(?:card|cal)dav'
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement: 'https://$${1}/remote.php/dav'
- "traefik.http.routers.nextcloud.middlewares=nextcloud_redirectregex@docker"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex=https://(.*)/.well-known/(?:card|cal)dav"
- "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement=https://$${1}/remote.php/dav"
Using a TOML file:
::
@ -118,6 +118,7 @@ HAProxy
NGINX
^^^^^
If using nginx as Nextcloud's webserver from behind another nginx reverse proxy, put this only in the reverse proxy's configuration.
::
location /.well-known/carddav {
@ -127,13 +128,13 @@ NGINX
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location ^~ /.well-known {
return 301 $scheme://$host/index.php$uri;
}
or
::
rewrite ^/\.well-known/carddav https://$server_name/remote.php/dav/ redirect;
rewrite ^/\.well-known/caldav https://$server_name/remote.php/dav/ redirect;
When using NGINX Proxy Manager, the entry ``proxy_hide_header Upgrade;`` must be added in the *"Advanced Settings"*
of the proxy host under *"Custom Nginx Configuration"*, otherwise mobile devices (iPad, iPhone etc.) will simply receive the Error Message "Connection Closed".
Caddy
^^^^^

View File

@ -77,6 +77,9 @@ For enhanced security we recommend enabling HSTS as described in our security ti
The HSTS header needs to be configured within your Web server by following the
:ref:`enable-hsts-label` documentation
You can see if the header is appearing in requests by using your browser inspector
or using a tool such as cURL: ``curl --head https://cloud.domain.tld``.
/dev/urandom is not readable by PHP
-----------------------------------
@ -123,10 +126,10 @@ Some files have not passed the integrity check
Please refer to the :ref:`code_signing_fix_warning_label` documentation how to debug this issue.
Your database does not run with "READ COMMITED" transaction isolation level
---------------------------------------------------------------------------
Your database does not run with "READ COMMITTED" transaction isolation level
----------------------------------------------------------------------------
"Your database does not run with "READ COMMITED" transaction isolation level.
"Your database does not run with "READ COMMITTED" transaction isolation level.
This can cause problems when multiple actions are executed in parallel."
Please refer to :ref:`db-transaction-label` how to configure your database for this requirement.

View File

@ -32,11 +32,11 @@ Rich text editing can be turned off globally to always open markdown files in th
occ config:app:set text rich_editing_enabled --value=0
File encodings
--------------
File encodings
--------------
Text can automatically detect encodings of files and will convert them to UTF-8 when saving. Due to the variety of encodings, not all of them can be detected, however you can configure a list of encodings and in which priority they should be detected using the php ``mbstring.detect_order`` setting in your php.ini:
Text can automatically detect encodings of files and will convert them to UTF-8 when saving. Due to the variety of encodings, not all of them can be detected, however you can configure a list of encodings and in which priority they should be detected using the php ``mbstring.detect_order`` setting in your php.ini:
::
mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP
mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP

View File

@ -0,0 +1,28 @@
.. _authentication:
==============
Authentication
==============
App passwords
^^^^^^^^^^^^^
App passwords allow users to authenticate multiple client applications against their Nextcloud account without giving the application the login password. App passwords are mandatory for accounts with :ref:`two-factor authentication<two-factor-auth>` enabled.
Some clients support *remote wipe*, which makes the connected application delete its local data.
.. _authentication-app-password-clean-up:
Automated clean-up
******************
.. versionadded:: 30
Nextcloud will delete unused passwords. Passwords set for *remote wipe* are deleted after 60 days of no usage. App passwords of client applications are deleted after 365 days of no usage.
The time spans can be overwritten with configuration::
php occ config:system:set token_auth_wipe_token_retention --type=int --value 2592000 # 60*60*24*30 - 30 days
php occ config:system:set token_auth_token_retention --type=int --value 63072000 # 60*60*24*365*2 - 2 years
Values are set in **seconds**.

View File

@ -9,9 +9,11 @@ User management
reset_admin_password
reset_user_password
user_password_policy
authentication
two_factor-auth
user_auth_ldap
user_auth_ldap_cleanup
user_auth_ldap_api
user_provisioning_api
profile_configuration
user_auth_oidc

View File

@ -90,7 +90,7 @@ XML output
<id>files</id>
<name>Files</name>
<description>File Management</description>
<licence>AGPL</licence>
<licence>AGPL-3.0-or-later</licence>
<author>Robin Appelman</author>
<require>4.9</require>
<shipped>true</shipped>

View File

@ -22,16 +22,17 @@ basic HTTP authentication header.
Status codes:
* 100 - successful
* 101 - invalid input data
* 102 - username already exists
* 103 - unknown error occurred whilst adding the user
* 101 - invalid argument
* 102 - user already exists
* 103 - cannot create sub-admins for admin group
* 104 - group does not exist
* 105 - insufficient privileges for group
* 106 - no group specified (required for subadmins)
* 107 - all errors that contain a hint - for example "Password is among the 1,000,000 most common ones. Please make it unique." (this code was added in 12.0.6 & 13.0.1)
* 108 - password and email empty. Must set password or an email
* 109 - invitation email cannot be send
* 106 - no group specified (required for sub-admins)
* 107 - hint exceptions
* 108 - an email address is required, to send a password link to the user.
* 109 - sub-admin group does not exist
* 110 - required email address was not provided
* 111 - could not create non-existing user ID
Example
^^^^^^^
@ -180,9 +181,10 @@ is done by sending a Basic HTTP Authorization header.
Status codes:
* 100 - successful
* 101 - user not found
* 102 - invalid input data
* 101 - invalid argument
* 107 - password policy (hint exception)
* 112 - Setting the password is not supported by the users backend
* 113 - editing field not allowed / field doesnt exist
Examples
^^^^^^^^

View File

@ -13,21 +13,26 @@ disable profile globally to remove all profile functionality.
Profile properties are also written into the :ref:`system address book<system-address-book>`.
.. note:: If not disabled, the profile is publicly visible.
The visibility of the individual profile attributes can be either controlled
by the assigned visibility scopes (e.g. "Private" will disable public access),
or by the user defined profile visibility.
Configuration
-------------
To enable or disable profile by default for new users switch the toggle in
Basic settings under the Administration settings section.
.. figure:: ../images/profile_default_setting.png
.. note:: If you are upgrading from Nextcloud 22 to 23 and want profile to
be disabled by default for all users, you may run the ``occ`` command below
before upgrading or upgrade first then switch the toggle in Basic settings
before letting any users log in.
You may also run the ``occ`` command below instead to change the default to ``false``:
::
occ config:app:set settings profile_enabled_by_default --value="0"
Please refer to :doc:`../configuration_server/occ_command` for all available
Please refer to :doc:`../occ_command` for all available
``occ`` commands.
To disable profile globally add the following line to your ``config.php``

View File

@ -12,7 +12,7 @@ The normal ways to recover a lost password are:
2. Ask another Nextcloud server admin to reset it for you.
If neither of these is an option, then you have a third option, and that is
using the ``occ`` command. See :doc:`../configuration_server/occ_command` to
using the ``occ`` command. See :doc:`../occ_command` to
learn more about using the ``occ`` command.
::

View File

@ -709,7 +709,7 @@ Example usage::
It is also possible to set the admin group mapping using
``occ ldap:set-config $configId ldapAdminGroup $groupId``, but as the Nextcloud
group ID might not be known (yet) it is recommended (especially for automatized
group ID might not be known (yet) it is recommended (especially for automated
setups) to use the `promote-group` command, that would also pull in the group
and determine the group ID.
@ -777,6 +777,13 @@ The "s01" refers to the configuration ID as can be retrieved per
Troubleshooting, tips and tricks
--------------------------------
Logging
^^^^^^^
Nextcloud's LDAP implementation is capable of logging lots of additional details about
its activities. When diagnosing problems, it can be useful to temporarily adjust your
``loglevel`` to INFO (``1``) or DEBUG (``0``).
SSL certificate verification (LDAPS, TLS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -42,7 +42,7 @@ There are two ``occ`` commands to use for examining a table of users marked as
deleted, and then manually deleting them. The ``occ`` command is in your
Nextcloud directory, for example ``/var/www/nextcloud/occ``, and it must be run as
your HTTP user. To learn more about ``occ``, see
:doc:`../configuration_server/occ_command`.
:doc:`../occ_command`.
These examples are for Ubuntu Linux:

View File

@ -0,0 +1,40 @@
=======================================
User authentication with OpenID Connect
=======================================
Nextcloud users can authenticate via an external identity provider.
Nextcloud can also be an identity provider itself.
Authentication in Nextcloud
---------------------------
The `OpenID Connect user backend app <https://apps.nextcloud.com/apps/user_oidc>`_ makes it possible for users to
authenticate using external Oidc identity providers.
This app can optionally be in charge of user provisioning (by creating users when they first connect) or rely on
other user backends and only take care of authentication.
`More details in the project's README <https://github.com/nextcloud/user_oidc#user_oidc>`_
Using Nextcloud as an identity provider
---------------------------------------
The `OIDC Identity Provider community app <https://apps.nextcloud.com/apps/oidc>`_
can be installed to make Nextcloud an identity provider for other services.
This app will allow any Nextcloud user (managed by any user backend) to authenticate during an Oidc login flow.
This is useful if you want your Nextcloud instance to be the authority regarding authentication and user profile data
among multiple services.
Bearer token validation
-----------------------
Nextcloud can accept Oidc ID tokens and access tokens as valid bearer token for API requests.
If using an external identity provider, only the ``user_oidc`` app is necessary.
If Nextcloud is the identity provider, you will naturally need the ``oidc`` app to make Nextcloud an Oidc provider,
and also the ``user_oidc`` app because it will take care of validating API requests authentication.
In user_oidc, the ``oidc_provider_bearer_validation`` config flag needs to be set to true so ``user_oidc`` knows
it needs to ask the ``oidc`` app to validate the received bearer tokens.
`More details on bearer token validation <https://github.com/nextcloud/user_oidc#bearer-token-validation>`_

View File

@ -18,18 +18,19 @@ On the User management page of your Nextcloud Web UI you can:
The default view displays basic information about your users.
.. figure:: ../images/users-config.png
.. figure:: ../images/user-config.png
The Group filters on the left sidebar lets you quickly filter users by their
group memberships, and create new groups.
.. figure:: ../images/users-config-1.png
.. figure:: ../images/user-config-groups.png
Click the gear icon on the lower left sidebar to set a default storage quota,
and to display additional fields: **Show storage location, Show last log in,
Show user backend, Send email to new users,** and **Show email address**.
.. figure:: ../images/users-config-2.png
.. figure:: ../images/user-config-settings.png
:scale: 75 %
User accounts have the following properties:
@ -45,13 +46,20 @@ User accounts have the following properties:
The admin sets the new user's first password. Both the user and the admin can
change the user's password at anytime.
*Email address*
You can set an email address for a user.
This address can be used when you first set-up an account
so the user receive a mail asking them to create a password if none is provided.
This address can be used for password reset request.
*Groups*
You may create groups, and assign group memberships to users. By default new
users are not assigned to any groups.
*Group Admin*
Group admins are granted administrative privileges on specific groups, and
can add and remove users from their groups.
can add and remove users from their groups. This means they can modify the
username, password, email, quota, etc. of members of the group.
*Quota*
The maximum disk space assigned to each user. Any user that exceeds the quota
@ -73,7 +81,7 @@ To create a user account:
* Optionally, assign **Groups** memberships
* Click the **Create** button
.. figure:: ../images/users-create.png
.. figure:: ../images/user-config-new-user.png
Login names may contain letters (a-z, A-Z), numbers (0-9), dashes (-),
underscores (_), periods (.), spaces ( ) and at signs (@). After creating the user, you
@ -127,7 +135,7 @@ system settings, or add or modify users in the groups that they are not **Group
Administrators** for. Use the dropdown menus in the **Group Admin** column to
assign group admin privileges.
.. figure:: ../images/users-groups.png
.. figure:: ../images/user-config-group-admin.png
**Super Administrators** have full rights on your Nextcloud server, and can
access and modify all settings. To assign the **Super Administrators** role to
@ -190,7 +198,7 @@ files count against that user's quota.
Disable and enable users
------------------------
.. figure:: ../images/users-actions.png
.. figure:: ../images/user-config-actions.png
Sometimes you may want to disable a user without permanently deleting their
settings and files. The user can be activated any time again, without data-loss.
@ -214,7 +222,7 @@ select **Enable**.
Deleting users
--------------
.. figure:: ../images/users-actions.png
.. figure:: ../images/user-config-actions.png
Deleting a user is easy: hover your cursor over their name on the **Users** page
until the "..."-menu icon appears at the far right. After clicking on it, you will

View File

@ -10,7 +10,9 @@ Table of contents
release_schedule
installation/index
configuration_server/index
occ_command
apps_management
exapps_management/index
configuration_user/index
configuration_files/index
file_workflows/index
@ -18,6 +20,9 @@ Table of contents
office/index
reference/index
ai/index
webhook_listeners/index
windmill_workflows/index
desktop/index
configuration_database/index
configuration_mimetypes/index
maintenance/index

View File

@ -0,0 +1,20 @@
==========================
Command-line Account Setup
==========================
If you want to automate an Account Setup Wizard to allow the user skip entering server URL and local sync folder path in UI, you can use command-line parameters.
When you specify both, the desktop client's Account Setup Wizard will jump straight to opening a browser for account authentication/connection without the need of entering any of the connection details.
The local sync folder will also be selected to the one you specify instead of using default path (/home/Nextcloud)
The following parameters are supported:
``--overridelocaldir``
specify a local dir to be used in the account setup wizard (e.g.: /home/nextcloud-sync-folder)
``--overrideserverurl``
specify a server URL to use for the force override to be used in the account setup wizard (e.g.: https://cloud.example.com)
Examples:
- ``C:\Program Files\Nextcloud\nextcloud.exe" --overridelocaldir "D:/work/nextcloud-sync-folder" --overrideserverurl https://cloud.example.com``
- For Linux and mac the same example as above will work but ``nextcloud.exe path`` and ``--overridelocaldir`` value should get changed to platform specific format (e.g. ``no .exe extension`` and ``/home/<user folder>`` format)

View File

@ -0,0 +1,141 @@
===================
Command Line Client
===================
The Nextcloud Client packages contain a command line client, ``nextcloudcmd``, that can
be used to synchronize Nextcloud files to client machines.
``nextcloudcmd`` performs a single *sync run* and then exits the synchronization
process. In this manner, ``nextcloudcmd`` processes the differences between
client and server directories and propagates the files to bring both
repositories to the same state. Contrary to the GUI-based client,
``nextcloudcmd`` does not repeat synchronizations on its own. It also does not
monitor for file system changes.
Install ``nextcloudcmd``
~~~~~~~~~~~~~~~~~~~~~~~~
CentOS
::
$ sudo yum -y install epel-release
$ sudo yum -y install nextcloud-client
Ubuntu
::
$ sudo add-apt-repository ppa:nextcloud-devs/client
$ sudo apt update
$ sudo apt install nextcloud-client
Debian
::
$ sudo apt install nextcloud-desktop-cmd
Refer to the link
- https://nextcloud.com/install/#install-clients
- https://launchpad.net/~nextcloud-devs/+archive/ubuntu/client
- https://pkgs.alpinelinux.org/packages?name=nextcloud-client
- https://help.nextcloud.com/t/linux-packages-status/10216
To invoke ``nextcloudcmd``, you must provide the local and the remote repository
URL using the following command::
nextcloudcmd [OPTIONS...] sourcedir nextcloudurl
where ``sourcedir`` is the local directory and ``nextcloudurl`` is
the server URL.
Other command line switches supported by ``nextcloudcmd`` include the following:
``--path``
Overrides default remote root folder to a specific subfolder on the server(e.g.: /Documents would sync the Documents subfolder on the server)
``--user``, ``-u`` `<user>`
Use ``user`` as the login name.
``--password``, ``-p`` `<password>`
Use `password` as the password.
``-n``
Use`netrc(5)` for login.
``--non-interactive``
Do not prompt for questions.
``--silent``, ``--s``
Inhibits verbose log output.
``--trust``
Trust any SSL certificate, including invalid ones.
``--httpproxy`` `http://[user@pass:]<server>:<port>`
Uses `server` as HTTP proxy.
``--exclude`` `<file>`
Exclude list file
``--unsyncedfolders`` `<file>`
File containing the list of unsynced folders (selective sync)
``--max-sync-retries`` `<n>`
Retries maximum n times (defaults to 3)
``-h``
Sync hidden files,do not ignore them
Credential Handling
~~~~~~~~~~~~~~~~~~~
``nextcloudcmd`` requires the user to specify the username and password using the standard URL pattern, e.g.,
::
$ nextcloudcmd /home/user/my_sync_folder https://carla:secret@server/nextcloud
To synchronize the Nextcloud directory ``Music`` to the local directory
``media/music``, through a proxy listening on port ``8080``, and on a gateway
machine using IP address ``192.168.178.1``, the command line would be::
$ nextcloudcmd --httpproxy http://192.168.178.1:8080 --path /Music \
$HOME/media/music \
https://server/nextcloud
``nextcloudcmd`` will prompt for the user name and password, unless they have
been specified on the command line or ``-n`` has been passed.
Exclude List
~~~~~~~~~~~~
``nextcloudcmd`` requires access to an exclude list file. It must either be
installed along with ``nextcloudcmd`` and thus be available in a system location,
be placed next to the binary as ``sync-exclude.lst`` or be explicitly specified
with the ``--exclude`` switch.
The required file content is one exclude item per line where wildcards are allowed, e.g.:
::
~*.tmp
._*
]Thumbs.db
]photothumb.db
System Volume Information
Example
~~~~~~~~~~~~
- Synchronize a local directory to the specified directory of the nextcloud server
::
$ nextcloudcmd --path /<Directory_that_has_been_created> /home/user/<my_sync_folder> \
https://<username>:<secret>@<server_address>

View File

@ -0,0 +1,88 @@
==================
Configuration File
==================
The Nextcloud Client reads a configuration file. You can locate this configuration file as follows:
On Linux distributions:
``$HOME/.config/Nextcloud/nextcloud.cfg``
On Microsoft Windows systems:
``%APPDATA%\Nextcloud\nextcloud.cfg``
On macOS systems:
``$HOME/Library/Preferences/Nextcloud/nextcloud.cfg``
The configuration file contains settings using the Microsoft Windows .ini file
format. You can overwrite changes using the Nextcloud configuration dialog.
.. note:: Use caution when making changes to the Nextcloud Client configuration
file. Incorrect settings can produce unintended results.
Some interesting values that can be set on the configuration file are:
+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| ``[Nextcloud]`` section |
+=================================+===============+========================================================================================================+
| Variable | Default | Meaning |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``remotePollInterval`` | ``30000`` | Specifies the poll time for the remote repository in milliseconds. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``forceSyncInterval`` | ``7200000`` | The duration of no activity after which a synchronization run shall be triggered automatically. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``fullLocalDiscoveryInterval`` | ``3600000`` | The interval after which the next synchronization will perform a full local discovery. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``notificationRefreshInterval`` | ``300000`` | Specifies the default interval of checking for new server notifications in milliseconds. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ``[General]`` section |
+==================================+==========================+========================================================================================================+
| Variable | Default | Meaning |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``chunkSize`` | ``10000000`` (10 MB) | Specifies the chunk size of uploaded files in bytes. |
| | | The client will dynamically adjust this size within the maximum and minimum bounds (see below). |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``forceLoginV2`` | ``false`` | If the client should force the new login flow, even though some circumstances might need the old flow. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``minChunkSize`` | ``5000000`` (5 MB) | Specifies the minimum chunk size of uploaded files in bytes. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``maxChunkSize`` | ``5000000000`` (5000 MB) | Specifies the maximum chunk size of uploaded files in bytes. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``targetChunkUploadDuration`` | ``60000`` (1 minute) | Target duration in milliseconds for chunk uploads. |
| | | The client adjusts the chunk size until each chunk upload takes approximately this long. |
| | | Set to 0 to disable dynamic chunk sizing. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``promptDeleteAllFiles`` | ``false`` | If a UI prompt should ask for confirmation if it was detected that all files and folders were deleted. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``timeout`` | ``300`` | The timeout for network connections in seconds. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``moveToTrash`` | ``false`` | If non-locally deleted files should be moved to trash instead of deleting them completely. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``showExperimentalOptions`` | ``false`` | Whether to show experimental options that are still undergoing testing in the user interface. |
| | | Turning this on does not enable experimental behavior on its own. It does enable user interface |
| | | options that can be used to opt in to experimental features. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``showMainDialogAsNormalWindow`` | ``false`` | Whether the main dialog should be shown as a normal window even if tray icons are available. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| ``[Proxy]`` section |
+=================================+===============+========================================================================================================+
| Variable | Default | Meaning |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``host`` | ``127.0.0.1`` | The address of the proxy server. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``port`` | ``8080`` | The port were the proxy is listening. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+
| ``type`` | ``2`` | ``0`` for System Proxy. |
+ + +--------------------------------------------------------------------------------------------------------+
| | | ``1`` for SOCKS5 Proxy. |
+ + +--------------------------------------------------------------------------------------------------------+
| | | ``2`` for No Proxy. |
+ + +--------------------------------------------------------------------------------------------------------+
| | | ``3`` for HTTP(S) Proxy. |
+---------------------------------+---------------+--------------------------------------------------------------------------------------------------------+

View File

@ -0,0 +1,24 @@
=====================
Environment Variables
=====================
The behavior of the client can also be controlled using environment variables. The value of the environment variables overrides the values in the configuration file.
The environment variables are:
- `OWNCLOUD_CHUNK_SIZE` (default: 5242880; 5 MiB) Specifies the chunk size of uploaded files in bytes. Increasing this value may help with synchronization problems in certain configurations.
- `OWNCLOUD_TIMEOUT` (default: 300 s) The timeout for network connections in seconds.
- `OWNCLOUD_CRITICAL_FREE_SPACE_BYTES` (default: 512\*1000\*1000 bytes) - The minimum disk space needed for operation. A fatal error is raised if less free space is available.
- `OWNCLOUD_FREE_SPACE_BYTES` (default: 1000\*1000\*1000 bytes) - Downloads that would reduce the free space below this value are skipped. More information available under the "Low Disk Space" section.
- `OWNCLOUD_MAX_PARALLEL` (default: 6) - Maximum number of parallel jobs.
- `OWNCLOUD_BLACKLIST_TIME_MIN` (default: 25 s) - Minimum timeout for blacklisted files.
- `OWNCLOUD_BLACKLIST_TIME_MAX` (default: 24\*60\*60 s; one day) - Maximum timeout for blacklisted files.
Low Disk Space
^^^^^^^^^^^^^^
When disk space is low the Nextcloud Client will be unable to synchronize all files. This section describes its behavior in a low disk space situation as well as the options that influence it.
1. Synchronization of a folder aborts entirely if the remaining disk space falls below 512 MB. This threshold can be adjusted with the ``OWNCLOUD_CRITICAL_FREE_SPACE_BYTES`` environment variable.
2. Downloads that would reduce the free disk space below 1 GB will be skipped or aborted. The download will be retried regularly and other synchronization is unaffected. This threshold can be adjusted with the ``OWNCLOUD_FREE_SPACE_BYTES`` environment variable.

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -0,0 +1,31 @@
===============
Desktop Clients
===============
Available for Windows, macOS, and various Linux distributions, the Nextcloud
Desktop Sync client enables you to:
- Specify one or more directories on your computer that you want to synchronize
to the Nextcloud server.
- Always have the latest files synchronized, wherever they are located.
Your files are always automatically synchronized between your Nextcloud server, computer and mobile device.
.. toctree::
:maxdepth: 1
options
massdeployment
configfile
envvars
commandline
accountcommand
troubleshooting
You can find additional information here:
* `User manual`_
* `Developer manual`_
.. _`User manual`: https://docs.nextcloud.com/server/latest/user_manual/en/desktop/index.html
.. _`Developer manual`: https://docs.nextcloud.com/server/latest/developer_manual/desktop/index.html

View File

@ -0,0 +1,34 @@
====================================
Mass Deployment And Account Creation
====================================
It is possible to perform mass deployment of the Nextcloud desktop client by passing certain command-line parameters from the deployment step to Nextcloud desktop client executable after the initial setup.
This will allow desktop client to generate a config (.cfg) file that will be used during subsequent launches.
A config file will have a corresponding account written into it similar to if you have added it manually via the desktop client's UI.
The desktop client will exit with code 0 if account has been added successfully, or 1 in case of failure.
Detailed failure message is printed to the desktop client logs.
The following parameters are supported:
``--userid``
(required) userId (username as on the server) to pass when creating an account via command-line.
``--apppassword``
(required) appPassword to pass when creating an account via command-line (see the ``login-flow`` section in server documentation on how to generate the app password).
``--localdirpath``
(optional) path where to create a local sync folder when creating an account via command-line. If skipped, then default local sync folder path (/home/<userid>/Nextcloud<n> for Linux/mac or C:/<userid>/Nextcloud<n> for Windows) will be generated by desktop client.
``--isvfsenabled``
(optional) whether to set a VFS or non-VFS folder (1 for 'yes' or 0 for 'no') when creating an account via command-line. Default is 0.
``--remotedirpath``
(optional) path to a remote subfolder when creating an account via command-line. e.g. If the server has folders "/Photos", "/Documents", "/Music" you can pass "/Music" and then this folder will get set up as remote root.
``--serverurl``
(required) a server URL to use when creating an account via command-line. (NOTE: There is another parameter supported by Nextcloud desktop client ``--overrideserverurl`` but it SHOULD NOT be used here as it is intended for setup via UI with wizard)
Examples:
- ``C:\Program Files\Nextcloud\nextcloud.exe" --userid admin --apppassword Jliy12356785jxnHa2ZCiZ9MX48ncECwDso95Pq3a5HABjY34ZvhZiXrPfpKWUg7aOHAX5 --localdirpath "D:\\Nextcloud-sync-folder" --remotedirpath /Music --serverurl "https://cloud.example.com" --isvfsenabled 1"`` - this will create a config file for user admin on the server https://cloud.example.com and set a remote root folder to "Music", the local sync folder will get created with VFS mode.
- For Linux and mac the same example as above will work but ``nextcloud.exe path`` and ``--localdirpath`` value should get changed to platform specific format (e.g. ``no .exe extension`` and ``/home/<user folder>`` format)

View File

@ -0,0 +1,38 @@
=======
Options
=======
You have the option of starting your Nextcloud desktop client with the
``nextcloud`` command. The following options are supported:
``nextcloud -h`` or ``nextcloud --help``
Displays all command options.
The other options are:
``--logwindow``
Opens a window displaying log output.
``--logfile`` `<filename>`
Write log output to the file specified. To write to stdout, specify `-`
as the filename.
``--logdir`` `<name>`
Writes each synchronization log output in a new file in the specified
directory.
``--logexpire`` `<hours>`
Removes logs older than the value specified (in hours). This command is
used with ``--logdir``.
``--logflush``
Clears (flushes) the log file after each write action.
``--logdebug``
Also output debug-level messages in the log (equivalent to setting the env var QT_LOGGING_RULES="qt.*=true;*.debug=true").
``--confdir`` `<dirname>`
Uses the specified configuration directory.
``--background``
Launch the application in the background (i.e. without opening the main dialog).

View File

@ -0,0 +1,326 @@
===============
Troubleshooting
===============
The following two general issues can result in failed synchronization:
- The server setup is incorrect.
- The client contains a bug.
When reporting bugs, it is helpful if you first determine what part of the
system is causing the issue.
Identifying Basic Functionality Problems
----------------------------------------
:Performing a general Nextcloud Server test:
The first step in troubleshooting synchronization issues is to verify that
you can log on to the Nextcloud web application. To verify connectivity to the
Nextcloud server try logging in via your Web browser.
If you are not prompted for your username and password, or if a red warning
box appears on the page, your server setup requires modification. Please verify
that your server installation is working correctly.
:Ensure the WebDAV API is working:
If all desktop clients fail to connect to the Nextcloud Server, but access
using the Web interface functions properly, the problem is often a
misconfiguration of the WebDAV API.
The Nextcloud Client uses the built-in WebDAV access of the server content.
Verify that you can log on to Nextcloud's WebDAV server. To verify connectivity
with the Nextcloud WebDAV server:
- Open a browser window and enter the address to the Nextcloud WebDAV server.
For example, if your Nextcloud instance is installed at
``http://yourserver.com/nextcloud``, your WebDAV server address is
``http://yourserver.com/nextcloud/remote.php/dav``.
If you are prompted for your username and password but, after providing the
correct credentials, authentication fails, please ensure that your
authentication backend is configured properly.
:Use a WebDAV command line tool to test:
A more sophisticated test method for troubleshooting synchronization issues
is to use a WebDAV command line client and log into the Nextcloud WebDAV server.
One such command line client -- called ``cadaver`` -- is available for Linux
distributions. You can use this application to further verify that the WebDAV
server is running properly using PROPFIND calls.
As an example, after installing the ``cadaver`` app, you can issue the
``propget`` command to obtain various properties pertaining to the current
directory and also verify WebDAV server connection.
"CSync unknown error"
---------------------
If you see this error message stop your client, delete the
``.sync_xxxxxxx.db`` file, and then restart your client.
There is a hidden ``.sync_xxxxxxx.db`` file inside the folder of every account
configured on your client.
.. NOTE::
Please note that this will also erase some of your settings about which
files to download.
See https://github.com/owncloud/client/issues/5226 for more discussion of this
issue.
"Connection closed" message when syncing files
----------------------------------------------
This message can be caused by using chunks that are too big or time-outs that
are set too liberally. You can configure the chunking behavior of the client in
the config file. For example, change these settings:
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``chunkSize`` | ``10000000`` (10 MB) | Specifies the chunk size of uploaded files in bytes. |
| | | The client will dynamically adjust this size within the maximum and minimum bounds (see below). |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``minChunkSize`` | ``1000000`` (1 MB) | Specifies the minimum chunk size of uploaded files in bytes. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``maxChunkSize`` | ``50000000`` (1000 MB) | Specifies the maximum chunk size of uploaded files in bytes. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
| ``targetChunkUploadDuration`` | ``6000`` (1 minute) | Target duration in milliseconds for chunk uploads. |
| | | The client adjusts the chunk size until each chunk upload takes approximately this long. |
| | | Set to 0 to disable dynamic chunk sizing. |
+----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+
Setting ``maxChunkSize`` to 50000000, for example, will decrease the
individual chunk to about 50 mb. This causes additional overhead but
might be required in some situations, for example behind CloudFlare which
has been seen limiting upload chunks to 100mb. In other situations,
limiting ``targetChunkUploadDuration`` can help to avoid time-outs.
Connection issues with the macOS client on "insecure" connections
-----------------------------------------------------------------
When using macOS devices to connect to a Nextcloud server that uses a what maybe
be classified as an insecure connection (i.e. connecting to a server with a
self-signed certificate, or a certificate with what Apple may consider an
insufficiently secure cipher), the macOS client may not connect to the server.
This is because macOS requires a valid certificate to establish a connection.
To resolve this issue, you must ensure the server is signed with a certificate
that is accepted by Apple's App Transport Security requirements. More
information on the requirements can be found in Apple's documentation pages.
https://developer.apple.com/documentation/security/preventing-insecure-network-connections
Isolating other issues
----------------------
Other issues can affect synchronization of your Nextcloud files:
- If you find that the results of the synchronizations are unreliable, please
ensure that the folder to which you are synchronizing is not shared with
other synchronization applications.
- Synchronizing the same directory with Nextcloud and other synchronization
software such as Unison, rsync, Microsoft Windows Offline Folders, or other
cloud services such as Dropbox or Microsoft SkyDrive is not supported and
should not be attempted. In the worst case, it is possible that synchronizing
folders or files using Nextcloud and other synchronization software or
services can result in data loss.
- If you find that only specific files are not synchronized, the
synchronization protocol might be having an effect. Some files are
automatically ignored because they are system files, other files might be
ignored because their filename contains characters that are not supported on
certain file systems. For more information about ignored files, see `ignored-files`.
- If you are operating your own server, and use the local storage backend (the
default), make sure that Nextcloud has exclusive access to the directory.
.. warning:: The data directory on the server is exclusive to Nextcloud and must not be modified manually.
- If you are using a different file backend on the server, you can try to exclude a bug in the
backend by reverting to the built-in backend.
- If you are experiencing slow upload/download speed or similar performance issues
be aware that those could be caused by on-access virus scanning solutions, either
on the server (like the files_antivirus app) or the client.
Log Files
---------
Effectively debugging software requires as much relevant information as can be
obtained. To assist the Nextcloud support personnel, please try to provide as
many relevant logs as possible. Log output can help with tracking down
problems and, if you report a bug, log output can help to resolve an issue more
quickly.
.. warning:: Log files contain sensitive information. You may wish to redact sensitive details or to only share limited excerpts.
Obtaining the Client Log File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create Debug Archive
~~~~~~~~~~~~~~~~~~~~
Since the 3.1.0 release we made it easier for users to provide debug information: debug logging is enabled by default with expiration time set to 24 hours and under the "General" settings, you can click on "Create Debug Archive ..." to pick the location of where the desktop client will export the logs and the database to a zip file.
.. figure:: images/create_debug_archive.png
:alt: Create debug archive
Keyboard shortcut
~~~~~~~~~~~~~~~~~
Another way to obtain the client log file:
1. Open the Nextcloud Desktop Client.
2. Press F12 or Ctrl-L on your keyboard.
The Log Output window opens.
.. figure:: images/log_output_window.png
:alt: Log output
3. Click the 'Save' button.
The Save Log File window opens.
.. figure:: images/save_log_file.png
:alt: Save logfile
4. Migrate to a location on your system where you want to save your log file.
5. Name the log file and click the 'Save' button.
The log file is saved in the location specified.
Command line
~~~~~~~~~~~~
Alternatively, you can launch the Nextcloud Log Output window using the
``--logwindow`` command. After issuing this command, the Log Output window
opens to show the current log. You can then follow the same procedures
mentioned above to save the log to a file.
.. note:: You can also open a log window for an already running session, by
restarting the client using the following command:
* Windows: ``C:\Program Files (x86)\Nextcloud\nextcloud.exe --logwindow``
* macOS: ``/Applications/nextcloud.app/Contents/MacOS/nextcloud --logwindow``
* Linux: ``nextcloud --logwindow``
Config file
~~~~~~~~~~~
The Nextcloud client enables you to save log files directly to a predefined file
or directory. This is a useful option for troubleshooting sporadic issues as
it enables you to log large amounts of data and bypass the limited buffer
settings associated with the log window.
To enable logging to a directory, stop the client and add the following to the General section in the configuration file:
::
[General]
logDebug=true
logExpire=<hours>
logDir=<dir>
Independent of platform you must use slash (/) as a path separator:
.. note::
* Correct: C:/Temp
* Not correct: C:\Temp
As an example, to keep log data for two days in a directory called temp:
::
[General]
logDebug=true
logExpire=48
logDir=C:/Temp
Once you restart the client, you will find the log file in the ``<dir>`` defined in ``logDir``.
.. note:: You will find the configuration file in the following locations:
* Microsoft Windows systems: ``%APPDATA%\Nextcloud\nextcloud.cfg``
* macOS systems: ``$HOME/Library/Preferences/Nextcloud/nextcloud.cfg``
* Linux distributions: ``$HOME/.config/Nextcloud/nextcloud.cfg``
Alternatively, you can start the client in the command line with parameters:
1. To save to a file, start the client using the ``--logfile <file>`` command,
where ``<file>`` is the filename to which you want to save the file.
2. To save to a directory, start the client using the ``--logdir <dir>`` command, where ``<dir>``
is an existing directory.
When using the ``--logdir`` command, each sync run creates a new file. To limit
the amount of data that accumulates over time, you can specify the
``--logexpire <hours>`` command. When combined with the ``--logdir`` command,
the client automatically erases saved log data in the directory that is older
than the specified number of hours.
As an example, to define a test where you keep log data for two days, you can
issue the following command:
```
nextcloud --logdir /tmp/nextcloud_logs --logexpire 48
```
Nextcloud server Log File
~~~~~~~~~~~~~~~~~~~~~~~~~
The Nextcloud server also maintains an Nextcloud specific log file. This log file
must be enabled through the Nextcloud Administration page. On that page, you can
adjust the log level. We recommend that when setting the log file level that
you set it to a verbose level like ``Debug`` or ``Info``.
You can view the server log file using the web interface or you can open it
directly from the file system in the Nextcloud server data directory.
.. todo:: Need more information on this. How is the log file accessed?
Need to explore procedural steps in access and in saving this file ... similar
to how the log file is managed for the client. Perhaps it is detailed in the
Admin Guide and a link should be provided from here. I will look into that
when I begin heavily editing the Admin Guide.
Webserver Log Files
~~~~~~~~~~~~~~~~~~~
It can be helpful to view your webserver's error log file to isolate any
Nextcloud-related problems. For Apache on Linux, the error logs are typically
located in the ``/var/log/apache2`` directory. Some helpful files include the
following:
- ``error_log`` -- Maintains errors associated with PHP code.
- ``access_log`` -- Typically records all requests handled by the server; very
useful as a debugging tool because the log line contains information specific
to each request and its result.
You can find more information about Apache logging at
``http://httpd.apache.org/docs/current/logs.html``.
Core Dumps
----------
On macOS and Linux systems, and in the unlikely event the client software
crashes, the client is able to write a core dump file. Obtaining a core dump
file can assist Nextcloud Customer Support tremendously in the debugging
process.
To enable the writing of core dump files, you must define the
``OWNCLOUD_CORE_DUMP`` environment variable on the system.
For example:
```
OWNCLOUD_CORE_DUMP=1 nextcloud
```
This command starts the client with core dumping enabled and saves the files in
the current working directory.
.. note:: Core dump files can be fairly large. Before enabling core dumps on
your system, ensure that you have enough disk space to accommodate these files.
Also, due to their size, we strongly recommend that you properly compress any
core dump files prior to sending them to Nextcloud Customer Support.

View File

@ -0,0 +1,35 @@
=======================
Advanced Deploy Options
=======================
AppAPI allows optionally to configure environment variables and mounts for the ExApp container.
It is available via "Deploy options" modal next to "Deploy and Enable" button in the sidebar of the ExApp page on the Apps management page:
.. image:: ./img/advanced_deploy_options_1.png
Or via CLI (:ref:`advanced_deploy_options_cli`).
Environment Variables
---------------------
Environment variables enable more precise configuration of the ExApp.
ExApp developers can define the list of supported environment variables with descriptions,
only these variables will be available for configuration.
By default there are only mounts available for configuration.
.. image:: ./img/advanced_deploy_options_2.png
When ExApp installed the list of set environment variables will be displayed.
Mounts
------
Mounts can be used to provide additional data to the ExApp container from the host.
For example, it will be useful for some apps to provide a folder with SSL certs of your cloud,
so the app can handle HTTPS correctly without any additional re-installation of the ExApp.
.. image:: ./img/advanced_deploy_options_3.png

View File

@ -0,0 +1,75 @@
========================
AppAPI and External Apps
========================
.. _ai-app_api:
Previously, Nextcloud only supported applications written in the PHP programming language.
In order to support a wider range of use cases,
an ecosystem for **ExApps** (short for "External Apps") was introduced, allowing for the installation of apps as Docker containers.
Most of our :doc:`Artificial Intelligence <../ai/index>` (AI) apps are developed as ExApps and thus may require some preparation of your Nextcloud instance before you can install them.
Installing AppAPI
-----------------
All ExApps require the `AppAPI <https://apps.nextcloud.com/apps/app_api>`_ Nextcloud app as a dependency.
As of Nextcloud version 30.0.1, AppAPI is automatically installed by default.
If AppAPI is not installed, you can still install it by simply navigating to the Apps management page in your Nextcloud instance and search for AppAPI from the Tools category.
Setup deploy daemon
-------------------
A Deploy Daemon is a way for Nextcloud to install, communicate with, and control ExApps.
.. note::
If you are using Nextcloud AIO with the "Docker Socket Proxy" container enabled, a Deploy Daemon will be automatically created and configured to work out-of-the-box.
Otherwise, follow the steps below to set up a Deploy Daemon from the AppAPI admin settings.
1. Setup a Docker container called `docker-socket-proxy <https://github.com/nextcloud/docker-socket-proxy#readme>`_ that proxies access to Docker for your Nextcloud instance.
2. Go to the AppAPI admin settings.
3. Click on the "Register Daemon" button.
4. Fill in the required fields:
- ``Name``: unique name of the Deploy daemon
- ``Display name``: the name that will be displayed in the UI
- ``Deployment method``: by default, you will need to choose ``docker_install`` (``manual_install`` is for development or custom use case of manual ExApp installation)
- ``Daemon Host``: hostname/IP address + port of the Deploy daemon
- ``Nextcloud URL``: autofilled with current domain, you might need to change the protocol to http/https depending on your setup
- ``Set as default daemon``: check if you want set new Deploy daemon as default
- ``Enable https``: check if your Deploy daemon (Docker Socket Proxy) is configured with TLS
- Deploy Config:
- ``Network``: Docker network name, depends on your networking setup, enforces to "host" if "Enable https" is checked
- ``HaProxy password``: password for Docker Socket Proxy, if it is configured with TLS
- ``Compute Device``: CPU, CUDA or ROCm, depending on your hardware config on Deploy daemon host machine
- ``Add additional option`` (see :ref:`additional_options_list`): setup additional KEY + VALUE deploy config options
5. Click "Check connection" to verify that the configuration is correct.
6. Click "Register" to save the Deploy Daemon configuration.
.. note::
For remote DSP setup, it should expose the ports on the host.
.. image:: ./img/app_api_3.png
Deployment configuration examples can be found :doc:`here <./DeployConfigurations>`.
Installing ExApps
-----------------
You can now install ExApps from the Nextcloud App Store by clicking "Install" on the respective app in the Apps page.
If successful, the ExApp will be displayed under the "Your apps" list.
.. image:: ./img/exapp_list_example.png
FAQ
---
* I have two graphics cards XXX with 6/8/Y GB of ram each. How can I run something which does not fit into one graphics card?
* Distributing models across multiple GPUs is currently not supported. You will need a GPU that fits all of the model you are trying to use.
* I have YYY graphics card that does not supports CUDA - can I use it and how?
* No, our AI apps require GPUs with CUDA support to function at this time.
* What is the minimum VRAM size requirement for the GPU if I want to install multiple apps?
* When running multiple ExApps on the same GPU, the GPU must hold the largest model amongst the apps you install.
* Is it possible to add more graphics cards for my instance to enable parallel requests or to speed up one request?
* Parallel processing of AI workloads for the same app with multiple GPUs is currently not supported.
* Can I use the CPU and GPU in parallel for AI processing?
* No, you can only process AI workloads on either the CPU or GPU for one app. For different apps, you can decide whether to run them on CPU or GPU.

View File

@ -0,0 +1,384 @@
.. _deploy-configs:
Deployment configurations
=========================
Currently, only one kind of application deployment is supported:
* **Docker Deploy Daemon**
Docker Deploy Daemon
--------------------
Orchestrates the deployment of applications as Docker containers.
.. warning::
The administrator is responsible for the security actions taken to configure the Docker daemon connected to the Nextcloud instance.
These schemes are only examples of possible configurations.
We recommend that you use the `AppAPI Docker Socket Proxy <https://github.com/nextcloud/docker-socket-proxy>`_ or `AIO Docker Socket Proxy <#nextcloud-in-docker-aio-all-in-one>`_ container.
There are several Docker Daemon Deploy configurations (example schemes):
* Nextcloud and Docker on the **same host** (via socket or DockerSocketProxy)
* Nextcloud on the host and Docker on a **remote** host (via DockerSocketProxy with HTTPS)
* Nextcloud and **ExApps** in the **same Docker** (via DockerSocketProxy)
* Nextcloud in AIO Docker and **ExApps** in the **same Docker** (via AIO DockerSocketProxy)
NC & Docker on the Same-Host
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The simplest configuration is when Nextcloud is installed on the host and Docker is on the same host and applications are deployed to it.
.. mermaid::
stateDiagram-v2
classDef docker fill: #1f97ee, color: transparent, font-size: 34px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef nextcloud fill: #006aa3, color: transparent, font-size: 34px, stroke: #045987, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/nextcloud.svg) no-repeat center center / contain
classDef python fill: #1e415f, color: white, stroke: #364c53, stroke-width: 1px
Host
state Host {
Nextcloud --> Daemon : /var/run/docker.sock
Daemon --> Containers
state Containers {
ExApp1
--
ExApp2
--
ExApp3
}
}
class Nextcloud nextcloud
class Daemon docker
class ExApp1 python
class ExApp2 python
class ExApp3 python
Suggested config values(template *Custom default*):
1. Daemon host: ``/var/run/docker.sock``
2. HTTPS checkbox: *not supported using docker socket*
3. Network: ``host``
4. HaProxy password: **not supported using raw docker socket, should be empty**
---
Suggested way to communicate with Docker via `Docker Socket Proxy container <https://github.com/nextcloud/docker-socket-proxy>`_.
.. mermaid::
stateDiagram-v2
classDef docker fill: #1f97ee, color: transparent, font-size: 34px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef nextcloud fill: #006aa3, color: transparent, font-size: 34px, stroke: #045987, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/nextcloud.svg) no-repeat center center / contain
classDef python fill: #1e415f, color: white, stroke: #364c53, stroke-width: 1px
Host
state Host {
Nextcloud --> DockerSocketProxy: by port
Docker --> Containers
Docker --> DockerSocketProxy : /var/run/docker.sock
state Containers {
DockerSocketProxy --> ExApp1
DockerSocketProxy --> ExApp2
DockerSocketProxy --> ExApp3
}
}
class Nextcloud nextcloud
class Docker docker
class ExApp1 python
class ExApp2 python
class ExApp3 python
Suggested config values(template *Docker Socket Proxy*):
1. Daemon host: ``localhost:2375``
Choose **A** or **B** option:
A. Docker Socket Proxy should be deployed with ``network=host`` and ``BIND_ADDRESS=127.0.0.1``
B. Docker Socket Proxy should be deployed with ``network=bridge`` and it's port should be published to host's 127.0.0.1(e.g. **-p 127.0.0.1:2375:2375**)
2. HTTPS checkbox: **disabled**
3. Network: ``host``
4. HaProxy password: **should not be empty**
.. warning::
Be careful with option ``A``, by default **Docker Socket Proxy** binds to ``*`` if ``BIND_ADDRESS`` is not specified during container creation.
Check opened ports after finishing configuration.
Docker on a remote host
^^^^^^^^^^^^^^^^^^^^^^^
Distributed configuration occurs when Nextcloud is installed on one host and Docker is located on a remote host, resulting in the deployment of applications on the remote host.
Benefit: no performance impact on Nextcloud host.
In this case, the AppAPI uses a Docker Socket Proxy deployed on remote host to access docker socket and ExApps.
.. mermaid::
stateDiagram-v2
classDef docker fill: #1f97ee, color: transparent, font-size: 34px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef nextcloud fill: #006aa3, color: transparent, font-size: 34px, stroke: #045987, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/nextcloud.svg) no-repeat center center / contain
classDef python fill: #1e415f, color: white, stroke: #364c53, stroke-width: 1px
Direction LR
Host1 --> Host2 : by port
state Host1 {
Nextcloud
}
state Host2 {
[*] --> DockerSocketProxy : by port
Daemon --> Containers
state Containers {
[*] --> DockerSocketProxy : /var/run/docker.sock
DockerSocketProxy --> ExApp1
DockerSocketProxy --> ExApp2
DockerSocketProxy --> ExApp3
}
}
class Nextcloud nextcloud
class Daemon docker
class ExApp1 python
class ExApp2 python
class ExApp3 python
Suggested config values(template *Docker Socket Proxy*):
1. Daemon host: ADDRESS_OF_REMOTE_MACHINE (e.g. **server_name.com:2375**)
2. HTTPS checkbox: ``enabled``
3. Network: ``host``
4. HaProxy password: **should not be empty**
NC & ExApps in the same Docker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Applications are deployed in the same Docker where Nextcloud resides.
Suggested way to communicate with Docker: via ``docker-socket-proxy``.
.. mermaid::
stateDiagram-v2
classDef docker fill: #1f97ee, color: transparent, font-size: 34px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef nextcloud fill: #006aa3, color: transparent, font-size: 34px, stroke: #045987, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/nextcloud.svg) no-repeat center center / contain
classDef python fill: #1e415f, color: white, stroke: #364c53, stroke-width: 1px
Host
state Host {
Daemon --> Containers
state Containers {
[*] --> DockerSocketProxy : /var/run/docker.sock
Nextcloud --> DockerSocketProxy: by port
--
DockerSocketProxy --> ExApp1
DockerSocketProxy --> ExApp2
}
}
class Nextcloud nextcloud
class Daemon docker
class ExApp1 python
class ExApp2 python
class ExApp3 python
Suggested config values(template *Docker Socket Proxy*):
1. Daemon host: nextcloud-appapi-dsp:2375
2. HTTPS checkbox: ``disabled``
3. Network: `user defined network <https://docs.docker.com/network/#user-defined-networks>`_
4. HaProxy password: **should not be empty**
.. note::
Network **should not be the default docker's bridge** as it does not support DNS resolving by container names.
This means that **Docker Socket Proxy**, **Nextcloud** and **ExApps** containers should all be in the same docker network, different from the default **bridge**.
.. _nextcloud-in-docker-aio-all-in-one:
Nextcloud in Docker AIO (all-in-one)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In the case of AppAPI in Docker AIO setup (installed in Nextcloud container).
.. note::
AIO Docker Socket Proxy container must be enabled.
.. mermaid::
stateDiagram-v2
classDef docker fill: #1f97ee, color: transparent, font-size: 34px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef docker2 fill: #1f97ee, color: transparent, font-size: 20px, stroke: #364c53, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/docker.png) no-repeat center center / contain
classDef nextcloud fill: #006aa3, color: transparent, font-size: 34px, stroke: #045987, stroke-width: 1px, background: url(https://raw.githubusercontent.com/nextcloud/app_api/main/docs/img/nextcloud.svg) no-repeat center center / contain
classDef python fill: #1e415f, color: white, stroke: #364c53, stroke-width: 1px
Host
state Host {
Daemon --> Containers
state Containers {
[*] --> NextcloudAIOMasterContainer : /var/run/docker.sock
[*] --> DockerSocketProxy : /var/run/docker.sock
NextcloudAIOMasterContainer --> Nextcloud
AppAPI --> Nextcloud : installed in
Nextcloud --> DockerSocketProxy
DockerSocketProxy --> ExApp1
DockerSocketProxy --> ExApp2
DockerSocketProxy --> ExApp3
}
}
class Nextcloud nextcloud
class Daemon docker
class Daemon2 docker2
class ExApp1 python
class ExApp2 python
class ExApp3 python
AppAPI will automatically create the default DaemonConfig for AIO Docker Socket Proxy in order to use it as an orchestrator to create ExApp containers.
.. note::
Default DaemonConfig will be created only if the default DaemonConfig is not already registered.
Default AIO Deploy Daemon
*************************
Nextcloud AIO has a specifically created Docker Socket Proxy container to be used as the Deploy Daemon in AppAPI.
It has `fixed parameters <https://github.com/nextcloud/app_api/blob/main/lib/DeployActions/AIODockerActions.php#L52-L74)>`_:
* Name: ``docker_aio``
* Display name: ``AIO Docker Socket Proxy``
* Accepts Deploy ID: ``docker-install``
* Protocol: ``http``
* Host: ``nextcloud-aio-docker-socket-proxy:2375``
* Compute device: ``CPU``
* Network: ``nextcloud-aio``
* Nextcloud URL (passed to ExApps): ``https://$NC_DOMAIN``
Docker Socket Proxy security
****************************
AIO Docker Socket Proxy has strictly limited access to the Docker APIs described in `HAProxy configuration <https://github.com/nextcloud/all-in-one/blob/main/Containers/docker-socket-proxy/haproxy.cfg>`_.
NC to ExApp Communication
-------------------------
Each type of DeployDaemon necessarily implements the ``resolveExAppUrl`` function.
It has the prototype:
.. code-block:: php
public function resolveExAppUrl(
string $appId, string $protocol, string $host, array $deployConfig, int $port, array &$auth
) {}
where:
* **protocol** is daemon protocol value
* **host** is daemon host value, *can be DNS:port or IP:PORT or even path to docker socket*.
* **port** is an integer with ExApp port
* **deployConfig** can be custom for each Daemon type
* **auth** is an optional array, with *Basic Authentication* data if needed to access ExApp
.. note::
The optional additional parameter *OVERRIDE_APP_HOST* can be used to
override the host that will be used for ExApp binding.
It can be ``0.0.0.0`` in some specific configurations, when VPN is used
or both Nextcloud instance and ExApps are one the same physical machine but different virtual environments.
Also you can specify something like ``10.10.2.5`` and in this case ``ExApp`` will try to bind to that address and
AppAPI will try to send request s directly to this address assuming that ExApp itself bound on it.
The simplest implementation is in the **Manual-Install** deploy type:
.. code-block:: php
public function resolveExAppUrl(
string $appId, string $protocol, string $host, array $deployConfig, int $port, array &$auth
): string {
$auth = [];
if (isset($deployConfig['additional_options']['OVERRIDE_APP_HOST']) &&
$deployConfig['additional_options']['OVERRIDE_APP_HOST'] !== ''
) {
$wideNetworkAddresses = ['0.0.0.0', '127.0.0.1', '::', '::1'];
if (!in_array($deployConfig['additional_options']['OVERRIDE_APP_HOST'], $wideNetworkAddresses)) {
$host = $deployConfig['additional_options']['OVERRIDE_APP_HOST'];
}
}
return sprintf('%s://%s:%s', $protocol, $host, $port);
}
Here we see that AppAPI sends requests to the **host**:**port** specified during daemon creation.
Now, let's take a look at the Docker Daemon implementation of ``resolveExAppUrl``:
.. code-block:: php
public function resolveExAppUrl(
string $appId, string $protocol, string $host, array $deployConfig, int $port, array &$auth
): string {
$auth = [];
if (isset($deployConfig['additional_options']['OVERRIDE_APP_HOST']) &&
$deployConfig['additional_options']['OVERRIDE_APP_HOST'] !== ''
) {
$wideNetworkAddresses = ['0.0.0.0', '127.0.0.1', '::', '::1'];
if (!in_array($deployConfig['additional_options']['OVERRIDE_APP_HOST'], $wideNetworkAddresses)) {
return sprintf(
'%s://%s:%s', $protocol, $deployConfig['additional_options']['OVERRIDE_APP_HOST'], $port
);
}
}
$host = explode(':', $host)[0];
if ($protocol == 'https') {
$exAppHost = $host;
} elseif (isset($deployConfig['net']) && $deployConfig['net'] === 'host') {
$exAppHost = 'localhost';
} else {
$exAppHost = $appId;
}
if (isset($deployConfig['haproxy_password']) && $deployConfig['haproxy_password'] !== '') {
$auth = [self::APP_API_HAPROXY_USER, $deployConfig['haproxy_password']];
}
return sprintf('%s://%s:%s', $protocol, $exAppHost, $port);
}
Here we have much more complex algorithm of detecting to where requests should be send.
First of all, if the protocol is set to ``https``, AppAPI always sends requests to the daemon host,
and in this case, it is a HaProxy that will forward requests to ExApps that will be listening on ``localhost``.
Briefly, it will look like this (*haproxy_host==daemon host value*):
NC --> *https* --> ``haproxy_host:ex_app_port`` --> *http* --> ``localhost:ex_app_port``
When the protocol is not ``https`` but ``http``, then what will be the endpoint where to send requests is determined by ``$deployConfig['net']`` value.
If ``net`` is defined and equal to ``host``, then AppAPI assumes that ExApp is installed somewhere in the current host network and will be available on ``localhost`` loop-back adapter.
NC --> *http* --> ``localhost:ex_app_port``
In all other cases, the ExApp should be available by it's name: e.g. when using docker **custom bridge** network all containers available by DNS.
NC --> *http* --> ``app_container_name:ex_app_port``
These three different types of communication cover most popular configurations.

View File

@ -0,0 +1,97 @@
.. _managing-deploy-daemons:
Managing Deploy Daemons
=======================
OCC CLI
^^^^^^^
There are a few OCC CLI commands to manage Deploy Daemons:
1. Register ``occ app_api:daemon:register``
2. Unregister ``occ app_api:daemon:unregister``
3. List registered daemons ``occ app_api:daemon:list``
Register
--------
Register Deploy Daemon (DaemonConfig).
Command: ``app_api:daemon:register [--net NET] [--haproxy_password HAPROXY_PASSWORD] [--compute_device COMPUTE_DEVICE] [--set-default] [--] <name> <display-name> <accepts-deploy-id> <protocol> <host> <nextcloud_url>``
Arguments
*********
* ``name`` - unique name of the daemon (e.g. ``docker_local_sock``)
* ``display-name`` - name of the daemon (e.g. ``My Local Docker``, will be displayed in the UI)
* ``accepts-deploy-id`` - type of deployment (``docker-install`` or ``manual-install``)
* ``host`` - **path to docker-socket** or the Docker Socket Proxy: ``address:port``
* ``protocol`` - protocol used to communicate with the Daemon/ExApps (``http`` or ``https``)
* ``nextcloud_url`` - Nextcloud URL, Daemon config required option (e.g. ``https://nextcloud.local``)
Options
*******
* ``--net [network-name]`` - ``[required]`` network name to bind docker container to (default: ``host``)
* ``--haproxy_password HAPROXY_PASSWORD`` - ``[optional]`` password for AppAPI Docker Socket Proxy
* ``--compute_device GPU`` - ``[optional]`` GPU device to expose to the daemon (e.g. ``cpu|cuda|rocm``, default: ``cpu``)
* ``--set-default`` - ``[optional]`` set created daemon as default for ExApps installation
DeployConfig
************
DeployConfig is a set of additional options in Daemon config, which are used in deployment algorithms to configure
ExApp container.
.. code-block:: json
{
"net": "host",
"nextcloud_url": "https://nextcloud.local",
"haproxy_password": "some_secure_password",
"computeDevice": {
"id": "cuda",
"name": "CUDA (NVIDIA)",
},
}
DeployConfig options
********************
* ``net`` **[required]** - network name to bind docker container to (default: ``host``)
* ``nextcloud_url`` **[required]** - Nextcloud URL (e.g. ``https://nextcloud.local``)
* ``haproxy_password`` *[optional]* - password for AppAPI Docker Socket Proxy
* ``computeDevice`` *[optional]* - Compute device to attach to the daemon (e.g. ``{ "id": "cuda", "label": "CUDA (NVIDIA)" }``)
Unregister
----------
Unregister Deploy Daemon (DaemonConfig).
Command: ``app_api:daemon:unregister <daemon-config-name>``
List registered daemons
-----------------------
List registered Deploy Daemons (DaemonConfigs).
Command: ``app_api:daemon:list``
Nextcloud AIO
^^^^^^^^^^^^^
In the case of AppAPI installed in AIO, a default Deploy Daemon is registered automatically.
It is possible to register additional Deploy Daemons using the same methods as described above.
.. _additional_options_list:
Additional options
^^^^^^^^^^^^^^^^^^
There is a possibility to add additional options to the Deploy Daemon configuration,
which are key-value pairs.
Currently, the following options are available:
- ``OVERRIDE_APP_HOST`` - can be used to override the host that will be used for ExApp binding (not passed to ExApp container envs)

View File

@ -0,0 +1,107 @@
Managing ExApps
===============
Managing ExApps can be done from App Management UI as with other Nextcloud Apps,
but you can also use the AppAPI commands in the OCC CLI tool.
There are several commands to work with ExApps:
1. Register
2. Unregister
3. Update
4. Enable
5. Disable
6. List ExApps
Register
--------
Command: ``app_api:app:register [--force-scopes] [--info-xml INFO-XML] [--json-info JSON-INFO] [--wait-finish] [--silent] [--test-deploy-mode] [--env [ENV]] [--mount [MOUNT]] [--] <appid> [<daemon-config-name>]``
The register command is the first ExApp installation step.
Arguments
*********
* ``appid`` - unique name of the ExApp (e.g. ``app_python_skeleton``, must be the same as in deployed container)
* ``daemon-config-name`` - unique name of the daemon (e.g. ``docker_local_sock``)
Options
*******
* ``--json-info JSON-INFO`` *[optional]* - ExApp deploy JSON info (json string)
* ``--info-xml INFO-XML`` *[optional]* - path to info.xml file (url or local absolute path)
* ``--wait-finish`` *[optional]* - wait until initialization finished
* ``--silent`` *[optional]* - do not print to console
* ``--test-deploy-mode`` *[optional]* - test deploy mode with additional status checks and slightly different logic
.. _advanced_deploy_options_cli:
Advanced Deploy Options
***********************
* ``--env`` *[optional]* - environment (ENV_NAME=ENV_VALUE), passed to ExApp container as environment variables (multiple values allowed)
* ``--mount`` *[optional]* - mount options (SRC_PATH=DST_PATH), passed to ExApp container as volume mounts (multiple values allowed)
Unregister
----------
Command: ``app_api:app:unregister [--rm-data] [--force] [--silent] [--] <appid>``
To remove an ExApp, you can use the unregister command.
By default, this command does *not* delete the ExApp's persistent storage (data volume) to avoid accidental removal of any user data.
Arguments
*********
* ``appid`` - unique name of the ExApp (e.g. ``app_python_skeleton``, must be the same as in deployed container)
Options
*******
* ``--rm-data`` *[optional]* - remove ExApp persistent storage (data volume)
* ``--force`` *[optional]* - continue removal even if some error occurs
* ``--silent`` *[optional]* - print a minimum of information, display only some errors, if any
Update
------
Command: ``app_api:app:update [--info-xml INFO-XML] [--force-update] [-e|--enabled] [--] <appid>``
ExApp will be updated if there is a new version available.
Arguments
*********
* ``appid`` - unique name of the ExApp (e.g. ``app_python_skeleton``, must be the same as in deployed container)
Options
*******
* ``--info-xml INFO-XML`` *[optional]* - path to info.xml file (url or local absolute path)
* ``-e|--enabled`` *[optional]* - enable ExApp after update
Enable
------
Command: ``app_api:app:enable <appid>``
Disable
-------
Command: ``app_api:app:disable <appid>``
List ExApps
-----------
Command: ``app_api:app:list``
ListExApps command will show all ExApps:
.. code-block::
ExApps:
appid (Display Name): version [enabled/disabled]
to_gif_example (To Gif Example): 1.0.0 [enabled]
upscaler_example (Upscaler Example): 1.0.0 [enabled]

View File

@ -0,0 +1,99 @@
.. _test_deploy:
Test Deploy Daemon
------------------
You can test each Daemon configuration deployment from the AppAPI Admin settings.
.. image:: ./img/test_deploy.png
Status Checks
^^^^^^^^^^^^^
The Deploy test installs a `test-deploy <https://github.com/nextcloud/test-deploy>`_ ExApp
to verify each step of the deployment process, including a hardware support check -
for each compute device, there is a separate Docker image.
.. note::
The Test Deploy ExApp container is not removed after the test as it's needed for logs and status checks.
You can remove it after testing from the Apps page.
The Docker images are also not removed from the Daemon; you can clean up unused images with the ``docker image prune`` command.
.. image:: ./img/test_deploy_modal_4.png
Register
********
The Register step is the first step; it checks if the ExApp is registered in Nextcloud.
Image Pull
**********
The Image Pull step downloads the ExApp Docker image.
Possible errors:
- Image not found (e.g. not public, no image found for your hardware architecture)
- Image pull failed (e.g., due to network issues)
- Image pull timeout
- Your Docker Socket Proxy is not configured correctly and blocks access to this Docker Engine API
Container Started
*****************
The Container Started step verifies that the ExApp container is created and started successfully.
Possible errors:
- Container failed to start with GPU support (may be missing or misconfigured)
- For NVIDIA, refer to the `NVIDIA Docker configuration docs <https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html>`_.
- For AMD, refer to the `ROCm Docker configuration docs <https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html>`_.
- The ExApp issue during startup (e.g. not enough memory)
Heartbeat
*********
The Heartbeat step checks if the container's health check is finished and the container is healthy.
The ExApp might have additional pre-configuration logic during this step.
Possible errors:
- ExApp failed to start a web server, e.g., if the port is already in use (this should be visible in the container logs)
- ExApp heartbeat_count keeps increasing, this may indicate that the ExApp couldn't start properly
- Nextcloud can not reach the ExApp container, e.g.,
* due to a network issue or a firewall (this should be visible in the server logs or the firewall logs)
* due to a "http" protocol deploy daemon. In this case, the ExApp's container listens on localhost (127.0.0.1 or ::1) which might not be reachable from the Nextcloud server and you might want to listen on a different IP address. See ``OVERRIDE_APP_HOST`` in :ref:`Additional options <additional_options_list>` in the Deploy Daemon form. This issue can be identified using this command: ``lsof -i -P -n | grep LISTEN``
Init
****
The Init step checks if the ExApp is initialized and ready to use.
During the init step, the ExApp may perform downloads of extra stuff required for it.
Possible errors:
- Initialization failed (e.g., due to network issues or timeout)
Enabled
*******
The Enabled step checks if the ExApp is enabled and ready to use.
During this step, the ExApp registers all the required and available APIs of the Nextcloud AppFramework.
Possible errors:
- ExApp did not respond to the enable request
- ExApp failed to enable due to a failure in registering AppAPI Nextcloud AppFramework APIs (this should be visible both in the container logs and in the Nextcloud logs if there are any errors)
Download Logs
^^^^^^^^^^^^^
You can download the logs of the last test deploy attempt container.
.. note::
Downloading Docker container logs is only possible for containers using the json-file or journald logging drivers.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 26.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 127 87.2" style="enable-background:new 0 0 127 87.2;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path id="path1052" class="st0" d="M63.6,3.8C51,3.8,40.3,12.3,37,23.9c-2.9-6.1-9.1-10.4-16.3-10.4c-9.9,0-18,8.1-18,18 c0,9.9,8.1,18,18,18c7.2,0,13.4-4.3,16.3-10.4c3.3,11.6,14,20.1,26.6,20.1c12.5,0,23.1-8.4,26.5-19.8c2.9,6,9.1,10.2,16.2,10.2 c9.9,0,18-8.1,18-18c0-9.9-8.1-18-18-18c-7.1,0-13.2,4.2-16.2,10.2C86.7,12.2,76.1,3.8,63.6,3.8z M63.6,14.3 c9.5,0,17.1,7.6,17.1,17.1c0,9.5-7.6,17.1-17.1,17.1c-9.5,0-17.1-7.6-17.1-17.1C46.5,21.9,54.1,14.3,63.6,14.3z M20.7,24 c4.2,0,7.4,3.3,7.4,7.4c0,4.2-3.3,7.4-7.4,7.4c-4.2,0-7.4-3.3-7.4-7.4C13.3,27.3,16.6,24,20.7,24z M106.3,24c4.2,0,7.4,3.3,7.4,7.4 c0,4.2-3.3,7.4-7.4,7.4c-4.2,0-7.4-3.3-7.4-7.4C98.8,27.3,102.1,24,106.3,24z"></path>
<path id="path1174" class="st0" d="M15.4,67.4c-0.4,0-0.5,0.2-0.5,0.6v14.6c0,0.4,0.2,0.5,0.5,0.5h0.4c0.4,0,0.5-0.2,0.5-0.5V70.4 l7.9,12.3c0,0.1,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0.1,0,0.1,0.1c0,0,0,0,0.1,0c0,0,0,0,0,0c0.1,0,0.1,0,0.2,0h0.4 c0.4,0,0.5-0.2,0.5-0.5V68c0-0.4-0.2-0.6-0.5-0.6h-0.4c-0.4,0-0.6,0.2-0.6,0.6v12.1l-7.9-12.3c0,0-0.1-0.1-0.1-0.1 c-0.1-0.1-0.2-0.2-0.4-0.2L15.4,67.4z M110.8,67.6c-0.4,0-0.2,0.2-0.2,0.6v5c0,0.5,0,0.9,0,0.9h0c0,0-1-2.2-3.6-2.2 c-2.9,0-5,2.3-4.9,5.7c0,3.4,1.9,5.8,4.8,5.8c2.9,0,3.8-2.3,3.8-2.3h0.1c0,0-0.1,0.3-0.1,0.7v0.9c0,0.4,0.2,0.5,0.6,0.5h0.4 c0.4,0,0.5-0.2,0.5-0.6V68.2c0-0.4-0.6-0.6-0.9-0.6H110.8z M71.8,67.7c-0.4,0-0.1,0.2-0.1,0.6v12.3c0,2.4,1.6,2.7,2.5,2.7 c0.4,0,0.6-0.2,0.6-0.6v-0.4c0-0.4-0.2-0.5-0.5-0.5c-0.5-0.1-1.2-0.2-1.2-1.6v-12c0-0.4-0.6-0.6-0.9-0.6L71.8,67.7z M53.8,69 c-0.4,0-0.6,0.2-0.6,0.6v2.6v1.3v5.7c0,2.6,1.5,4.1,3.9,4.1c0.5,0,0.6-0.1,0.6-0.5v-0.3c0-0.4-0.1-0.5-0.6-0.6 c-0.9-0.1-2.4-0.4-2.4-2.9v-5.5h2.3c0.4,0,0.6-0.1,0.6-0.5v-0.2c0-0.4-0.2-0.6-0.6-0.6h-2.3v-2.6c0-0.4-0.1-0.6-0.5-0.6L53.8,69z M33.8,71.8c-3,0-5.4,2.2-5.5,5.8c0,3.4,2.5,5.8,5.8,5.8c1.8,0,3.1-0.8,3.7-1.2c0.3-0.2,0.3-0.5,0.2-0.7l-0.2-0.2 c-0.2-0.3-0.4-0.4-0.7-0.2c-0.5,0.4-1.5,1-2.9,1c-2.3,0-4.2-1.6-4.3-4.4h8c0.3,0,0.6-0.3,0.6-0.6C38.4,73.9,36.8,71.8,33.8,71.8z M65,71.8c-3.3,0-5.8,2.4-5.8,5.8c0,3.4,2.5,5.8,5.8,5.8c2,0,3.4-1,3.9-1.4c0.3-0.3,0.3-0.5,0.1-0.8L68.8,81 c-0.2-0.3-0.4-0.4-0.7-0.2C67.6,81.3,66.6,82,65,82c-2.4,0-4.3-1.8-4.3-4.4c0-2.7,1.9-4.5,4.3-4.5c1.3,0,2.3,0.7,2.8,1 c0.3,0.2,0.6,0.2,0.8-0.1l0.2-0.3c0.3-0.3,0.2-0.6-0.1-0.8C68.1,72.6,66.9,71.8,65,71.8L65,71.8z M81.9,71.8 c-3.2,0-5.8,2.5-5.8,5.7c0,3.3,2.6,5.8,5.8,5.8c3.2,0,5.8-2.5,5.8-5.8C87.8,74.3,85.1,71.8,81.9,71.8z M49.5,72 c-0.1,0-0.2,0.1-0.4,0.2l-2,2.4l-1.5,1.8l-2.3-2.7L42,72.2c-0.1-0.1-0.2-0.2-0.4-0.2c-0.1,0-0.3,0-0.4,0.2l-0.3,0.3 c-0.3,0.2-0.3,0.5,0,0.7l2,2.4l1.7,2l-2.5,2.9c0,0,0,0,0,0L40.9,82c-0.2,0.3-0.2,0.6,0.1,0.8l0.3,0.3c0.3,0.2,0.5,0.2,0.7-0.1 l2-2.4l1.5-1.8l2.3,2.7c0,0,0,0,0,0l1.2,1.5c0.2,0.3,0.5,0.3,0.8,0.1l0.3-0.3c0.3-0.2,0.3-0.5,0-0.7l-2-2.4l-1.7-2l2.5-2.9 c0,0,0,0,0,0l1.2-1.5c0.2-0.3,0.2-0.6-0.1-0.8l-0.3-0.3C49.7,72,49.6,71.9,49.5,72L49.5,72z M90.7,72c-0.4,0-0.5,0.2-0.5,0.6v6.5 c0,2.9,2.1,4.3,4.7,4.3c2.6,0,4.7-1.4,4.7-4.3v-6.5c0.1-0.4-0.1-0.6-0.5-0.6h-0.4c-0.4,0-0.6,0.2-0.6,0.6v6.1 c0,1.7-1.1,3.3-3.3,3.3c-2.1,0-3.3-1.6-3.3-3.3v-6.1c0-0.4-0.2-0.6-0.6-0.6L90.7,72z M33.8,73c1.6,0,3,1.2,3.1,3.5h-6.9 C30.3,74.3,31.9,73,33.8,73z M81.9,73.1c2.4,0,4.3,1.9,4.3,4.4c0,2.6-1.9,4.5-4.3,4.5c-2.4,0-4.3-2-4.3-4.5 C77.6,75.1,79.6,73.1,81.9,73.1z M107.1,73.1c2.4,0,3.5,2.2,3.5,4.4c0,3.2-1.7,4.5-3.6,4.5c-2.1,0-3.5-1.8-3.5-4.5 C103.5,74.8,105.1,73.1,107.1,73.1z"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Some files were not shown because too many files have changed in this diff Show More