Skip to content

feat!: remove Docker Socket Proxy daemons - #1209

Open
oleksandr-nc wants to merge 3 commits into
mainfrom
feat/remove-docker-socket-proxy
Open

oleksandr-nc wants to merge 3 commits into
mainfrom
feat/remove-docker-socket-proxy

Conversation

@oleksandr-nc

@oleksandr-nc oleksandr-nc commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Docker Socket Proxy has been deprecated since AppAPI 34: occ, the admin settings and the daemon log all announced its removal. HaRP is now the only way to deploy ExApps on Docker, so AppAPI no longer needs its own Docker code. That code created, started and stopped DSP containers itself, and installed CA certificates by starting the container, running commands in it, stopping it and starting it again.

Changes

  • A docker-install daemon requires HaRP. occ app_api:daemon:register and the admin settings refuse Docker Socket Proxy daemons and daemons on a Docker socket, so a script that registers one again now fails instead of skipping it. AIO auto-registration only warns when AIO still runs its Docker Socket Proxy. The --haproxy_password option is gone.
  • Existing Docker Socket Proxy daemons stay registered, and Nextcloud keeps reaching their ExApps directly, so nothing stops working on upgrade. AppAPI no longer talks to these daemons:
    • Install, update, test deploy and logs answer that the daemon is no longer supported.
    • Enable checks the ExApp's heartbeat once instead of starting its container, and fails at once with the reason when the ExApp does not answer.
    • Disable leaves the container running.
    • Uninstall removes the ExApp from AppAPI but keeps its container and data volume.
    • The daemons can only be removed; editing them or their registry mappings is refused.
  • A new setup check names the Docker Socket Proxy daemons, and the deploy daemon check reports a Docker Socket Proxy default daemon. Both link to the migration steps in the HaRP README.
  • To move an ExApp, uninstall it keeping its data and install it on a HaRP daemon on the same Docker host. HaRP uses the same container and volume names, so it replaces the old container and keeps the data.
  • The admin settings drop the Docker Socket Proxy templates and the HTTPS switch, and show the HaRP switch for manual install daemons only.
  • GET /apps/uninstall/{appId} loses removeContainer, which only the Docker Socket Proxy path read.
  • The Docker deploy CI jobs run on HaRP. The Docker Socket Proxy jobs are removed, and so are the Docker socket jobs that HaRP jobs already cover. The Makefile with its Docker Socket Proxy targets is removed.

Merge with nextcloud/HaRP#163: the setup checks link to the README section it adds.

Signed-off-by: Oleksandr Piskun <oleksandr2088@icloud.com>
@oleksandr-nc
oleksandr-nc force-pushed the feat/remove-docker-socket-proxy branch from 70fa038 to 0ceffc4 Compare November 13, 2026 12:43
@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Docker deployments now use HaRP, and direct Docker Engine deployment paths have been removed. Daemon registration and updates reject Docker Socket Proxy configurations. Existing ExApps on those configurations have restricted operations, and uninstall keeps their containers and data volumes. Setup checks and administration screens identify unsupported configurations. Deployment workflows and tests use HaRP. Documentation and the uninstall API description reflect the changed support and options.

Merge Risk: Moderate · up to d1f48

Existing CUDA ExApps on CDI-only Podman hosts may lose GPU access when migrated to HaRP, and the release notes do not say that uninstalling a Docker Socket Proxy ExApp keeps its container and data volume. The core Docker Socket Proxy removal and refusal behavior looks coherent, and the registry error handling is fixed. Resolve or explicitly accept the GPU migration gap before merging.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the main change: removing Docker Socket Proxy daemon support. The changeset removes DSP management code, refuses new DSP registrations, and makes HaRP the Docker deployment path. The t…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description explains the removal of Docker Socket Proxy (DSP) code from AppAPI and the move of Docker deployments to HaRP. It lists concrete changes that match the changeset: the daemon registrati…
Full details: Title check

Explanation

The title names the main change: removing Docker Socket Proxy daemon support. The changeset removes DSP management code, refuses new DSP registrations, and makes HaRP the Docker deployment path. The title is short and specific. The breaking-change marker (!) fits the uninstall API and daemon registration changes.

Full details: Description check

Explanation

The description explains the removal of Docker Socket Proxy (DSP) code from AppAPI and the move of Docker deployments to HaRP. It lists concrete changes that match the changeset: the daemon registration refusal, the upgrade behavior for existing DSP daemons (install, update, enable, disable, uninstall), the new setup check, the removed --haproxy_password and removeContainer parameters, the admin settings changes, and the CI job and Makefile removals. The description is specific and on-topic, so it passes the lenient relatedness check.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 858bfd4e-9878-4ff1-8d81-28ff4450045a
Commits

Reviewing files that changed from the base of the PR and between 0ceffc4 and d1f4883.

Files ignored due to path filters: 1

  • js/app_api-adminSettings.js.map is excluded by !**/*.map
Files selected for processing: 6

  • js/app_api-adminSettings.js
  • lib/Controller/DaemonConfigController.php
  • lib/Service/AppAPIService.php
  • src/components/DaemonConfig/ManageDaemonConfigModal.vue
  • tests/php/Controller/DaemonConfigControllerTest.php
  • tests/php/Service/AppAPIServiceTest.php

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to GitHub limitations.

⚠️ Outside diff range comments (1)

Minor · Handle error arrays from the Docker registry service methods. · DaemonConfigController.php:404

lib/Controller/DaemonConfigController.php:404
Minor · Stability & Availability · Quick win

Handle error arrays from the Docker registry service methods.

addDockerRegistry and removeDockerRegistry return ['error' => ...] for Docker Socket Proxy daemons. The controller checks only for null. It then calls jsonSerialize() on the array, which raises a PHP Error. The endpoint returns a server error instead of the unsupported-daemon message. Invalid registry input follows the same failure path.

Return the service error array before serialization. The existing 500 status matches the declared array{error: string} response.

Suggested fix

In addDaemonDockerRegistry:

 		$daemonConfig = $this->daemonConfigService->addDockerRegistry($daemonConfig, $registryMap);
+		if (is_array($daemonConfig)) {
+			return new JSONResponse($daemonConfig, Http::STATUS_INTERNAL_SERVER_ERROR);
+		}
 		if ($daemonConfig === null) {

In removeDaemonDockerRegistry:

 		$daemonConfig = $this->daemonConfigService->removeDockerRegistry($daemonConfig, $registryMap);
+		if (is_array($daemonConfig)) {
+			return new JSONResponse($daemonConfig, Http::STATUS_INTERNAL_SERVER_ERROR);
+		}
 		if ($daemonConfig === null) {
Review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 96fc1aa0-fba1-4113-8ad8-b1dd6178ba58
Commits

Reviewing files that changed from the base of the PR and between 072b6b4 and 0ceffc4.

Files ignored due to path filters: 2

  • js/app_api-adminSettings.js.map is excluded by !**/*.map
  • src/constants/__snapshots__/daemonTemplates.spec.js.snap is excluded by !**/*.snap
Files selected for processing: 47

  • .github/workflows/tests-deploy.yml
  • .nextcloudignore
  • AGENTS.md
  • CHANGELOG.md
  • Makefile
  • README.md
  • appinfo/info.xml
  • js/app_api-adminSettings.js
  • lib/AppInfo/Application.php
  • lib/Command/Daemon/RegisterDaemon.php
  • lib/Command/ExApp/Register.php
  • lib/Command/ExApp/Unregister.php
  • lib/Command/ExApp/Update.php
  • lib/Controller/DaemonConfigController.php
  • lib/Controller/ExAppsPageController.php
  • lib/DeployActions/AIODockerActions.php
  • lib/DeployActions/DockerActions.php
  • lib/Migration/DataInitializationStep.php
  • lib/Service/AppAPIService.php
  • lib/Service/DaemonConfigService.php
  • lib/Service/ExAppsPageService.php
  • lib/Settings/Admin.php
  • lib/SetupChecks/DaemonCheck.php
  • lib/SetupChecks/DockerSocketProxyCheck.php
  • openapi-administration.json
  • openapi-full.json
  • src/components/AdminSettings.vue
  • src/components/DaemonConfig/DaemonConfig.vue
  • src/components/DaemonConfig/DaemonConfigDetailsModal.vue
  • src/components/DaemonConfig/ManageDaemonConfigModal.vue
  • src/constants/daemonTemplates.js
  • src/constants/daemonTemplates.spec.js
  • tests/php/Command/Daemon/RegisterDaemonTest.php
  • tests/php/Command/ExApp/RegisterTest.php
  • tests/php/Command/ExApp/UnregisterTest.php
  • tests/php/Command/ExApp/UpdateTest.php
  • tests/php/Controller/DaemonConfigControllerTest.php
  • tests/php/Controller/ExAppsPageControllerTest.php
  • tests/php/DeployActions/DockerActionsTest.php
  • tests/php/Migration/DataInitializationStepTest.php
  • tests/php/Service/AppAPIServiceTest.php
  • tests/php/Service/DaemonConfigServiceTest.php
  • tests/php/Service/ExAppsPageServiceTest.php
  • tests/php/Settings/AdminTest.php
  • tests/php/SetupChecks/DaemonCheckTest.php
  • tests/php/SetupChecks/DockerSocketProxyCheckTest.php
  • tests/test_occ_commands_docker.py
Files with no reviewable changes: 3

  • .nextcloudignore
  • Makefile
  • src/constants/daemonTemplates.js

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.

Comment thread CHANGELOG.md Resolved
Comment thread lib/DeployActions/DockerActions.php Resolved
Comment thread lib/Service/AppAPIService.php Resolved
…try errors

Signed-off-by: Oleksandr Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksandr Piskun <oleksandr2088@icloud.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant