fix(reverb): separate public Soketi port from internal Reverb port

Use SOKETI_PORT for Docker host bindings, keep Reverb on port 6001 internally, and stop install/upgrade scripts from overwriting public websocket port overrides.
This commit is contained in:
Andras Bacsai
2026-09-21 21:46:26 +02:00
parent 67dd34bce7
commit 3ce4209a2f
11 changed files with 37 additions and 53 deletions
-1
View File
@@ -11,5 +11,4 @@ REDIS_PASSWORD=coolify
PUSHER_APP_ID=coolify
PUSHER_APP_KEY=coolify
PUSHER_APP_SECRET=coolify
PUSHER_PORT=6001
PUSHER_BACKEND_PORT=6001
+2 -2
View File
@@ -25,11 +25,11 @@ services:
- /data/coolify/source/.env
ports:
- "${APP_PORT:-8000}:8080"
- "${PUSHER_PORT:-6001}:6001"
- "${SOKETI_PORT:-6001}:6001"
- "${TERMINAL_PORT:-6002}:6002"
expose:
- "${APP_PORT:-8000}"
- "${PUSHER_PORT:-6001}"
- "6001"
- "${TERMINAL_PORT:-6002}"
healthcheck:
test: curl --fail http://127.0.0.1:8080/api/health || exit 1
+2 -2
View File
@@ -51,11 +51,11 @@ services:
- IS_WINDOWS_DOCKER_DESKTOP=true
ports:
- "${APP_PORT:-8000}:8080"
- "${PUSHER_PORT:-6001}:6001"
- "${SOKETI_PORT:-6001}:6001"
- "${TERMINAL_PORT:-6002}:6002"
expose:
- "${APP_PORT:-8000}"
- "${PUSHER_PORT:-6001}"
- "6001"
- "${TERMINAL_PORT:-6002}"
healthcheck:
test: curl --fail http://localhost:8080/api/health || exit 1
-1
View File
@@ -10,7 +10,6 @@ REDIS_PASSWORD=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_PORT=6001
PUSHER_BACKEND_PORT=6001
ROOT_USERNAME=
+2 -2
View File
@@ -25,11 +25,11 @@ services:
- /data/coolify/source/.env
ports:
- "${APP_PORT:-8000}:8080"
- "${PUSHER_PORT:-6001}:6001"
- "${SOKETI_PORT:-6001}:6001"
- "${TERMINAL_PORT:-6002}:6002"
expose:
- "${APP_PORT:-8000}"
- "${PUSHER_PORT:-6001}"
- "6001"
- "${TERMINAL_PORT:-6002}"
healthcheck:
test: curl --fail http://127.0.0.1:8080/api/health || exit 1
+2 -2
View File
@@ -50,11 +50,11 @@ services:
- IS_WINDOWS_DOCKER_DESKTOP=true
ports:
- "${APP_PORT:-8000}:8080"
- "${PUSHER_PORT:-6001}:6001"
- "${SOKETI_PORT:-6001}:6001"
- "${TERMINAL_PORT:-6002}:6002"
expose:
- "${APP_PORT:-8000}"
- "${PUSHER_PORT:-6001}"
- "6001"
- "${TERMINAL_PORT:-6002}"
healthcheck:
test: curl --fail http://localhost:8080/api/health || exit 1
-9
View File
@@ -832,13 +832,6 @@ update_env_var() {
fi
}
normalize_pusher_port() {
if grep -q "^PUSHER_PORT=8080$" "$ENV_FILE"; then
sed -i "s|^PUSHER_PORT=8080$|PUSHER_PORT=6001|" "$ENV_FILE"
echo " - Updated PUSHER_PORT from app HTTP port 8080 to Reverb port 6001"
fi
}
update_env_var "APP_ID" "$(openssl rand -hex 16)"
update_env_var "APP_KEY" "base64:$(openssl rand -base64 32)"
# update_env_var "DB_USERNAME" "$(openssl rand -hex 16)" # Causes issues: database "random-user" does not exist
@@ -847,8 +840,6 @@ update_env_var "REDIS_PASSWORD" "$(openssl rand -base64 32)"
update_env_var "PUSHER_APP_ID" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_KEY" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_SECRET" "$(openssl rand -hex 32)"
update_env_var "PUSHER_PORT" "6001"
normalize_pusher_port
update_env_var "PUSHER_BACKEND_PORT" "6001"
# Add default root user credentials from environment variables
-9
View File
@@ -133,13 +133,6 @@ update_env_var() {
fi
}
normalize_pusher_port() {
if grep -q "^PUSHER_PORT=8080$" "$ENV_FILE"; then
sed -i "s|^PUSHER_PORT=8080$|PUSHER_PORT=6001|" "$ENV_FILE"
log "Updated PUSHER_PORT from app HTTP port 8080 to Reverb port 6001"
fi
}
set_env_var() {
local key="$1"
local value="$2"
@@ -158,8 +151,6 @@ set_env_var "REGISTRY_URL" "$REGISTRY_URL"
update_env_var "PUSHER_APP_ID" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_KEY" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_SECRET" "$(openssl rand -hex 32)"
update_env_var "PUSHER_PORT" "6001"
normalize_pusher_port
update_env_var "PUSHER_BACKEND_PORT" "6001"
log "Environment variables check complete"
echo " Done."
-9
View File
@@ -833,13 +833,6 @@ update_env_var() {
fi
}
normalize_pusher_port() {
if grep -q "^PUSHER_PORT=8080$" "$ENV_FILE"; then
sed -i "s|^PUSHER_PORT=8080$|PUSHER_PORT=6001|" "$ENV_FILE"
echo " - Updated PUSHER_PORT from app HTTP port 8080 to Reverb port 6001"
fi
}
update_env_var "APP_ID" "$(openssl rand -hex 16)"
update_env_var "APP_KEY" "base64:$(openssl rand -base64 32)"
# update_env_var "DB_USERNAME" "$(openssl rand -hex 16)" # Causes issues: database "random-user" does not exist
@@ -848,8 +841,6 @@ update_env_var "REDIS_PASSWORD" "$(openssl rand -base64 32)"
update_env_var "PUSHER_APP_ID" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_KEY" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_SECRET" "$(openssl rand -hex 32)"
update_env_var "PUSHER_PORT" "6001"
normalize_pusher_port
update_env_var "PUSHER_BACKEND_PORT" "6001"
# Add default root user credentials from environment variables
-9
View File
@@ -133,13 +133,6 @@ update_env_var() {
fi
}
normalize_pusher_port() {
if grep -q "^PUSHER_PORT=8080$" "$ENV_FILE"; then
sed -i "s|^PUSHER_PORT=8080$|PUSHER_PORT=6001|" "$ENV_FILE"
log "Updated PUSHER_PORT from app HTTP port 8080 to Reverb port 6001"
fi
}
set_env_var() {
local key="$1"
local value="$2"
@@ -158,8 +151,6 @@ set_env_var "REGISTRY_URL" "$REGISTRY_URL"
update_env_var "PUSHER_APP_ID" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_KEY" "$(openssl rand -hex 32)"
update_env_var "PUSHER_APP_SECRET" "$(openssl rand -hex 32)"
update_env_var "PUSHER_PORT" "6001"
normalize_pusher_port
update_env_var "PUSHER_BACKEND_PORT" "6001"
log "Environment variables check complete"
echo " Done."
@@ -110,23 +110,45 @@ it('uses Pusher environment keys for self-hosted Reverb compatibility', function
}
});
it('defaults the public Pusher websocket port to Reverb instead of the HTTP app port', function () {
it('keeps the public websocket port adaptive and configures only the internal Reverb port', function () {
expect(file_get_contents(base_path('.env.production')))
->not->toContain('PUSHER_PORT=')
->not->toContain('PUSHER_BACKEND_PORT=')
->and(file_get_contents(base_path('.env.windows-docker-desktop.example')))
->toContain('PUSHER_PORT=6001')
->not->toContain('PUSHER_PORT=')
->toContain('PUSHER_BACKEND_PORT=6001')
->and(file_get_contents(base_path('scripts/install.sh')))
->toContain('update_env_var "PUSHER_PORT" "6001"')
->not->toContain('update_env_var "PUSHER_PORT"')
->toContain('update_env_var "PUSHER_BACKEND_PORT" "6001"')
->toContain('normalize_pusher_port')
->and(file_get_contents(base_path('scripts/upgrade.sh')))
->toContain('update_env_var "PUSHER_PORT" "6001"')
->toContain('update_env_var "PUSHER_BACKEND_PORT" "6001"')
->toContain('normalize_pusher_port');
->not->toContain('update_env_var "PUSHER_PORT"')
->toContain('update_env_var "PUSHER_BACKEND_PORT" "6001"');
});
it('does not use the browser websocket port as the Docker host port', function (string $composeFile) {
expect(file_get_contents(base_path($composeFile)))
->toContain('"${SOKETI_PORT:-6001}:6001"')
->not->toContain('"${PUSHER_PORT:-6001}:6001"');
})->with([
'production compose' => ['docker-compose.prod.yml'],
'nightly production compose' => ['other/nightly/docker-compose.prod.yml'],
'windows compose' => ['docker-compose.windows.yml'],
'nightly windows compose' => ['other/nightly/docker-compose.windows.yml'],
]);
it('preserves existing public websocket port overrides during install and upgrade', function (string $script) {
$contents = file_get_contents(base_path($script));
expect($contents)
->not->toContain('normalize_pusher_port')
->not->toMatch('/(?:set|update)_env_var "PUSHER_PORT"/');
})->with([
'install script' => ['scripts/install.sh'],
'upgrade script' => ['scripts/upgrade.sh'],
'nightly install script' => ['other/nightly/install.sh'],
'nightly upgrade script' => ['other/nightly/upgrade.sh'],
]);
it('stops publishing or preserving the obsolete realtime image', function () {
$productionInstallScript = file_get_contents(base_path('scripts/install.sh'));
$nightlyInstallScript = file_get_contents(base_path('other/nightly/install.sh'));