Thanks for changing the AIO documentation @szaimen. It is true that even nextcloud’s basic browser uploader in standard configuration splits large files into 10MB chunks, except for the public file drop situation.
This is great because the data transfer part of an upload is very unlikely to time out then. A client could even be smart enough that if a single chunk transfer times out it would be retried with a smaller chunk size, which I believe the desktop client already does.
Now once the chunks are transferred to nextcloud, they are re-assembled into a single file. Depending on the storage used as well as the number and size of the chunks, this process can take quite some time. The re-assembling must be finished within the timeout set for a single HTTP request. Probably since nextcloud doesn’t send any data to a client during a lengthy re-assembly process, proxies and/or clients are likely to discard the connection, typically to protect from (unintentional) DOS. Discarding the connection will fail the upload. The time for re-assembly can increase massively if nextcloud is configured to use networked storage (like iSCSI, NFS, SFTP, S3) and moves chunks and final file in between remote storage and local temp storage several times.
As a user, currently I have two choices to transfer a large file:
- Use a client that supports chunks (nextcloud browser interface or desktop client), but that will time out on the re-assembly part, after which even a successful upload is discarded.
- Use a client that doesn’t use chunked uploads (such as rclone or a WebDAV client), which will time out on the actual data transfer part.
Changing timeouts and chunk sizes in configuration can mitigate the problem under certain conditions, while degrading security and performance in some cases, but it is not a reliable solution. Ideally clients, and in particular the desktop client, would be able to wait for the re-assembling of chunks and register a successful upload.
Currently this doesn’t seem to be implemented, or is not working. This is a problem for users that have to deal with large files. It will hardly affect users that deal with typical office documents, but those working with audio, video, large documents for print, disk images, etc, will have a very hard time.
I’m one of the folks who has their nextcloud configuration cranked up to 11 regarding timeouts, request body sizes, etc, and still am unable to get my 8 GB digital video file uploaded, while I have no issues to, for instance, upload it to my peertube instance which is self-hosted just the same.
When exchanging large files with collaborators I would love to avoid having to use WeTransfer or DropBox or other proprietary and centralized tools, but sometimes I have to rely on them, because these services figured out how to deal with large files reliably. It would also be amazing for people currently using CreativeCloud to move to sovereign storage with nextcloud. But as things stand I would only be able to recommend nextcloud for collaborating on light office files.
![]()
-
- #1
Hi Everyone,
I am facing this issue when I’m trying to upload bigger files to my NextCloud. I definitely need to have the possibility to upload bigger files as I need to share files for video editing — it’s not uncommon to have 20GB+ files. How can I solve this issue? I saw some forum posts where they are talking about an apache issue but that shouldn’t be relevant to me. Not sure what information you need so I attached some screenshots to have some info about the system.
1. Running containers in Portainer
2. Basic system info (CPU, Kernel, etc.)
3. File systems
4. Disks
-
- Offizieller Beitrag
- #2
-
- #3
Thanks for the links, I checked them out but I’m not sure what to do with it to be honest. It seems like I will have some help during the weekend and hopefully he is going to help me figuring out what to do. I suspect I have some issues with encryption. I basically just want to turn it off but unfortunately it’s not as easy as it is to turn it on.
-
- #4
Maybe look at «step 9» at https://www.linuxbabe.com/ubun…tu-20-04-nginx-lemp-stack. Modify the size according to your needs. Maybe the files are in different locations, but if you look at the instructions above of the guide, you should be able to understand what should be in the files (i.e. how they should look like to know if you are working on the correct file).
⚠️ This issue respects the following points: ⚠️
- This is a bug, not a question or a configuration/webserver/proxy issue.
- This issue is not already reported on Github (I’ve searched it).
- Nextcloud Server is up to date. See Maintenance and Release Schedule for supported versions.
- I agree to follow Nextcloud’s Code of Conduct.
Bug description
Upload a file, say 400 MB. After upload progress bar completes, there is a Processing files step. After a minute or so, there is this error message Error when assembling chunks, status code 504 . Eventually, the file is uploaded and would show up in the web interface, yet, there is this error. Depending on the size of the file, clamscan takes 100% of the CPU.
Doesnt occur with smaller files say few MBs.
Steps to reproduce
- Upload a file, say 400 MB and wait the upload progress bar completes,
- Wait for the Processing files step
- After a minute or so, there is this error message Error when assembling chunks, status code 504
- Although the error message, the file is uploaded eventually after several minutes, depending on the file size. During this period all CPU time is taken by clamav
Expected behavior
No error message.
Installation method
Official All-in-One appliance
Operating system
Debian/Ubuntu
PHP engine version
PHP 7.4
Web server
Apache (supported)
Database engine version
PostgreSQL
Is this bug present after an update or on a fresh install?
Updated to a major version (ex. 22.2.3 to 23.0.1)
Are you using the Nextcloud Server Encryption module?
Encryption is Disabled
What user-backends are you using?
- Default user-backend (database)
- LDAP/ Active Directory
- SSO — SAML
- Other
Configuration report
## Server configuration detail **Operating system:** Linux 5.4.0-107-generic #121-Ubuntu SMP Thu Mar 24 16:04:27 UTC 2022 x86_64 **Webserver:** Apache (fpm-fcgi) **Database:** pgsql PostgreSQL 12.9 (Ubuntu 12.9-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit **PHP version:** 7.4.3 Modules loaded: Core, date, libxml, openssl, pcre, zlib, filter, hash, Reflection, SPL, session, standard, sodium, cgi-fcgi, PDO, xml, apcu, bcmath, bz2, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, gmp, iconv, imagick, imap, intl, json, ldap, exif, pdo_pgsql, pgsql, apc, posix, readline, shmop, SimpleXML, soap, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, Phar, Zend OPcache **Nextcloud version:** 23.0.3 - 23.0.3.2 **Updated from an older Nextcloud/ownCloud or fresh install:** **Where did you install Nextcloud from:** unknown <details><summary>Signing status</summary> Array ( ) </details> <details><summary>List of activated apps</summary> Enabled: - accessibility: 1.9.0 - activity: 2.15.0 - admin_audit: 1.13.0 - afterlogic: 2.0.3 - analytics: 4.2.1 - announcementcenter: 6.1.1 - appointments: 1.12.2 - apporder: 0.15.0 - calendar: 3.2.2 - checksum: 1.1.3 - circles: 23.1.0 - cloud_federation_api: 1.6.0 - cms_pico: 1.0.18 - comments: 1.13.0 - contacts: 4.1.0 - contactsinteraction: 1.4.0 - dashboard: 7.3.0 - dav: 1.21.0 - deck: 1.6.1 - event_update_notification: 1.5.0 - external: 3.10.2 - federatedfilesharing: 1.13.0 - federation: 1.13.0 - files: 1.18.0 - files_antivirus: 3.2.2 - files_external: 1.15.0 - files_pdfviewer: 2.4.0 - files_rightclick: 1.2.0 - files_sharing: 1.15.0 - files_trashbin: 1.13.0 - files_versions: 1.16.0 - files_videoplayer: 1.12.0 - firstrunwizard: 2.12.0 - forms: 2.5.0 - fulltextsearch_elasticsearch: 23.0.0 - groupfolders: 11.1.2 - integration_onedrive: 1.1.2 - logreader: 2.8.0 - lookup_server_connector: 1.11.0 - maps: 0.1.10 - music: 1.5.1 - nextcloud_announcements: 1.12.0 - notes: 4.3.1 - notifications: 2.11.1 - oauth2: 1.11.0 - onlyoffice: 7.3.2 - password_policy: 1.13.0 - photos: 1.5.0 - privacy: 1.7.0 - provisioning_api: 1.13.0 - ransomware_protection: 1.12.0 - recommendations: 1.2.0 - serverinfo: 1.13.0 - settings: 1.5.0 - sharebymail: 1.13.0 - support: 1.6.0 - survey_client: 1.11.0 - systemtags: 1.13.0 - tasks: 0.14.4 - text: 3.4.1 - theming: 1.14.0 - twofactor_backupcodes: 1.12.0 - twofactor_totp: 6.2.0 - unsplash: 1.2.4 - updatenotification: 1.13.0 - user_retention: 1.6.0 - user_status: 1.3.1 - viewer: 1.7.0 - weather_status: 1.3.0 - workflow_script: 1.8.0 - workflowengine: 2.5.0 Disabled: - encryption - user_ldap
Configuration (config/config.php)
{
"passwordsalt": "***REMOVED SENSITIVE VALUE***",
"secret": "***REMOVED SENSITIVE VALUE***",
"trusted_domains": [
"localhost",
"*.*.*.*",
"nextcloud",
"www.cloudcreator.eu"
],
"datadirectory": "***REMOVED SENSITIVE VALUE***",
"dbtype": "pgsql",
"version": "23.0.3.2",
"overwrite.cli.url": "https://nextcloud/",
"dbname": "***REMOVED SENSITIVE VALUE***",
"dbhost": "***REMOVED SENSITIVE VALUE***",
"dbport": "",
"dbtableprefix": "oc_",
"dbuser": "***REMOVED SENSITIVE VALUE***",
"dbpassword": "***REMOVED SENSITIVE VALUE***",
"installed": true,
"instanceid": "***REMOVED SENSITIVE VALUE***",
"log_type": "file",
"logfile": "/var/log/nextcloud/nextcloud.log",
"loglevel": "2",
"log.condition": {
"apps": [
"admin_audit"
]
},
"mail_smtpmode": "smtp",
"logtimezone": "Europe/Brussels",
"maintenance": false,
"updater.release.channel": "stable",
"memcache.local": "\OC\Memcache\APCu",
"default_phone_region": "BE",
"mail_domain": "***REMOVED SENSITIVE VALUE***",
"mail_from_address": "***REMOVED SENSITIVE VALUE***",
"mail_sendmailmode": "smtp",
"mail_smtpauthtype": "LOGIN",
"mail_smtpauth": 1,
"mail_smtphost": "***REMOVED SENSITIVE VALUE***",
"mail_smtpport": "25",
"mail_smtpname": "***REMOVED SENSITIVE VALUE***",
"mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
"theme": ""
}
Cron Configuration: Array
(
[backgroundjobs_mode] => cron
[lastcron] => 1649751002
)
External storages: yes
External storage configuration
Encryption: no
User-backends:
- OCUserDatabase
Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
### List of activated Apps
```shell
<details><summary>List of activated apps</summary>
Enabled:
- accessibility: 1.9.0
- activity: 2.15.0
- admin_audit: 1.13.0
- afterlogic: 2.0.3
- analytics: 4.2.1
- announcementcenter: 6.1.1
- appointments: 1.12.2
- apporder: 0.15.0
- calendar: 3.2.2
- checksum: 1.1.3
- circles: 23.1.0
- cloud_federation_api: 1.6.0
- cms_pico: 1.0.18
- comments: 1.13.0
- contacts: 4.1.0
- contactsinteraction: 1.4.0
- dashboard: 7.3.0
- dav: 1.21.0
- deck: 1.6.1
- event_update_notification: 1.5.0
- external: 3.10.2
- federatedfilesharing: 1.13.0
- federation: 1.13.0
- files: 1.18.0
- files_antivirus: 3.2.2
- files_external: 1.15.0
- files_pdfviewer: 2.4.0
- files_rightclick: 1.2.0
- files_sharing: 1.15.0
- files_trashbin: 1.13.0
- files_versions: 1.16.0
- files_videoplayer: 1.12.0
- firstrunwizard: 2.12.0
- forms: 2.5.0
- fulltextsearch_elasticsearch: 23.0.0
- groupfolders: 11.1.2
- integration_onedrive: 1.1.2
- logreader: 2.8.0
- lookup_server_connector: 1.11.0
- maps: 0.1.10
- music: 1.5.1
- nextcloud_announcements: 1.12.0
- notes: 4.3.1
- notifications: 2.11.1
- oauth2: 1.11.0
- onlyoffice: 7.3.2
- password_policy: 1.13.0
- photos: 1.5.0
- privacy: 1.7.0
- provisioning_api: 1.13.0
- ransomware_protection: 1.12.0
- recommendations: 1.2.0
- serverinfo: 1.13.0
- settings: 1.5.0
- sharebymail: 1.13.0
- support: 1.6.0
- survey_client: 1.11.0
- systemtags: 1.13.0
- tasks: 0.14.4
- text: 3.4.1
- theming: 1.14.0
- twofactor_backupcodes: 1.12.0
- twofactor_totp: 6.2.0
- unsplash: 1.2.4
- updatenotification: 1.13.0
- user_retention: 1.6.0
- user_status: 1.3.1
- viewer: 1.7.0
- weather_status: 1.3.0
- workflow_script: 1.8.0
- workflowengine: 2.5.0
Disabled:
- encryption
- user_ldap
«`
Nextcloud Signing status
No errors have been found.
Nextcloud Logs
https://www.cloudcreator.eu/index.php/s/4yj4bQTiHqqdntB
Additional info
No response
⚠️ This issue respects the following points: ⚠️
- This is a bug, not a question or a configuration/webserver/proxy issue.
- This issue is not already reported on Github (I’ve searched it).
- Nextcloud Server is up to date. See Maintenance and Release Schedule for supported versions.
- I agree to follow Nextcloud’s Code of Conduct.
Bug description
Upload a file, say 400 MB. After upload progress bar completes, there is a Processing files step. After a minute or so, there is this error message Error when assembling chunks, status code 504 . Eventually, the file is uploaded and would show up in the web interface, yet, there is this error. Depending on the size of the file, clamscan takes 100% of the CPU.
Doesnt occur with smaller files say few MBs.
Steps to reproduce
- Upload a file, say 400 MB and wait the upload progress bar completes,
- Wait for the Processing files step
- After a minute or so, there is this error message Error when assembling chunks, status code 504
- Although the error message, the file is uploaded eventually after several minutes, depending on the file size. During this period all CPU time is taken by clamav
Expected behavior
No error message.
Installation method
Official All-in-One appliance
Operating system
Debian/Ubuntu
PHP engine version
PHP 7.4
Web server
Apache (supported)
Database engine version
PostgreSQL
Is this bug present after an update or on a fresh install?
Updated to a major version (ex. 22.2.3 to 23.0.1)
Are you using the Nextcloud Server Encryption module?
Encryption is Disabled
What user-backends are you using?
- Default user-backend (database)
- LDAP/ Active Directory
- SSO — SAML
- Other
Configuration report
## Server configuration detail **Operating system:** Linux 5.4.0-107-generic #121-Ubuntu SMP Thu Mar 24 16:04:27 UTC 2022 x86_64 **Webserver:** Apache (fpm-fcgi) **Database:** pgsql PostgreSQL 12.9 (Ubuntu 12.9-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit **PHP version:** 7.4.3 Modules loaded: Core, date, libxml, openssl, pcre, zlib, filter, hash, Reflection, SPL, session, standard, sodium, cgi-fcgi, PDO, xml, apcu, bcmath, bz2, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, gmp, iconv, imagick, imap, intl, json, ldap, exif, pdo_pgsql, pgsql, apc, posix, readline, shmop, SimpleXML, soap, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, Phar, Zend OPcache **Nextcloud version:** 23.0.3 - 23.0.3.2 **Updated from an older Nextcloud/ownCloud or fresh install:** **Where did you install Nextcloud from:** unknown <details><summary>Signing status</summary> Array ( ) </details> <details><summary>List of activated apps</summary> Enabled: - accessibility: 1.9.0 - activity: 2.15.0 - admin_audit: 1.13.0 - afterlogic: 2.0.3 - analytics: 4.2.1 - announcementcenter: 6.1.1 - appointments: 1.12.2 - apporder: 0.15.0 - calendar: 3.2.2 - checksum: 1.1.3 - circles: 23.1.0 - cloud_federation_api: 1.6.0 - cms_pico: 1.0.18 - comments: 1.13.0 - contacts: 4.1.0 - contactsinteraction: 1.4.0 - dashboard: 7.3.0 - dav: 1.21.0 - deck: 1.6.1 - event_update_notification: 1.5.0 - external: 3.10.2 - federatedfilesharing: 1.13.0 - federation: 1.13.0 - files: 1.18.0 - files_antivirus: 3.2.2 - files_external: 1.15.0 - files_pdfviewer: 2.4.0 - files_rightclick: 1.2.0 - files_sharing: 1.15.0 - files_trashbin: 1.13.0 - files_versions: 1.16.0 - files_videoplayer: 1.12.0 - firstrunwizard: 2.12.0 - forms: 2.5.0 - fulltextsearch_elasticsearch: 23.0.0 - groupfolders: 11.1.2 - integration_onedrive: 1.1.2 - logreader: 2.8.0 - lookup_server_connector: 1.11.0 - maps: 0.1.10 - music: 1.5.1 - nextcloud_announcements: 1.12.0 - notes: 4.3.1 - notifications: 2.11.1 - oauth2: 1.11.0 - onlyoffice: 7.3.2 - password_policy: 1.13.0 - photos: 1.5.0 - privacy: 1.7.0 - provisioning_api: 1.13.0 - ransomware_protection: 1.12.0 - recommendations: 1.2.0 - serverinfo: 1.13.0 - settings: 1.5.0 - sharebymail: 1.13.0 - support: 1.6.0 - survey_client: 1.11.0 - systemtags: 1.13.0 - tasks: 0.14.4 - text: 3.4.1 - theming: 1.14.0 - twofactor_backupcodes: 1.12.0 - twofactor_totp: 6.2.0 - unsplash: 1.2.4 - updatenotification: 1.13.0 - user_retention: 1.6.0 - user_status: 1.3.1 - viewer: 1.7.0 - weather_status: 1.3.0 - workflow_script: 1.8.0 - workflowengine: 2.5.0 Disabled: - encryption - user_ldap
Configuration (config/config.php)
{
"passwordsalt": "***REMOVED SENSITIVE VALUE***",
"secret": "***REMOVED SENSITIVE VALUE***",
"trusted_domains": [
"localhost",
"*.*.*.*",
"nextcloud",
"www.cloudcreator.eu"
],
"datadirectory": "***REMOVED SENSITIVE VALUE***",
"dbtype": "pgsql",
"version": "23.0.3.2",
"overwrite.cli.url": "https://nextcloud/",
"dbname": "***REMOVED SENSITIVE VALUE***",
"dbhost": "***REMOVED SENSITIVE VALUE***",
"dbport": "",
"dbtableprefix": "oc_",
"dbuser": "***REMOVED SENSITIVE VALUE***",
"dbpassword": "***REMOVED SENSITIVE VALUE***",
"installed": true,
"instanceid": "***REMOVED SENSITIVE VALUE***",
"log_type": "file",
"logfile": "/var/log/nextcloud/nextcloud.log",
"loglevel": "2",
"log.condition": {
"apps": [
"admin_audit"
]
},
"mail_smtpmode": "smtp",
"logtimezone": "Europe/Brussels",
"maintenance": false,
"updater.release.channel": "stable",
"memcache.local": "\OC\Memcache\APCu",
"default_phone_region": "BE",
"mail_domain": "***REMOVED SENSITIVE VALUE***",
"mail_from_address": "***REMOVED SENSITIVE VALUE***",
"mail_sendmailmode": "smtp",
"mail_smtpauthtype": "LOGIN",
"mail_smtpauth": 1,
"mail_smtphost": "***REMOVED SENSITIVE VALUE***",
"mail_smtpport": "25",
"mail_smtpname": "***REMOVED SENSITIVE VALUE***",
"mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
"theme": ""
}
Cron Configuration: Array
(
[backgroundjobs_mode] => cron
[lastcron] => 1649751002
)
External storages: yes
External storage configuration
Encryption: no
User-backends:
- OCUserDatabase
Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
### List of activated Apps
```shell
<details><summary>List of activated apps</summary>
Enabled:
- accessibility: 1.9.0
- activity: 2.15.0
- admin_audit: 1.13.0
- afterlogic: 2.0.3
- analytics: 4.2.1
- announcementcenter: 6.1.1
- appointments: 1.12.2
- apporder: 0.15.0
- calendar: 3.2.2
- checksum: 1.1.3
- circles: 23.1.0
- cloud_federation_api: 1.6.0
- cms_pico: 1.0.18
- comments: 1.13.0
- contacts: 4.1.0
- contactsinteraction: 1.4.0
- dashboard: 7.3.0
- dav: 1.21.0
- deck: 1.6.1
- event_update_notification: 1.5.0
- external: 3.10.2
- federatedfilesharing: 1.13.0
- federation: 1.13.0
- files: 1.18.0
- files_antivirus: 3.2.2
- files_external: 1.15.0
- files_pdfviewer: 2.4.0
- files_rightclick: 1.2.0
- files_sharing: 1.15.0
- files_trashbin: 1.13.0
- files_versions: 1.16.0
- files_videoplayer: 1.12.0
- firstrunwizard: 2.12.0
- forms: 2.5.0
- fulltextsearch_elasticsearch: 23.0.0
- groupfolders: 11.1.2
- integration_onedrive: 1.1.2
- logreader: 2.8.0
- lookup_server_connector: 1.11.0
- maps: 0.1.10
- music: 1.5.1
- nextcloud_announcements: 1.12.0
- notes: 4.3.1
- notifications: 2.11.1
- oauth2: 1.11.0
- onlyoffice: 7.3.2
- password_policy: 1.13.0
- photos: 1.5.0
- privacy: 1.7.0
- provisioning_api: 1.13.0
- ransomware_protection: 1.12.0
- recommendations: 1.2.0
- serverinfo: 1.13.0
- settings: 1.5.0
- sharebymail: 1.13.0
- support: 1.6.0
- survey_client: 1.11.0
- systemtags: 1.13.0
- tasks: 0.14.4
- text: 3.4.1
- theming: 1.14.0
- twofactor_backupcodes: 1.12.0
- twofactor_totp: 6.2.0
- unsplash: 1.2.4
- updatenotification: 1.13.0
- user_retention: 1.6.0
- user_status: 1.3.1
- viewer: 1.7.0
- weather_status: 1.3.0
- workflow_script: 1.8.0
- workflowengine: 2.5.0
Disabled:
- encryption
- user_ldap
«`
Nextcloud Signing status
No errors have been found.
Nextcloud Logs
https://www.cloudcreator.eu/index.php/s/4yj4bQTiHqqdntB
Additional info
No response
Сегодня будем поднимать облако NextCloud в докер контейнере. Получив в результате отличную альтернативу всяким проприетарным продуктам типа яндекс диск, облако mail.ru, Dropbox, Google диск и т.д.
Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- Доменное имя. Можно бесплатный домен или поддомен
- Установленный Docker + Docker-Compose
- Установленный и настроенный Nginx Proxy Manager
- 30 — 45 минут времени
Бесплатный.
Умеет шифровать данные.
Умеет синхронизировать фаилы и папки.
Умеет работать по протоколу сетевой файловой системы WebDAV.
Обладает большим количеством плагинов и дополнений. Есть например плагин для хранения и структурирования ссылок под названием Bookmarks. Плагин аудиоплеер. Плагин для ведения базы паролей. Плагин для редактирования контактов — имена, номера телефонов, почта, дополнительные поля с быстрым поиском. Даже книга с рецептами присутствует)
Кроссплатформенный. Изначально работает в браузере, а так же существуют клиенты под Windows, Linux, MacOS, Android, iOS. Скачать клиент под необходимое п.о. можно отсюда.
Имеет очень гибкую систему управления пользователями и группами. Такой функционал очень пригодится бизнесу, можно разграничивать разные отделы и иметь полный контроль над всем.
При установке дополнения появляется возможность делиться фаилами через веб-ссылки.
Подготовка
Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила — хранить все контейнеры в одном месте. Создаём необходимые директории для Nextcloud
sudo mkdir -p /app/nextcloud/nextcloud/{apps,config,data}
Сделаем нашего пользователя (не root !) владельцем этой директории
sudo chown -R $USER:$USER /app/nextcloud/
Конфигурация и запуск
Перейдём в директорию, которую мы создавали выше
cd /app/nextcloud
Создадим фаил docker-compose.yml
nano docker-compose.yml
И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.
В конфиге обязательно обращаем внимание на строки PUID и PGID. Если нам это нужно, то в них мы можем вписать идентификатор пользователя и группы, от которого хотим запускать контейнер!
Для этого их необходимо раскомментировать. А сами ID можно посмотреть написав в терминале:
id
Самые распространённые идентификаторы 1000 и 1001
Следующим шагом мы придумываем логин и пароль для базы данных. И вписываем их в этот кусок конфига
— POSTGRES_DB=nextcloud
— POSTGRES_USER=nextcloud
— POSTGRES_PASSWORD=YOURPASSWORD
Далее. Если это необходимо, то можно изменить название сервиса базы данных postgres-nextcloud на любое угодное. Мы его потом будем вписывать при установке вместо localhost!
С настройкой закончили. Сохраняем конфиг.
Я советую периодически проверять DockerHub на наличие новых версий. На момент написания статьи актуальная версия была
nextcloud:23.0.1
Стартуем контейнер с NextCloud
sudo docker-compose up -d
Выхлоп в терминале должен быть как на скрине ниже.

Подключаем домен
Пришло время подключить домен к облаку. Делать это будем при помощи Nginx Proxy Manager, о котором я писал недавно в одноимённой статье.
В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.
- Домен либо поддомен
- Ip адрес
- Порт — 13370 (если вы не меняли его в docker-compose.yml)

Нажимаем Save и ждём примерно 60 секунд.
После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.
На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена — Request a new SSL Certificate


И нажимаем кнопку Save
Обратите внимание, что после нажатия кнопки Save не должно быть никаких ошибок. Если у вас всё же были какие то ошибки, скорее всего это связано с тем что у вас не успели обновиться записи в DNS, либо вы превысили лимиты(количество попыток) LetsEncrypt. В обоих случаях надо просто подождать и повторить попытку позже.
Если же у вас не выдало никаких ошибок с сертификатом, то сразу проверяем результат в браузере, открыв только что добавленный домен.
Мы должны увидеть страницу установки NextCloud

Установка NextCloud
Придумываем комбинацию из сложного логина и пароля для администратора облака и вписываем в соответствующие поля.
Так как мы хотим использовать PostgreSQL вместо SQLite, то нам нужно явно указать это. Для этого нажимаем Хранилище и база данных
Откроется окно с дополнительными настройками.
Каталог с данными /Data оставляем по умолчанию.
Выбираем пункт PostgreSQL. Нам необходимо вписать туда свои данные, которые находятся в фаиле docker-compose.yml.

Обратите внимание на пункт Хост базы данных, в котором по стандарту уже вписано localhost. В самом начале я говорил что можно поменять название сервиса для базы данных. Если вы меняли его то вписывайте своё название, если не меняли то вместо localhost вписывайте postgres-nextcloud
Внимательно проверяем корректность заполненных данных.
По желанию включаем или выключаем пункт Установить рекомендуемые приложения.
Нажимаем кнопку Завершить установку.

После установки нас перекидывает на страницу приветствия.

На этом установку NextCloud можно считать выполненной успешно.
Тюнинг NextCloud
Наверняка вы замечали что если в админ панели, пойти в Настройки во вкладку Система и пролистнуть до версии php то там выставлены ограничения.

Поменяв эти настройки мы можем в той или иной мере повлиять на производительность нашего облака.
Останавливаем контейнер
sudo docker-compose down
В папке рядом с docker-compose.yml создадим фаил nextcloud.ini
nano nextcloud.ini
С таким содержанием (подправьте под ресурсы вашего сервера!)
upload_max_filesize=16G
post_max_size=16G
memory_limit=2G
max_input_time 7200
max_execution_time 7200
Отлично, фаил добавили, теперь необходимо раскомментировать его же в docker-compose.yml
nano docker-compose.yml
просто убираем комментарий и приводим из такого вида
# — ./nextcloud.ini:/usr/local/etc/php/conf.d/nextcloud.ini
к такому виду
— ./nextcloud.ini:/usr/local/etc/php/conf.d/nextcloud.ini
Сохраняем. И стартуем
sudo docker-compose up -d
Проверяем

Теперь облако работает шустрее за счёт увеличения лимитов по оперативной памяти. Также мы увеличили время выполнения php скриптов. И увеличили размер максимально загружаемого фаила до 16 GB
Возможные проблемы
Иногда бывает что с релизами версия Php меняется. У некоторых неофициальных образов месторасположение папки с Php находится вообще в другом месте. В таком случае нам необходимо узнать точное расположение папки.
Для этого зайдём внутрь нашего контейнера
sudo docker exec -it nextcloud-23 bash
Находясь внутри контейнера пробуем попасть в папку с Php
cd /usr/local/etc/php/conf.d/
В некоторых неофициальных образах Nextcloud пхп находится тут: (напомню в данной статье мы ставим официальный образ)
cd /etc/php*
Далее действуем исходя из полученных результатов. Прописываем полный путь до папки с Php в docker-compose.yml если он у вас отличается. И далее всё заработает как надо.
Подключаем Redis
Наверняка вы заметили его в docker-compose.yml в самом низу.
Находясь в папке рядом с docker-compose.yml останавливаем наш контейнер
sudo docker-compose down
Редактируем фаил docker-compose.yml
nano docker-compose.yml
Тут нам нужно убрать комментарии из строк (поменяв пароль на свой)
— REDIS_HOST=redis-nextcloud
— REDIS_HOST_PASSWORD=YOURREDISPASSWORD
а так же полностью расскоментировать сервис redis-nextcloud
Пароль должен быть такой же как в предыдущих строчках которые мы раскомментировали:
redis-nextcloud:
image: redis:alpine
container_name: redis-nextcloud
command: redis-server —requirepass YOURREDISPASSWORD
restart: unless-stopped
Вновь стартуем наш контейнер
sudo docker-compose up -d
Для того чтобы мы могли проверить работу Redis, поставим необходимые пакеты
sudo apt install redis-tools
Проще всего проверить работу Redis, обратившись к нему по внутреннему адресу. Для этого сначала напишем
sudo docker ps
и найдём там id’шник redis или его имя. В нашем случае имя redis-nextcloud. Используем это имя в следующей команде:
sudo docker inspect redis-nextcloud

Тут нас интересует секция IPAddress»: XXX.XXX.XXX.XXX» она находится почти в самом низу.
Каждый раз этот ip будет разный. В моём случае это оказался 172.27.0.2
обратимся к нашему инстансу редиса по этому ip используя пароль который мы ему задавали
redis-cli -a YOURREDISPASSWORD -h 172.27.0.2 ping

В ответ мы получим PONG
Теперь посмотрим как общаются Nextcloud и Redis
redis-cli -a YOURREDISPASSWORD -h 172.27.0.2 monitor

Ответ должен быть OK
Переключимся на браузер с Nextcloud и обновим там страницу. В результате чего в логе мы увидим как побежали данные

На этом подключение Redis успешно завершено
Включаем принудительный режим https
Некоторые плагины требуют чтобы у нас был включен принудительный режим https. Например плагин для хранения паролей passwords.
Останавливаем контейнер
sudo docker-compose down
Теперь необходимо отредактировать фаил …/nextcloud/config/config.php
sudo nano nextcloud/config/config.php
После второй строки вставляем строку
‘overwriteprotocol’ => ‘https’,
Внимательно, соблюдая отступы, там по 2 пробела в начале каждой новой строки. Должно получиться вот так:

Стартуем наш контейнер и проверяем что всё ок
sudo docker-compose up -d

Увеличиваем размер чанков
Есть один неприятный баг. Проявляется этот баг при загрузке больших фаилов, пишет ошибку 504 и не загружает фаил
Error when assembling chunks, status code 504
Судя по тикету на гитхабе — его не могут зафиксить уже несколько лет.
Покопавшись, вроде получилось его побороть. Дело в том что NextCloud из коробки делит фаилы на чанки(chunks). По стандарту размер одного чанка равен 10 MB
Когда мы грузим большой фаил, видимо всё упирается в производительность диска и таймауты php и что то не срабатывает как надо.
Для улучшения картины в лучшую сторону мы увеличим раздел чанков. Для этого необходимо зайти внутрь нашего контейнера и послать ему необходимые параметры
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ config:app:set files max_chunk_size —value 20971520
Тут необходимо вместо nextcloud-23 вписать имя вашего контейнера с NextCloud. Вот так:

Я пробовал на фаиле в 4 GB и данное сообщение не появлялось, однако, на фаиле в 8 GB оно появлялось, но через какое то время фаил всё равно загружался и был полностью рабочим.
Чиним cron
Nextcloud использует специальный фаил cron.php для того чтобы инициировать такие процессы как сканирование фаилов, музыки, очистку мусора и другие. Желательно выполнять этот фаил каждые 5-10 минут.
Используя NextCloud в докере из коробки к сожалению эта фича не работает и приходится использовать режим AJAX, который выполняет фаил cron.php при загрузке каждой страницы. Это создаёт дополнительную нагрузку на сервер.
Мы делегируем выполнение этого функционала, штатному cron. Для этого сначала установим его
sudo apt install cron
Проверим что он запущен и работает
sudo systemctl status cron

Мы будем запускать наше задание от root поэтому пишем
sudo crontab -e
В самую нижнюю строчку добавляем наше задание
*/5 * * * * sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/cron.php

Сохраняем и выходим. Ждём 5 минут и проверяем результат

Обновление Nextcloud
Периодически для Nextcloud выходят обновления, рассмотрим как правильно обновиться.
Внимание! Все обновления Nextcloud стоит делать последовательно, не перескакивая через версию. Например если у Вас была версия 21.x.x то чтобы обновиться на версию 23.x.x необходимо сначала обновить nextcloud до версии 22.x.x и только потом уже до 23.x.x !
Переходим в директорию с nextcloud
cd /app/nextcloud
Тушим контейнер
sudo docker-compose down
Посмотрим на структуру фаилов и директорий
ls

Создаём папку, куда свалим нашу предыдущую рабочую версию
mkdir old
Скопируем в эту директорию все фаилы от предыдущей рабочей версии
sudo cp -r DB docker-compose.yml nextcloud nextcloud.ini old
Редактируем фаил docker-compose.yml заменив в нём версию образа nextcloud на более новую. Версии можно посмотреть в DockerHub
nano docker-compose.yml

Поднимаем контейнер с новой версией
sudo docker-compose up -d
Открываем Nextcloud в браузере. Нас приветствует мастер обновления.

Запускаем обновление

Ожидаем какое то время. В результате визард предложит перейти в nextcloud, что завершит процедуру обновления.

Кстати на скрине видно что были отключены некоторые плагины. В действительности после того как я перешёл в облако, все эти плагины были включены и работали, несмотря на то что в сообщении написано что они не совместимы.
Обновление на новую версию завершено.
Полезные команды
Рассмотрим специальные служебные команды для NextCloud. Все эти команды подаются в качестве параметров на occ.php
Во всех приведённых ниже командах не забудьте заменить имя контейнера nextcloud-23 на своё
Плагины
Отобразить список плагинов
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:list
Установить плагин
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:install files_mindmap
Удалить плагин
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:remove files_mindmap
Включить плагин. Например Activity
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:enable activity
Отключить плагин. Например Activity
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:disable activity
Обновить все плагины (либо вместо —all указать нужный плагин)
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:update —all
Получить полный путь папки с плагином. Например плагина Mind Map
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ app:getpath files_mindmap
Пользователи
Отключить юзера
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ user:disable testuser
Включить юзера
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ user:enable testuser
Удалить юзера
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ user:delete testuser
Etc
Произвести сканирование на предмет наличия новых фаилов
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ files:scan —all
Произвести поиск недостоющих индексов в бд
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ db:add-missing-indices
Включить режим обслуживания
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ maintenance:mode —on
Отключить режим обслуживания
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ maintenance:mode —off
Отобразить список доверенных доменов
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ config:system:get trusted_domains
Добавить доверенный домен. В поле value вписываем ip либо домен
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/occ config:system:set trusted_domains 2 —value=http://127.0.0.1
Выполнить cron.php
sudo /usr/bin/docker exec -u www-data nextcloud-23 php -f /var/www/html/cron.php
Остальные команды можно найти тут
На этом всё. Все молодцы кто до сюда дошёл и у кого всё получилось!