fix(compose): keep port-suffixed SERVICE_URL and SERVICE_FQDN variables in sync with the domain

Closes #9877

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andras Bacsai
2026-10-27 17:04:07 +01:00
co-authored by Claude Opus 5.5
parent 1082b598c4
commit 1440ea83d3
7 changed files with 189 additions and 98 deletions
+38
View File
@@ -1,6 +1,7 @@
<?php
use App\Models\Application;
use App\Models\EnvironmentVariable;
use App\Models\Service;
use App\Models\ServiceApplication;
use App\Models\ServiceDatabase;
@@ -675,3 +676,40 @@ function putComposeServiceDomain(
return $domains;
}
/**
* Set the stored SERVICE_URL_ and SERVICE_FQDN_ variables of a compose service from its domain.
* Port variables (SERVICE_URL_API_8000) get the same URL or host with their port appended.
* A null URL and host clear the variables.
*/
function syncComposeServiceUrlVariables(Application $application, string $serviceEnvKey, ?string $url, ?string $host): void
{
if ($url !== null) {
foreach (['URL' => $url, 'FQDN' => $host] as $type => $value) {
$application->environment_variables()->updateOrCreate([
'resourceable_type' => Application::class,
'resourceable_id' => $application->id,
'key' => "SERVICE_{$type}_{$serviceEnvKey}",
], [
'value' => $value,
'is_preview' => false,
]);
}
}
$pattern = '/^SERVICE_(URL|FQDN)_'.preg_quote($serviceEnvKey, '/').'(?:_(\d+))?$/';
$application->environment_variables()
->where(fn ($query) => $query->where('key', 'LIKE', "SERVICE_URL_{$serviceEnvKey}%")
->orWhere('key', 'LIKE', "SERVICE_FQDN_{$serviceEnvKey}%"))
->get()
->each(function (EnvironmentVariable $variable) use ($pattern, $url, $host) {
if (! preg_match($pattern, $variable->key, $matches)) {
return;
}
$value = $matches[1] === 'URL' ? $url : $host;
if ($value !== null && isset($matches[2])) {
$value = "{$value}:{$matches[2]}";
}
$variable->update(['value' => $value]);
});
}
+3 -30
View File
@@ -2034,7 +2034,7 @@ function applicationParser(Application $resource, int $pull_request_id = 0, ?int
if ($resource->build_pack === 'dockercompose') {
foreach ($domains as $forServiceName => $domain) {
$parsedDomain = composeDomainEntryString($domain);
$serviceNameFormatted = str($serviceName)->upper()->replace('-', '_')->replace('.', '_');
$serviceEnvKey = str(normalizeComposeServiceName((string) $forServiceName))->upper()->value();
if (filled($parsedDomain)) {
$parsedDomain = str($parsedDomain)->explode(',')->first();
@@ -2042,42 +2042,15 @@ function applicationParser(Application $resource, int $pull_request_id = 0, ?int
$coolifyScheme = $coolifyUrl->getScheme();
$coolifyFqdn = $coolifyUrl->getHost();
$coolifyUrl = $coolifyUrl->withScheme($coolifyScheme)->withHost($coolifyFqdn)->withPort(null);
$serviceEnvKey = str(normalizeComposeServiceName((string) $forServiceName))->upper();
$coolifyEnvironments->put('SERVICE_URL_'.$serviceEnvKey, $coolifyUrl->__toString());
$coolifyEnvironments->put('SERVICE_FQDN_'.$serviceEnvKey, $coolifyFqdn);
// A preview uses its own domains; the stored variables belong to the main application.
if ($isPullRequest) {
continue;
}
$resource->environment_variables()->updateOrCreate([
'resourceable_type' => Application::class,
'resourceable_id' => $resource->id,
'key' => 'SERVICE_URL_'.$serviceEnvKey,
], [
'value' => $coolifyUrl->__toString(),
'is_preview' => false,
]);
$resource->environment_variables()->updateOrCreate([
'resourceable_type' => Application::class,
'resourceable_id' => $resource->id,
'key' => 'SERVICE_FQDN_'.$serviceEnvKey,
], [
'value' => $coolifyFqdn,
'is_preview' => false,
]);
syncComposeServiceUrlVariables($resource, $serviceEnvKey, $coolifyUrl->__toString(), $coolifyFqdn);
} elseif (! $isPullRequest) {
$resource->environment_variables()->where('resourceable_type', Application::class)
->where('resourceable_id', $resource->id)
->where('key', 'LIKE', "SERVICE_FQDN_{$serviceNameFormatted}%")
->update([
'value' => null,
]);
$resource->environment_variables()->where('resourceable_type', Application::class)
->where('resourceable_id', $resource->id)
->where('key', 'LIKE', "SERVICE_URL_{$serviceNameFormatted}%")
->update([
'value' => null,
]);
syncComposeServiceUrlVariables($resource, $serviceEnvKey, null, null);
}
}
}
@@ -820,3 +820,83 @@ it('preserves migrated null assignments separately for production and previews',
->toBe($pullRequestId ? '${LEGACY:-default}' : '')
->and($application->fresh()->docker_compose_raw)->toBe($compose);
})->with([0, 42]);
test('applicationParser keeps port-suffixed SERVICE_URL and SERVICE_FQDN variables in sync with a changed domain', function () {
$application = Application::factory()->create([
'environment_id' => $this->environment->id,
'destination_id' => $this->destination->id,
'destination_type' => StandaloneDocker::class,
'build_pack' => 'dockercompose',
'docker_compose_raw' => <<<'YAML'
services:
api:
image: nginx
environment:
- PUBLIC_API_URL=${SERVICE_URL_API_8000}
api2:
image: nginx
environment:
- PUBLIC_API2_URL=${SERVICE_URL_API2_9000}
YAML,
]);
applicationParser($application);
$application->refresh();
$application->docker_compose_domains = json_encode([
'api' => ['domain' => 'https://frontend.example.com:8000'],
'api2' => ['domain' => 'https://api2.example.com:9000'],
]);
$application->save();
applicationParser($application);
$variables = $application->environment_variables()->pluck('value', 'key');
expect($variables['SERVICE_URL_API'])->toBe('https://frontend.example.com')
->and($variables['SERVICE_FQDN_API'])->toBe('frontend.example.com')
->and($variables['SERVICE_URL_API_8000'])->toBe('https://frontend.example.com:8000')
->and($variables['SERVICE_FQDN_API_8000'])->toBe('frontend.example.com:8000')
->and($variables['SERVICE_URL_API2'])->toBe('https://api2.example.com')
->and($variables['SERVICE_URL_API2_9000'])->toBe('https://api2.example.com:9000')
->and($variables['SERVICE_FQDN_API2_9000'])->toBe('api2.example.com:9000');
});
test('applicationParser clears magic URL variables only for the service whose domain is removed', function () {
$application = Application::factory()->create([
'environment_id' => $this->environment->id,
'destination_id' => $this->destination->id,
'destination_type' => StandaloneDocker::class,
'build_pack' => 'dockercompose',
'docker_compose_raw' => <<<'YAML'
services:
api:
image: nginx
environment:
- PUBLIC_API_URL=${SERVICE_URL_API_8000}
api2:
image: nginx
environment:
- PUBLIC_API2_URL=${SERVICE_URL_API2_9000}
YAML,
]);
applicationParser($application);
$application->refresh();
$application->docker_compose_domains = json_encode([
'api' => ['domain' => ''],
'api2' => ['domain' => 'https://api2.example.com:9000'],
]);
$application->save();
applicationParser($application);
$variables = $application->environment_variables()->pluck('value', 'key');
expect($variables['SERVICE_URL_API'])->toBeNull()
->and($variables['SERVICE_URL_API_8000'])->toBeNull()
->and($variables['SERVICE_FQDN_API_8000'])->toBeNull()
->and($variables['SERVICE_URL_API2'])->toBe('https://api2.example.com')
->and($variables['SERVICE_URL_API2_9000'])->toBe('https://api2.example.com:9000');
});
@@ -49,7 +49,7 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080'
SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io
@@ -63,7 +63,7 @@
SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368'
SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
@@ -240,7 +240,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -694,13 +694,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -710,9 +710,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -725,7 +725,7 @@
args:
- 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}'
environment:
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
LITERAL: plain-value
BARE_PASSTHROUGH: ''
WITH_DEFAULT: '${WITH_DEFAULT:-fallback}'
@@ -892,7 +892,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -1392,13 +1392,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -1408,9 +1408,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -2093,13 +2093,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -2109,9 +2109,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -49,7 +49,7 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080'
SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io
@@ -63,7 +63,7 @@
SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368'
SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
@@ -244,7 +244,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -707,13 +707,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -723,9 +723,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -738,7 +738,7 @@
args:
- 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}'
environment:
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
LITERAL: plain-value
BARE_PASSTHROUGH: ''
WITH_DEFAULT: '${WITH_DEFAULT:-fallback}'
@@ -925,7 +925,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -1458,13 +1458,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -1474,9 +1474,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -2210,13 +2210,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -2226,9 +2226,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -49,7 +49,7 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080'
SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io
@@ -63,7 +63,7 @@
SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368'
SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
@@ -268,7 +268,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -802,13 +802,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -818,9 +818,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -833,7 +833,7 @@
args:
- 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}'
environment:
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
LITERAL: plain-value
BARE_PASSTHROUGH: ''
WITH_DEFAULT: '${WITH_DEFAULT:-fallback}'
@@ -1046,7 +1046,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -1654,13 +1654,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -1670,9 +1670,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -2516,13 +2516,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -2532,9 +2532,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
+17 -17
View File
@@ -49,7 +49,7 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin-referenceapplication0001.10.0.0.1.sslip.io:8080'
SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io
SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io
@@ -63,7 +63,7 @@
SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368'
SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
@@ -258,7 +258,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -742,13 +742,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -758,9 +758,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -773,7 +773,7 @@
args:
- 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}'
environment:
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
LITERAL: plain-value
BARE_PASSTHROUGH: ''
WITH_DEFAULT: '${WITH_DEFAULT:-fallback}'
@@ -975,7 +975,7 @@
my-app:
image: 'httpd:2.4-alpine'
environment:
SERVICE_URL_MY_APP_80: ''
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
COOLIFY_BRANCH: '"main"'
COOLIFY_RESOURCE_UUID: referenceapplication0001
COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405
@@ -1536,13 +1536,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -1552,9 +1552,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null
@@ -2336,13 +2336,13 @@
SELF_REF: null
SERVICE_BASE64_64_WEB: '<generated:SERVICE_BASE64_64_WEB:64>'
SERVICE_FQDN_ADMIN: admin.example.com
SERVICE_FQDN_ADMIN_8080: null
SERVICE_FQDN_ADMIN_8080: 'admin.example.com:8080'
SERVICE_FQDN_API: www.api.example.com
SERVICE_FQDN_API_V2: api-v2.example.com
SERVICE_FQDN_BLOG: blog.example.com
SERVICE_FQDN_MY_APP: my-app.example.com
SERVICE_FQDN_WEB: web.example.com
SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_FQDN_WEB_3000: 'web.example.com:3000'
SERVICE_HEX_32_WEB: '<generated:SERVICE_HEX_32_WEB:32>'
SERVICE_PASSWORD_DB: '<generated:SERVICE_PASSWORD_DB:32>'
SERVICE_PASSWORD_NOBRACES: '<generated:SERVICE_PASSWORD_NOBRACES:32>'
@@ -2352,9 +2352,9 @@
SERVICE_URL_API_V2: 'https://api-v2.example.com'
SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368'
SERVICE_URL_MY_APP: 'https://my-app.example.com'
SERVICE_URL_MY_APP_80: null
SERVICE_URL_MY_APP_80: 'https://my-app.example.com:80'
SERVICE_URL_WEB: 'https://web.example.com'
SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000'
SERVICE_URL_WEB_3000: 'https://web.example.com:3000'
SERVICE_USER_DB: '<generated:SERVICE_USER_DB:16>'
SERVICE_USER_WEB: '<generated:SERVICE_USER_WEB:16>'
WITH_DEFAULT: null