Commit Graph
164 Commits
Author SHA1 Message Date
fc4bb548a4 aio-interface: fix nginx reverse proxy read timeout blocks AIO from starting consecutive containers (#8016)
* Fix: prevent nginx proxy read timeout from blocking AIO container startup

When AIO runs behind an nginx reverse proxy and a user clicks Start,
image pulls produce no streaming output for minutes at a time. nginx's
proxy_read_timeout fires, drops the upstream connection, and PHP then
aborts on the next write attempt (ignore_user_abort defaults to false),
leaving all containers after the first one never started.

Two fixes:
1. startStreamingResponse(): add ignore_user_abort(true) so PHP never
   terminates if the connection is already gone.
2. PullImage(): stream the Docker NDJSON pull response and write a
   "Pulling image" heartbeat at most once every 5 s, keeping the nginx
   connection alive.  Also surfaces Docker-level stream errors that the
   old buffered call silently ignored, guards against malformed
   newline-free responses with a 1 MB buffer limit, and unifies the
   duplicate catch-block retry logic.

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/4fd13605-63fb-4693-8a95-89ccec31f7d3

Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com>

* As heartbeat send a dot regularly

Rather than repeating the message, send a "magic" dot, which gets
appended to the previous line.

Previously the heartbeats weren't sent regulary because reading the data
into a buffer caused a lag.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Remove left-over constants

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Reduce timeout to stay within nginx's default timeout of 5s

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix duplicated library namespace inclusion

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Deal with preg_replace possibly returning null

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* update the version tag

Signed-off-by: Simon L. <szaimen@e.mail.de>

---------

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com>
Co-authored-by: Pablo Zmdl <pablo@nextcloud.com>
Co-authored-by: Simon L. <szaimen@e.mail.de>
2026-06-16 17:49:18 +02:00
copilot-swe-agent[bot] 1f91919dca fix(overlay): add background to log overlay and use monospace font
Fixes two issues from #8089:
- Add background-color to overlay-log so the container is visible
  before text starts appearing
- Use monospace font in overlay iframe content for better log readability
- Bump CSS cache version to v12
2026-06-08 08:11:59 +00:00
Copilot 6375921282 add eurooffice (#8052) 2026-06-04 12:42:02 +02:00
1f94bc8af0 aio-interface: extract Nextcloud latest-major upgrade logic to dedicated script and add UI trigger button (#7988)
* Extract Nextcloud major upgrade logic to script and add UI button

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/8cd11b09-5073-4e27-8e59-9afffaf96c1f

Rename sendNotification to execCommandInContainer and reuse for upgrade method

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/88744552-9d64-4de2-9f64-5a98a5e3b200

Add $cmd array validation to execCommandInContainer

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/45d5228c-7834-404e-ba54-90b5c8c207c8

Apply suggestion from @szaimen

Signed-off-by: Simon L. <szaimen@e.mail.de>

Apply suggestion from @szaimen

Signed-off-by: Simon L. <szaimen@e.mail.de>

Apply suggestion from @szaimen

Signed-off-by: Simon L. <szaimen@e.mail.de>

Apply suggestion from @szaimen

Signed-off-by: Simon L. <szaimen@e.mail.de>

Set installLatestMajor when upgrade-to-latest-major button is clicked

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/7b977c85-9b74-4027-a536-152e49a01976

Extract getLatestMajorVersion() to avoid duplicating the version string

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/d5ec921f-8629-4f6e-949a-e8f89f1eb85f

Address PR review comments and hardcode updater channel to stable

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/c40941ff-2bf8-4a57-82be-2a0bd22b19a2

Restore sendNotification(), update cron files, extract getPlainStreamingCallback()

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/a5b6cd86-d278-4771-8a11-976c4a862966

Remove getPlainStreamingCallback, unify on getAddToStreamingResponseBody

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/15a4b815-076b-469f-95b2-c61df688a28d

Revert "Remove getPlainStreamingCallback, unify on getAddToStreamingResponseBody"

This reverts commit 6846c3a99549703121461f910cc26e6c116e0dc4.

* Refactor creating and using addToStreamingResponseBody()

This way we stick to having one implementation of the function, not three.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Read streamed output line by line, not via buffer

This way the code doesn't wait for a buffer to be filled, and we don't need to
implement logic ourselves that is provided by a present library already.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Ensure all HTTP requests are proxied, even with streaming

When requesting a streamed response, Guzzle apparently doesn't use curl, and thus we have to specify the unix socket proxy differently.

We can't specify it when creating the client, though (Guzzle complains).

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix syntax errors

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Remove broken code

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix readline line from streaming response

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Strip ANSI codes from command output before sending it to the browser

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Run PHP commands as www-data

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Properly compare version numbers

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix using memory limits from env

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix return type spec

This method always returns a closure, never null.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Use more general return type

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Avoid psalm complaint

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Fix namespace of return type

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>

* Apply suggestion from @szaimen

Signed-off-by: Simon L. <szaimen@e.mail.de>

---------

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Pablo Zmdl <pablo@nextcloud.com>
Co-authored-by: Simon L. <szaimen@e.mail.de>
2026-06-03 12:38:50 +02:00
Simon L. 71b2ae78c4 aio-interface: improve overlay log appearance (#8093) 2026-06-01 10:27:33 +02:00
Simon L. 2f7b98ddff preparations for the coming Hub 26 Spring release
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-05-28 11:42:03 +02:00
copilot-swe-agent[bot]andszaimen f178b49cc1 fix: apply dark mode in overlay iframe via storage events and apply-theme.js
Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/bc95f559-e0c7-4682-96fb-0799956a95c6

Co-authored-by: szaimen <42591237+szaimen@users.noreply.github.com>
2026-05-21 11:56:51 +00:00
copilot-swe-agent[bot]andszaimen b0c4f97ba2 aio-interface: improve overlay log appearance
Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/d51a2637-5128-4c8a-a18c-a86085d2cb88

aio-interface: do not cache the containers, logs and setup screen as it shows credentials

Signed-off-by: Simon L. <szaimen@e.mail.de>

fix: address PR review comments - remove inline script (CSP), use default font string

Agent-Logs-Url: https://github.com/nextcloud/all-in-one/sessions/62e290a3-94de-4988-aeb8-b577fec135a7
Co-Authored-By: szaimen <42591237+szaimen@users.noreply.github.com>
2026-05-19 16:30:33 +02:00
copilot-swe-agent[bot] 172c72f735 aio-interface: also reset the borg backup cache when resetting the backup path
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-04-25 15:06:58 +02:00
f25f588295 aio-interface: offer system prune button
Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-Authored-By: szaimen <42591237+szaimen@users.noreply.github.com>
Co-Authored-By: Pablo Zmdl <57864086+pabzm@users.noreply.github.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-04-17 14:33:53 +02:00
12e129f1f6 aio-interface: improve headers (#7690)
Signed-off-by: Zoey <zoey@z0ey.de>
Signed-off-by: Simon L. <szaimen@e.mail.de>
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
Co-authored-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: Pablo Zmdl <pablo@nextcloud.com>
2026-04-16 17:20:50 +02:00
Pablo Zmdl b67b3bbe15 Also punish failed logins via GET and URL-token
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-04-07 15:08:01 +02:00
Pablo Zmdl bc968d18e6 Punish failed login attempts with a delay
This is a very simple means against bots, until we find the time to discuss
and implement something better.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-04-07 14:52:55 +02:00
Pablo Zmdl b169790488 Fix streaming responses in Caddy
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-03-18 17:53:54 +01:00
Simon L. 0cb0d86471 Merge pull request #7705 from nextcloud/enh/noid/show-stop-and-starting-state
DockerController: refactor `StartBackupContainerBackup` to show the stopping and starting state
2026-03-16 18:03:25 +01:00
Simon L. dfe7eb7ec1 Merge pull request #7721 from nextcloud/enh/7664/backup-restore
DockerController: refactor `StartBackupContainerRestore` to show the stopping and starting state
2026-03-12 18:35:47 +01:00
Simon L. b0969d9644 Merge pull request #7723 from nextcloud/enh/7664/backup-list
DockerController: refactor `StartBackupContainerList` to show the starting state
2026-03-12 18:24:09 +01:00
Simon L.andPablo Zmdl 1e23c1a6dd apply suggestions by @pabzm
Co-authored-by: Pablo Zmdl <57864086+pabzm@users.noreply.github.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-12 16:20:17 +01:00
Simon L. c4f4ff22c9 Merge pull request #7724 from nextcloud/enh/7664/backup-check-repair
DockerController: refactor `StartBackupContainerCheckRepair` show the starting state
2026-03-12 16:13:36 +01:00
Simon L. 49d743c17c DockerController: refactor StartBackupContainerCheckRepair show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:13:21 +01:00
Simon L. c45913a6ff DockerController: refactor StartBackupContainerListto show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:07:46 +01:00
Simon L. 7f394f5297 DockerController: refactor StartBackupContainerTest to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 18:03:05 +01:00
Simon L. e561fad2af DockerController: refactor StartBackupContainerRestore to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-09 17:55:50 +01:00
Simon L. 6e87758ba9 DockerController: refactor StartBackupContainerBackup to show the stopping and starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:42:08 +01:00
Simon L. 4b1c7286bc Merge pull request #7675 from nextcloud/enh/7664/backup-check
DockerController: refactor `StartBackupContainerCheck` to show the starting state
2026-03-06 10:38:39 +01:00
Simon L. b248710803 DockerController: refactor StartBackupContainerCheck to show the starting state
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:16:50 +01:00
Simon L. 9040ccdab8 DockerController: refactor stopping of containers to show the current process
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:16:08 +01:00
Simon L. 23f5ae2a10 Dockercontroller: refactor streaming responses into dedicated functions and use them in StartWatchtowerContainer method
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-03-06 10:02:47 +01:00
Pablo Zmdl 680a2fefcb Auto-load only new log data
This is way more complicated that just reloading the log file, but also
way nicer.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-02-25 16:45:41 +01:00
Pablo Zmdl 862a17ab4e Auto-reload the log view, and scroll to bottom.
Includes a button to disable the automatic reloading (useful when inspecting some lines in the middle).

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-02-20 14:22:57 +01:00
Oleksandr PiskunandSimon L. 987191ac14 feat(app-api): add HaRP container (#7493)
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: bigcat88 <bigcat88@icloud.com>
Signed-off-by: Oleksandr Piskun <oleksandr2088@icloud.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: Simon L. <szaimen@e.mail.de>
2026-02-18 13:45:44 +01:00
Simon L. 92372abfe7 Merge pull request #7458 from nextcloud/enh/6877/show-sub-steps
aio-interface: show sub-steps for starting containers
2026-02-18 13:45:04 +01:00
Pablo Zmdl 56f34703fa Increase cache busters for changed JS and CSS files
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-02-17 16:35:01 +01:00
Pablo Zmdl bf2d9ff394 Load container status into iframe as streamed response
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-02-17 16:35:01 +01:00
Simon L. bdda7c2178 Merge pull request #7541 from nextcloud/enh/noid/use-strict-types-in-php
add `declare(strict_types=1);` to all php files
2026-02-13 10:54:23 +01:00
Simon L. 9652e39be2 aio-interface: offer checkbox to install the new hub release
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-02-13 09:33:03 +01:00
Simon L. eba86c3ad1 add declare(strict_types=1); to all php files
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-02-03 13:25:53 +01:00
Pablo Zmdl 82cbbe1829 Wrap ConfigurationController#SetConfig into a "transaction"
This avoids a lot of subsequent writes and reads from the file system, because
now only commitTransaction() actually writes the config file.

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-02-02 10:17:57 +01:00
Pablo Zmdl bf43a6dae6 Lower case method names in ConfigurationManager
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 16:51:36 +01:00
Pablo Zmdl c4aa148bff Camelize property aio_community_containers => aioCommunityContainers
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:57 +01:00
Pablo Zmdl b499001501 Camelize property collabora_additional_options => collaboraAdditionalOptions
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:57 +01:00
Pablo Zmdl 5373471ed8 Camelize property collabora_dictionaries => collaboraDictionaries
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:57 +01:00
Pablo Zmdl 2425a07772 Camelize property install_latest_major => installLatestMajor
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 68f811b25f Camelize property AIO_URL => aioUrl
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 62a21dd34a Camelize property instance_restore_attempt => instanceRestoreAttempt
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl dd5d51cb2a Camelize property AIO_TOKEN => aioToken
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 27fd1e82ab Turn install_latest_major property into a string so we can save a version string or number
I chose a string instead of an integer so we have more freedom what to
actually save (maybe we want to include minor version digits at one point).

Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 76d475f2b2 Replace setMultiple() by startTransaction() and commitTransaction()
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 77bec5898f Type for Closure argument
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00
Pablo Zmdl 9c9ad02f8a Set multiple attributes at once
Signed-off-by: Pablo Zmdl <pablo@nextcloud.com>
2026-01-28 11:51:56 +01:00