diff --git a/.gitignore b/.gitignore index 3b583795bf..7f342543fe 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,6 @@ ref # Multi-instance local Coolify env files (scripts/dev-instances) .dev-instances/ + +# Service parser template snapshots: generated locally by scripts/parser-snapshot-diff, not committed +/tests/Fixtures/parser/expected/templates/ diff --git a/AGENTS.md b/AGENTS.md index a57f2c2c4c..ce9efdde49 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -66,6 +66,22 @@ npm run dev # vite dev server npm run build # production build ``` +## Testing the Service Parser + +`tests/Feature/ServiceParserReferenceTest.php` is a golden test for both compose parsers (`serviceParser` with `updateCompose`, and `applicationParser`) and the proxy label and magic-variable helpers. It parses `tests/Fixtures/parser/service-reference.yaml` and `application-reference.yaml` (one service per parser feature, with setting variations and error fixtures) and every template in `templates/compose`, then compares the output with `tests/Fixtures/parser/expected/`. Only the reference expected files are committed. Template expected files are gitignored, so CI checks only that each template parses. + +```bash +./scripts/parser-snapshot-diff save # before a parser change: save the output of all cases (~90 s) +./scripts/parser-snapshot-diff baseline # after the change: one line per changed case, full diff in storage/framework/testing/parser-snapshot-diff.diff +php artisan test --compact tests/Feature/ServiceParserReferenceTest.php # before you commit +UPDATE_PARSER_SNAPSHOTS=1 php artisan test --compact tests/Feature/ServiceParserReferenceTest.php # accept an intended change, then review git diff tests/Fixtures/parser/ +``` + +- A refactor must give "No differences". For an intended change, check every changed line in the diff file. +- When you add a parser feature, add a small service that uses it to `service-reference.yaml` or `application-reference.yaml` and regenerate the expected files. +- `./scripts/parser-snapshot-diff ` compares with a commit instead of a saved baseline. +- It covers only the latest compose parsing version. Older parsing versions are not covered. + ## Browser Tests (Pest Browser Plugin) Uses `pestphp/pest-plugin-browser` (Playwright). Browser tests go in `tests/v4/Browser/`. diff --git a/scripts/parser-snapshot-diff b/scripts/parser-snapshot-diff new file mode 100755 index 0000000000..fc2e1e5d07 --- /dev/null +++ b/scripts/parser-snapshot-diff @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# Show how a code change alters the service parser output for every template and the reference fixture. +# +# Usage: +# ./scripts/parser-snapshot-diff save # 1. before you change code: save the current output +# ./scripts/parser-snapshot-diff baseline # 2. after the change: compare with the saved output +# ./scripts/parser-snapshot-diff [git-ref] # or compare with a git ref (default: main) +# ./scripts/parser-snapshot-diff baseline -- --filter='"template appwrite"' # extra Pest arguments +# +# Each run parses everything with tests/Feature/ServiceParserReferenceTest.php (about 90 seconds). +# A git ref is exported with git archive to a temporary directory and parsed with the current test, +# fixtures and templates, so the diff shows only the effect of the code change. +# The terminal shows one line per changed case; the full diff is written to storage/framework/testing/. +set -euo pipefail + +repo="$(git -C "$(dirname "$0")/.." rev-parse --show-toplevel)" +mode="${1:-main}" +shift || true +[[ "${1:-}" == "--" ]] && shift +pest_args=("$@") + +testing="$repo/storage/framework/testing" # gitignored, same file system as the repository +saved="$testing/parser-snapshots-baseline" +report="$testing/parser-snapshot-diff.diff" +work="$(mktemp -d "$testing/parser-snapshot-diff.XXXXXX")" +trap 'rm -rf "$work"' EXIT + +# Run the golden test in with UPDATE_PARSER_SNAPSHOTS=1 and copy its expected files to . +parse_into() { + local dir="$1" target="$2" label="$3" expected="$1/tests/Fixtures/parser/expected" backup="$work/expected-backup" status=0 + echo "==> Parsing on $label (about 90 seconds)" + # The run rewrites the expected files: put the previous ones back afterwards, so the repository is unchanged. + rm -rf "$backup" + cp -r "$expected" "$backup" + rm -rf "$expected/templates" + (cd "$dir" && UPDATE_PARSER_SNAPSHOTS=1 php -d memory_limit=2G artisan test --compact \ + tests/Feature/ServiceParserReferenceTest.php "${pest_args[@]}" >"$work/run.log" 2>&1) || status=$? + rm -rf "$target" + cp -r "$expected" "$target" + rm -rf "$expected" + mv "$backup" "$expected" + if [[ $status -ne 0 ]]; then + echo "Test run on $label failed:" >&2 + tail -30 "$work/run.log" >&2 + exit 1 + fi +} + +case "$mode" in + save) + parse_into "$repo" "$saved" "working tree" + echo "Saved baseline: $saved" + echo "Change the code, then run: ./scripts/parser-snapshot-diff baseline" + exit 0 + ;; + baseline) + [[ -d "$saved" ]] || { echo "No saved baseline. Run ./scripts/parser-snapshot-diff save first." >&2; exit 1; } + base_label="saved baseline" + cp -r "$saved" "$work/base-expected" + ;; + *) + base_label="$mode" + base="$work/base" + mkdir -p "$base" + echo "==> Exporting $mode ($(git -C "$repo" rev-parse --short "$mode"))" + git -C "$repo" archive "$mode" | tar -x -C "$base" + # Hard links: fast and no extra disk space. A symlink would make Composer load the classes of $repo. + cp -al "$repo/vendor" "$base/vendor" + [[ -f "$repo/.env" ]] && cp "$repo/.env" "$base/.env" + rm -rf "$base/templates/compose" "$base/tests/Fixtures/parser" + cp -r "$repo/templates/compose" "$base/templates/compose" + mkdir -p "$base/tests/Fixtures/parser" + cp "$repo"/tests/Fixtures/parser/*.yaml "$base/tests/Fixtures/parser/" + cp "$repo/tests/Feature/ServiceParserReferenceTest.php" "$base/tests/Feature/" + parse_into "$base" "$work/base-expected" "$mode" + ;; +esac + +parse_into "$repo" "$work/current-expected" "working tree" + +echo +if diff -ru "$work/base-expected" "$work/current-expected" | sed -E "s#$work/(base|current)-expected/##g" >"$report"; then + echo "No differences from $base_label: the parser output of every case is the same." + exit 0 +fi + +# Line 2 is the first step (1_deploy): an error there means the case did not parse at all on that side. +first_step_error() { sed -n 2p "$1" | grep '^ error:' | cut -c10-130 || true; } + +summary() { + local file="$1" base_file="$work/base-expected/$1" current_file="$work/current-expected/$1" base_error current_error + [[ -f "$base_file" ]] || { echo " new case $file"; return; } + [[ -f "$current_file" ]] || { echo " removed case $file"; return; } + base_error="$(first_step_error "$base_file")" + current_error="$(first_step_error "$current_file")" + if [[ -n "$base_error" && -z "$current_error" ]]; then + echo " base error $file: $base_error" + elif [[ -n "$current_error" && -z "$base_error" ]]; then + echo " CURRENT ERROR $file: $current_error" + else + echo " changed $file (+$(diff "$base_file" "$current_file" | grep -c '^>' || true) -$(diff "$base_file" "$current_file" | grep -c '^<' || true))" + fi +} + +changed_cases=() +while IFS= read -r file; do + cmp -s "$work/base-expected/$file" "$work/current-expected/$file" || changed_cases+=("$file") +done < <( (cd "$work/base-expected" && find . -name '*.yaml'; cd "$work/current-expected" && find . -name '*.yaml') | sed 's|^\./||' | sort -u) + +lines="$(for file in "${changed_cases[@]}"; do summary "$file"; done)" +echo "${#changed_cases[@]} case(s) differ from $base_label:" +echo "$lines" +echo +echo "Full diff: $report" +if grep -q '^ base error' <<<"$lines"; then + echo "Note: 'base error' cases did not parse on $base_label, so there is no base output to compare with." +fi +exit 1 diff --git a/tests/Feature/ServiceParserReferenceTest.php b/tests/Feature/ServiceParserReferenceTest.php new file mode 100644 index 0000000000..fb7a0aed60 --- /dev/null +++ b/tests/Feature/ServiceParserReferenceTest.php @@ -0,0 +1,428 @@ +.example.com, paths are kept (shared hosts stay shared), + * 3. a domain saved on each application that had none (for example a worker that copies a declaration). + * The result (domains, environment variable rows, storages, generated compose with proxy labels, or the error) + * is compared with tests/Fixtures/parser/expected/.yaml. + * + * Cases: tests/Fixtures/parser/service-reference.yaml (one service per parser feature) with server and + * application setting variations, an error-path fixture, and every template in templates/compose (also the + * `# ignore: true` ones: existing services can still use them). + * + * Applications: tests/Fixtures/parser/application-reference.yaml (Docker Compose build pack) in three steps: + * deploy, custom domains on the General page, and pull request preview deployments. + * + * Only the reference expected files are committed. Template expected files are gitignored: when one is missing, + * the case only checks that the template parses without an error, and it writes the file. + * + * Before/after check of a parser change for every template: + * ./scripts/parser-snapshot-diff save (before the change) + * ./scripts/parser-snapshot-diff baseline (after the change; or: ./scripts/parser-snapshot-diff ) + * When a change of the reference output is intended, regenerate the files and review the diff: + * UPDATE_PARSER_SNAPSHOTS=1 php artisan test --compact tests/Feature/ServiceParserReferenceTest.php + */ + +use App\Models\Application; +use App\Models\ApplicationPreview; +use App\Models\Environment; +use App\Models\InstanceSettings; +use App\Models\Project; +use App\Models\Server; +use App\Models\Service; +use App\Models\ServiceApplication; +use App\Models\ServiceDatabase; +use App\Models\SharedEnvironmentVariable; +use App\Models\StandaloneDocker; +use App\Models\Team; +use Carbon\CarbonImmutable; +use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Bus; +use Illuminate\Support\Facades\Queue; +use Illuminate\Support\Str; +use Symfony\Component\Yaml\Yaml; + +uses(RefreshDatabase::class); + +beforeEach(function () { + // Every volume dispatches a job that reads files over SSH. + Bus::fake(); + Queue::fake(); + Server::flushIdentityMap(); + InstanceSettings::forceCreate(['id' => 0]); +}); + +it('parses the compose exactly as recorded', function (string $composePath, ?string $serviceType, array $options, string $expectedName) { + $team = Team::factory()->create(); + $server = Server::factory()->create(['team_id' => $team->id, 'name' => 'reference-server', 'ip' => '10.0.0.1']); + $server->settings->update($options['server'] ?? []); + if (isset($options['proxy'])) { + $server->proxy->set('type', $options['proxy']); + $server->save(); + } + $destination = StandaloneDocker::where('server_id', $server->id)->first() + ?? StandaloneDocker::factory()->create(['server_id' => $server->id]); + $project = Project::factory()->create(['team_id' => $team->id, 'name' => 'Reference Project']); + $environment = Environment::where('project_id', $project->id)->where('name', 'production')->first() + ?? Environment::factory()->create(['project_id' => $project->id, 'name' => 'production']); + SharedEnvironmentVariable::create([ + 'key' => 'SHARED_KEY', 'value' => 'shared-value', 'type' => 'environment', + 'team_id' => $team->id, 'project_id' => $project->id, 'environment_id' => $environment->id, + ]); + + $service = Service::factory()->create([ + 'name' => 'reference', + 'service_type' => $serviceType, + 'environment_id' => $environment->id, + 'server_id' => $server->id, + 'destination_id' => $destination->id, + 'destination_type' => $destination->getMorphClass(), + 'docker_compose_raw' => file_get_contents(base_path($composePath)), + ]); + $service->forceFill(['uuid' => 'referenceservice00000001'])->save(); + + // A user converted these compose services to the other type before the first parse. + foreach ($options['migrated'] ?? [] as $name => $type) { + ($type === 'database' ? ServiceDatabase::class : ServiceApplication::class)::create(['name' => $name, 'service_id' => $service->id, 'is_migrated' => true]); + } + + $snapshot = []; + $step = function (string $label, Closure $before) use ($service, &$snapshot): bool { + try { + $before(); + $snapshot[$label] = serviceParserReferenceSnapshot($service->fresh(), $service->fresh()->parse()); + + return true; + } catch (Throwable $e) { + $snapshot[$label] = ['error' => class_basename($e).': '.$e->getMessage()]; + + return false; + } + }; + $saveDomain = function (ServiceApplication $application, string $fqdn): void { + $application->fqdn = $fqdn; + $application->save(); + updateCompose($application->fresh()); + }; + + // Step 1: create + deploy (Create.php parses once, StartService parses again), then application settings. + $deployed = $step('1_deploy', function () use ($service, $options) { + $service->fresh()->parse(); + foreach ($options['applications'] ?? [] as $name => $settings) { + $application = $service->applications()->where('name', $name)->firstOrFail(); + $noindex = data_get($settings, 'noindex'); + unset($settings['noindex']); + $application->fill($settings); + if ($noindex) { + $application->setNoindexDomains(explode(',', (string) $application->fqdn)); + } + $application->save(); + } + }); + + if ($deployed) { + // Step 2: custom domains saved like the Domains page does (save fqdn, updateCompose, parse). + $step('2_custom_domains', function () use ($service, $saveDomain) { + foreach ($service->fresh()->applications()->whereNotNull('fqdn')->where('fqdn', '!=', '')->orderBy('name')->get() as $application) { + $saveDomain($application, serviceParserReferenceCustomDomains($application->fqdn)); + } + }); + + // Step 3: a domain saved on each application without one; copies must not move the shared variables. + $step('3_domain_on_applications_without_one', function () use ($service, $saveDomain) { + foreach ($service->fresh()->applications()->orderBy('name')->get()->filter(fn ($application) => blank($application->fqdn)) as $application) { + $saveDomain($application, "https://{$application->name}-extra.example.com"); + } + }); + } + + $actual = Yaml::dump(serviceParserReferenceNormalize($service->fresh(), $snapshot), 12, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK); + $expectedPath = base_path("tests/Fixtures/parser/expected/{$expectedName}.yaml"); + + if (getenv('UPDATE_PARSER_SNAPSHOTS') || ! file_exists($expectedPath)) { + @mkdir(dirname($expectedPath), 0755, true); + file_put_contents($expectedPath, $actual); + } + + expect($actual)->toBe(file_get_contents($expectedPath)); +})->with(fn () => serviceParserReferenceCases()); + +it('parses the application compose exactly as recorded', function (array $options, string $expectedName) { + // Production container names of compose applications end with the deployment time. + $this->travelTo(CarbonImmutable::parse('2026-01-02 03:04:05')); + $team = Team::factory()->create(); + $server = Server::factory()->create(['team_id' => $team->id, 'name' => 'reference-server', 'ip' => '10.0.0.1']); + $server->settings->update($options['server'] ?? []); + if (isset($options['proxy'])) { + $server->proxy->set('type', $options['proxy']); + $server->save(); + } + $destination = StandaloneDocker::where('server_id', $server->id)->first() + ?? StandaloneDocker::factory()->create(['server_id' => $server->id]); + $project = Project::factory()->create(['team_id' => $team->id, 'name' => 'Reference Project']); + $environment = Environment::where('project_id', $project->id)->where('name', 'production')->first() + ?? Environment::factory()->create(['project_id' => $project->id, 'name' => 'production']); + SharedEnvironmentVariable::create([ + 'key' => 'SHARED_KEY', 'value' => 'shared-value', 'type' => 'environment', + 'team_id' => $team->id, 'project_id' => $project->id, 'environment_id' => $environment->id, + ]); + + $application = Application::factory()->create([ + 'name' => 'reference', + 'build_pack' => 'dockercompose', + 'environment_id' => $environment->id, + 'destination_id' => $destination->id, + 'destination_type' => $destination->getMorphClass(), + 'docker_compose_raw' => file_get_contents(base_path('tests/Fixtures/parser/application-reference.yaml')), + 'preview_url_template' => '{{pr_id}}.{{domain}}', + 'git_branch' => 'main', + ]); + $application->forceFill(['uuid' => 'referenceapplication0001'])->save(); + $application->settings->update($options['settings'] ?? []); + $commit = 'abcdef0123456789abcdef0123456789abcdef01'; + + $snapshot = []; + $step = function (string $label, Closure $parse) use ($application, &$snapshot): void { + try { + $compose = $parse(); + $snapshot[$label] = serviceParserReferenceApplicationSnapshot($application->fresh(), $compose); + } catch (Throwable $e) { + $snapshot[$label] = ['error' => class_basename($e).': '.$e->getMessage()]; + } + }; + + // Step 1: first deploy (the parser fills docker_compose_domains from SERVICE_URL_/SERVICE_FQDN_ declarations). + $step('1_deploy', fn () => $application->fresh()->parse(commit: $commit)); + + // Step 2: custom domains saved on the General page: one per service, shared paths kept. + $step('2_custom_domains', function () use ($application, $commit) { + $application = $application->fresh(); + $domains = collect(json_decode($application->docker_compose_domains ?: '[]', true)) + ->map(fn (array $entry) => ['domain' => filled($entry['domain'] ?? null) ? serviceParserReferenceCustomDomains($entry['domain']) : null]) + ->put('api.v2', ['domain' => 'https://api-v2.example.com']) + ->put('api', ['domain' => 'https://www.api.example.com', 'redirect' => 'non-www']) + ->all(); + $application->docker_compose_domains = json_encode($domains); + $application->save(); + + return $application->fresh()->parse(commit: $commit); + }); + + // Step 3: pull request deployment (preview domains from preview_url_template, preview volume names). + $step('3_preview', function () use ($application, $commit) { + $preview = ApplicationPreview::create([ + 'uuid' => 'referencepreview00000001', + 'application_id' => $application->id, + 'pull_request_id' => 7, + 'pull_request_html_url' => 'https://github.com/example/repository/pull/7', + ]); + // The pull request webhook and ApplicationDeploymentJob generate the preview domains before the parse. + $preview->generate_preview_fqdn_compose(); + + return $application->fresh()->parse(pull_request_id: 7, preview_id: $preview->id, commit: $commit); + }); + + // Step 4: preview without generated preview domains: the parser generates them from the application domains. + $step('4_preview_without_generated_domains', function () use ($application, $commit) { + $preview = ApplicationPreview::create([ + 'uuid' => 'referencepreview00000002', + 'application_id' => $application->id, + 'pull_request_id' => 8, + 'pull_request_html_url' => 'https://github.com/example/repository/pull/8', + ]); + + return $application->fresh()->parse(pull_request_id: 8, preview_id: $preview->id, commit: $commit); + }); + + $actual = Yaml::dump(serviceParserReferenceApplicationNormalize($application->fresh(), $snapshot), 12, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK); + $expectedPath = base_path("tests/Fixtures/parser/expected/{$expectedName}.yaml"); + + if (getenv('UPDATE_PARSER_SNAPSHOTS') || ! file_exists($expectedPath)) { + file_put_contents($expectedPath, $actual); + } + + expect($actual)->toBe(file_get_contents($expectedPath)); +})->with([ + 'application' => [[], 'application'], + 'application with exact traefik labels' => [['proxy' => 'TRAEFIK', 'server' => ['generate_exact_labels' => true]], 'application-with-exact-traefik-labels'], + 'application with exact caddy labels' => [['proxy' => 'CADDY', 'server' => ['generate_exact_labels' => true]], 'application-with-exact-caddy-labels'], + 'application with settings' => [[ + 'server' => ['is_logdrain_custom_enabled' => true], + 'settings' => ['is_gzip_enabled' => false, 'is_stripprefix_enabled' => false, 'is_container_label_escape_enabled' => false, 'is_log_drain_enabled' => true, 'connect_to_docker_network' => true], + ], 'application-with-settings'], +]); + +/** + * @return array + */ +function serviceParserReferenceApplicationSnapshot(Application $application, Collection $compose): array +{ + return [ + 'docker_compose_domains' => json_decode($application->docker_compose_domains ?: '[]', true), + 'previews' => $application->previews()->orderBy('pull_request_id')->get() + ->mapWithKeys(fn (ApplicationPreview $preview) => [$preview->pull_request_id => array_filter([ + 'fqdn' => $preview->fqdn, + 'docker_compose_domains' => json_decode($preview->docker_compose_domains ?: '[]', true), + ])])->all(), + 'volumes' => $application->persistentStorages()->orderBy('name')->get() + ->map(fn ($volume) => "{$volume->name}:{$volume->mount_path}")->all(), + 'files' => $application->fileStorages()->orderBy('mount_path')->get() + ->map(fn ($file) => array_filter([ + 'fs_path' => $file->fs_path, + 'mount_path' => $file->mount_path, + 'is_directory' => (bool) $file->is_directory, + 'content' => $file->content, + ], fn ($value) => $value !== null))->all(), + 'environment_variables' => $application->environment_variables()->orderBy('key')->get()->mapWithKeys(fn ($variable) => [ + $variable->key => $variable->is_required ? ['value' => $variable->value, 'required' => true] : $variable->value, + ])->all(), + 'compose' => $compose->toArray(), + ]; +} + +/** + * @param array $snapshot + * @return array + */ +function serviceParserReferenceApplicationNormalize(Application $application, array $snapshot): array +{ + $replacements = [config('constants.coolify.version') => '']; + foreach ($application->environment_variables()->get()->concat($application->environment_variables_preview()->get()) as $variable) { + if (filled($variable->value) && preg_match('/^SERVICE_(PASSWORD|BASE64|REALBASE64|HEX|USER|LOWERCASEUSER)/', $variable->key)) { + $replacements[$variable->value] = "key}:".strlen($variable->value).'>'; + } + } + uksort($replacements, fn ($a, $b) => strlen((string) $b) <=> strlen((string) $a)); + + array_walk_recursive($snapshot, function (&$value) use ($replacements) { + if (is_string($value)) { + $value = strtr($value, $replacements); + } + }); + + return $snapshot; +} + +/** + * @return array, 3: string}> + */ +function serviceParserReferenceCases(): array +{ + $reference = 'tests/Fixtures/parser/service-reference.yaml'; + $cases = [ + 'reference' => [$reference, null, []], + 'reference with exact traefik labels' => [$reference, null, ['proxy' => 'TRAEFIK', 'server' => ['generate_exact_labels' => true]]], + 'reference with exact caddy labels' => [$reference, null, ['proxy' => 'CADDY', 'server' => ['generate_exact_labels' => true, 'is_traffic_analytics_enabled' => true]]], + 'reference with application settings' => [$reference, null, [ + 'server' => ['is_logdrain_custom_enabled' => true], + 'applications' => [ + 'web' => ['is_gzip_enabled' => false, 'is_force_https_enabled' => false, 'redirect' => 'www', 'noindex' => true, 'is_log_drain_enabled' => true], + 'api' => ['is_stripprefix_enabled' => false], + 'www' => ['redirect' => 'non-www'], + ], + ]], + 'reference with migrated services' => [$reference, null, ['migrated' => ['db' => 'application', 'sidecar' => 'database']]], + 'unsafe volume path' => ['tests/Fixtures/parser/service-unsafe.yaml', null, []], + 'unsafe service name' => ['tests/Fixtures/parser/service-unsafe-name.yaml', null, []], + 'invalid yaml' => ['tests/Fixtures/parser/service-invalid-yaml.yaml', null, []], + ]; + + foreach (glob(dirname(__DIR__, 2).'/templates/compose/*.y*ml') as $template) { + $name = pathinfo($template, PATHINFO_FILENAME); + $cases["template {$name}"] = ['templates/compose/'.basename($template), $name, []]; + } + + return collect($cases)->mapWithKeys(fn (array $case, string $name) => [ + $name => [...$case, str_starts_with($name, 'template ') ? 'templates/'.Str::after($name, 'template ') : Str::slug($name)], + ])->all(); +} + +/** + * Replace each generated host with .example.com and keep the port and path, so services that share a host still do. + */ +function serviceParserReferenceCustomDomains(string $fqdns): string +{ + return collect(explode(',', $fqdns))->map(function (string $fqdn) { + $host = parse_url(trim($fqdn), PHP_URL_HOST); + $name = Str::before(Str::before($host, '-referenceservice00000001'), '-referenceapplication0001'); + $name = Str::before($name, '.'); + + $port = parse_url(trim($fqdn), PHP_URL_PORT); + + return 'https://'.$name.'.example.com'.($port ? ":{$port}" : '').(parse_url(trim($fqdn), PHP_URL_PATH) ?? ''); + })->implode(','); +} + +/** + * @return array + */ +function serviceParserReferenceSnapshot(Service $service, Collection $compose): array +{ + $storages = fn ($resource) => array_filter([ + 'volumes' => $resource->persistentStorages()->orderBy('name')->get() + ->map(fn ($volume) => "{$volume->name}:{$volume->mount_path}")->all(), + 'files' => $resource->fileStorages()->orderBy('mount_path')->get() + ->map(fn ($file) => array_filter([ + 'fs_path' => $file->fs_path, + 'mount_path' => $file->mount_path, + 'is_directory' => (bool) $file->is_directory, + 'content' => $file->content, + ], fn ($value) => $value !== null))->all(), + ]); + + return [ + 'applications' => $service->applications()->orderBy('name')->get()->mapWithKeys(fn ($application) => [ + $application->name => array_filter([ + 'fqdn' => $application->fqdn, + 'required_port' => $application->getRequiredPort(), + 'exclude_from_status' => (bool) $application->exclude_from_status, + 'ports' => $application->ports, + ...$storages($application), + ], fn ($value) => $value !== null && $value !== []), + ])->all(), + 'databases' => $service->databases()->orderBy('name')->get()->mapWithKeys(fn ($database) => [ + $database->name => array_filter([ + 'exclude_from_status' => (bool) $database->exclude_from_status, + ...$storages($database), + ], fn ($value) => $value !== null && $value !== []), + ])->all(), + 'environment_variables' => $service->environment_variables()->orderBy('key')->get()->mapWithKeys(fn ($variable) => [ + $variable->key => $variable->is_required ? ['value' => $variable->value, 'required' => true] : $variable->value, + ])->all(), + 'compose' => $compose->toArray(), + ]; +} + +/** + * Replace values that change on every run: generated secrets, uuids of generated rows, Coolify version. + * + * @param array $snapshot + * @return array + */ +function serviceParserReferenceNormalize(Service $service, array $snapshot): array +{ + $replacements = [config('constants.coolify.version') => '']; + foreach ($service->applications()->get()->concat($service->databases()->get()) as $resource) { + $replacements[$resource->uuid] = "name}>"; + } + foreach ($service->environment_variables()->get() as $variable) { + if (filled($variable->value) && preg_match('/^SERVICE_(PASSWORD|BASE64|REALBASE64|HEX|USER|LOWERCASEUSER|SUPABASEANON|SUPABASESERVICE)/', $variable->key)) { + $replacements[$variable->value] = "key}:".strlen($variable->value).'>'; + } + } + uksort($replacements, fn ($a, $b) => strlen((string) $b) <=> strlen((string) $a)); + + array_walk_recursive($snapshot, function (&$value) use ($replacements) { + if (is_string($value)) { + $value = strtr($value, $replacements); + } + }); + + return $snapshot; +} diff --git a/tests/Fixtures/parser/application-reference.yaml b/tests/Fixtures/parser/application-reference.yaml new file mode 100644 index 0000000000..9f40212547 --- /dev/null +++ b/tests/Fixtures/parser/application-reference.yaml @@ -0,0 +1,142 @@ +# Reference compose for the application parser (Docker Compose build pack, applicationParser). +# Test-only: tests/Feature/ServiceParserReferenceTest.php parses it and compares the result +# with tests/Fixtures/parser/expected/application-*.yaml. Each service covers one group of parser features. +services: + # Domain from a magic variable with a port, all environment syntaxes, magic secrets, labels, volumes. + web: + build: + context: . + dockerfile: Dockerfile + args: + - BUILD_VERSION=${BUILD_VERSION:-1.0.0} + environment: + - SERVICE_URL_WEB_3000 + - LITERAL=plain-value + - BARE_PASSTHROUGH + - WITH_DEFAULT=${WITH_DEFAULT:-fallback} + - REQUIRED=${REQUIRED:?REQUIRED must be set} + - NO_BRACES=$NO_BRACES_VALUE + - NESTED=${NESTED_OUTER:-${NESTED_INNER:-inner-default}} + - NESTED_NO_DEFAULT=${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}} + - DASH_DEFAULT=${DASH_DEFAULT_VAR-dash-default} + - NO_BRACES_DEFAULT=$NO_BRACES_DEFAULT_VAR:-no-braces-default + - NO_BRACES_MAGIC=$SERVICE_PASSWORD_NOBRACES + - SELF_REF=${SELF_REF} + - SHARED={{environment.SHARED_KEY}} + - PASSWORD=${SERVICE_PASSWORD_WEB} + - BASE64_64=${SERVICE_BASE64_64_WEB} + - HEX_32=${SERVICE_HEX_32_WEB} + - USER=${SERVICE_USER_WEB} + - API_URL=${SERVICE_URL_API} + labels: + com.example.team: platform + com.example.dollar: price-$5 + volumes: + - web-data:/app/data + - ./config:/app/config:ro + - ./selinux:/app/selinux:z + - /var/run/docker.sock:/var/run/docker.sock:ro + - type: bind + source: ./web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + content: | + #!/bin/sh + echo "application reference fixture" + depends_on: + db: + condition: service_healthy + + # Path value with FQDN declaration, image only, ports, map-style environment. + api: + image: node:22-alpine + environment: + SERVICE_FQDN_API: /api + MAP_LITERAL: map-value + MAP_NULL: + ports: + - "3001:3001" + - target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - shared-external:/shared + - nfs-data:/mnt/nfs + + # Hyphenated and dotted service names. + my-app: + image: httpd:2.4-alpine + environment: + - SERVICE_URL_MY_APP_80 + api.v2: + image: traefik/whoami + + # SERVICE_FQDN_ declaration with a port. + admin: + image: nginx:alpine + environment: + - SERVICE_FQDN_ADMIN_8080 + networks: + internal: + ipv4_address: 172.30.0.10 + + # Ghost image with a path domain: extra redirect labels. + blog: + image: ghost:5-alpine + environment: + - SERVICE_URL_BLOG_2368=/blog + + # Database image: no domain, no proxy labels. + db: + image: postgres:16-alpine + environment: + - POSTGRES_USER=${SERVICE_USER_DB} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_DB} + - POSTGRES_DB=app + volumes: + - db-data:/var/lib/postgresql/data + networks: + - internal + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"] + interval: 5s + + # restart "no", network_mode and a worker without a domain. + sidecar: + image: busybox + restart: "no" + network_mode: "service:web" + command: ["true"] + worker: + image: node:22-alpine + command: ["node", "worker.js"] + environment: + - APP_URL=${SERVICE_URL_WEB} + - APP_URL_WITH_PORT=${SERVICE_URL_WEB_3000} + - API_HOST=${SERVICE_FQDN_API} + depends_on: + - db + +volumes: + web-data: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: addr=10.0.0.2,rw + device: ":/exports/data" + +networks: + internal: + default: + aliased: + aliases: + - alias-name diff --git a/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml b/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml new file mode 100644 index 0000000000..cb2fb20adb --- /dev/null +++ b/tests/Fixtures/parser/expected/application-with-exact-caddy-labels.yaml @@ -0,0 +1,2394 @@ +1_deploy: + docker_compose_domains: + web: + domain: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + api: + domain: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + my-app: + domain: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' + admin: + domain: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io:8080' + blog: + domain: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + 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 + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + 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_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: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://admin-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + COOLIFY_FQDN: 'blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +2_custom_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_FQDN_ADMIN_8080: null + 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_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_URL_API: 'https://www.api.example.com' + 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_WEB: 'https://web.example.com' + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://web.example.com' + COOLIFY_FQDN: web.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://www.api.example.com' + COOLIFY_FQDN: www.api.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir=https://api.example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.api.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://my-app.example.com' + COOLIFY_FQDN: my-app.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my-app.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api-v2.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://api-v2.example.com' + COOLIFY_FQDN: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://admin.example.com' + COOLIFY_FQDN: admin.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://admin.example.com' + - caddy_ingress_network=referenceapplication0001 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://blog.example.com/blog:2368' + COOLIFY_FQDN: 'blog.example.com/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +3_preview: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-7 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-7 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-7: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.web.example.com' + COOLIFY_FQDN: 7.web.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.web.example.com' + - caddy_ingress_network=referenceapplication0001-7 + volumes: + - 'referenceapplication0001_web-data-pr-7:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-7:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-7:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-7: + condition: service_healthy + container_name: web-referenceapplication0001-pr-7 + restart: unless-stopped + networks: + referenceapplication0001-7: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-7' + api-pr-7: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.www.api.example.com' + COOLIFY_FQDN: 7.www.api.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + container_name: api-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.www.api.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + my-app-pr-7: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.my-app.example.com' + COOLIFY_FQDN: 7.my-app.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: my-app-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.my-app.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + api.v2-pr-7: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.api-v2.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.api-v2.example.com' + COOLIFY_FQDN: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + admin-pr-7: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.admin.example.com' + COOLIFY_FQDN: 7.admin.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-7: null + container_name: admin-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.admin.example.com' + - caddy_ingress_network=referenceapplication0001-7 + env_file: + - .env + blog-pr-7: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.blog.example.com/blog:2368' + COOLIFY_FQDN: '7.blog.example.com/blog:2368' + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: blog-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.blog.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + db-pr-7: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + volumes: + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-7: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + env_file: + - .env + sidecar-pr-7: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-7 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + worker-pr-7: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + depends_on: + - db-pr-7 + container_name: worker-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + networks: + referenceapplication0001-7: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-7: + name: referenceapplication0001_web-data-pr-7 + referenceapplication0001_shared-external-pr-7: + name: referenceapplication0001_shared-external-pr-7 + referenceapplication0001_nfs-data-pr-7: + name: referenceapplication0001_nfs-data-pr-7 + referenceapplication0001_db-data-pr-7: + name: referenceapplication0001_db-data-pr-7 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-7: + name: referenceapplication0001-7 + external: true +4_preview_without_generated_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 8: { } + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + - 'referenceapplication0001_web-data-pr-8:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-8 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-8 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: referenceapplication0001.10.0.0.1.sslip.io/api + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-8: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + volumes: + - 'referenceapplication0001_web-data-pr-8:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-8:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-8:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-8: + condition: service_healthy + container_name: web-referenceapplication0001-pr-8 + restart: unless-stopped + networks: + referenceapplication0001-8: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-8' + api-pr-8: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + container_name: api-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + my-app-pr-8: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: my-app-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + api.v2-pr-8: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + admin-pr-8: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-8: null + container_name: admin-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + blog-pr-8: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: blog-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + db-pr-8: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + volumes: + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-8: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + sidecar-pr-8: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-8 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + worker-pr-8: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + depends_on: + - db-pr-8 + container_name: worker-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-8: + name: referenceapplication0001_web-data-pr-8 + referenceapplication0001_shared-external-pr-8: + name: referenceapplication0001_shared-external-pr-8 + referenceapplication0001_nfs-data-pr-8: + name: referenceapplication0001_nfs-data-pr-8 + referenceapplication0001_db-data-pr-8: + name: referenceapplication0001_db-data-pr-8 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-8: + name: referenceapplication0001-8 + external: true diff --git a/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml b/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml new file mode 100644 index 0000000000..5888f9928f --- /dev/null +++ b/tests/Fixtures/parser/expected/application-with-exact-traefik-labels.yaml @@ -0,0 +1,2511 @@ +1_deploy: + docker_compose_domains: + web: + domain: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + api: + domain: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + my-app: + domain: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' + admin: + domain: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io:8080' + blog: + domain: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + 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 + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + 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_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: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-web-2567.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`api-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + COOLIFY_FQDN: 'blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001' + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/blog:2368`)' + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +2_custom_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_FQDN_ADMIN_8080: null + 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_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_URL_API: 'https://www.api.example.com' + 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_WEB: 'https://web.example.com' + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://web.example.com' + COOLIFY_FQDN: web.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-web-2567.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-web-2567.service=https-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://www.api.example.com' + COOLIFY_FQDN: www.api.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.regex=^(http|https)://www\.(.+)' + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.replacement=$${1}://$${2}' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-api-8a5d.middlewares=gzip,0-referenceapplication0001-to-non-www' + - 'traefik.http.routers.https-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.service=https-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://my-app.example.com' + COOLIFY_FQDN: my-app.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.service=https-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls=true + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://api-v2.example.com' + COOLIFY_FQDN: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://admin.example.com' + COOLIFY_FQDN: admin.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.service=https-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://blog.example.com/blog:2368' + COOLIFY_FQDN: 'blog.example.com/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001' + - 'traefik.http.routers.https-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls=true + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +3_preview: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-7 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-7 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-7: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.web.example.com' + COOLIFY_FQDN: 7.web.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.service=http-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-web-2567.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.service=https-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + volumes: + - 'referenceapplication0001_web-data-pr-7:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-7:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-7:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-7: + condition: service_healthy + container_name: web-referenceapplication0001-pr-7 + restart: unless-stopped + networks: + referenceapplication0001-7: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-7' + api-pr-7: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.www.api.example.com' + COOLIFY_FQDN: 7.www.api.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + container_name: api-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.service=http-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.service=https-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + networks: + referenceapplication0001-7: null + env_file: + - .env + my-app-pr-7: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.my-app.example.com' + COOLIFY_FQDN: 7.my-app.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: my-app-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.service=http-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.service=https-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceapplication0001-7: null + env_file: + - .env + api.v2-pr-7: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls=true + networks: + referenceapplication0001-7: null + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.api-v2.example.com' + COOLIFY_FQDN: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + admin-pr-7: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.admin.example.com' + COOLIFY_FQDN: 7.admin.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-7: null + container_name: admin-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.service=http-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.service=https-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + env_file: + - .env + blog-pr-7: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.blog.example.com/blog:2368' + COOLIFY_FQDN: '7.blog.example.com/blog:2368' + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: blog-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.replacement=/$1 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001-7,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls=true + networks: + referenceapplication0001-7: null + env_file: + - .env + db-pr-7: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + volumes: + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-7: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + env_file: + - .env + sidecar-pr-7: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-7 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + worker-pr-7: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + depends_on: + - db-pr-7 + container_name: worker-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + networks: + referenceapplication0001-7: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-7: + name: referenceapplication0001_web-data-pr-7 + referenceapplication0001_shared-external-pr-7: + name: referenceapplication0001_shared-external-pr-7 + referenceapplication0001_nfs-data-pr-7: + name: referenceapplication0001_nfs-data-pr-7 + referenceapplication0001_db-data-pr-7: + name: referenceapplication0001_db-data-pr-7 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-7: + name: referenceapplication0001-7 + external: true +4_preview_without_generated_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 8: { } + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + - 'referenceapplication0001_web-data-pr-8:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-8 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-8 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: referenceapplication0001.10.0.0.1.sslip.io/api + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-8: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + volumes: + - 'referenceapplication0001_web-data-pr-8:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-8:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-8:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-8: + condition: service_healthy + container_name: web-referenceapplication0001-pr-8 + restart: unless-stopped + networks: + referenceapplication0001-8: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-8' + api-pr-8: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + container_name: api-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + my-app-pr-8: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: my-app-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + api.v2-pr-8: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + admin-pr-8: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-8: null + container_name: admin-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + blog-pr-8: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: blog-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + db-pr-8: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + volumes: + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-8: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + sidecar-pr-8: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-8 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + worker-pr-8: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + depends_on: + - db-pr-8 + container_name: worker-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-8: + name: referenceapplication0001_web-data-pr-8 + referenceapplication0001_shared-external-pr-8: + name: referenceapplication0001_shared-external-pr-8 + referenceapplication0001_nfs-data-pr-8: + name: referenceapplication0001_nfs-data-pr-8 + referenceapplication0001_db-data-pr-8: + name: referenceapplication0001_db-data-pr-8 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-8: + name: referenceapplication0001-8 + external: true diff --git a/tests/Fixtures/parser/expected/application-with-settings.yaml b/tests/Fixtures/parser/expected/application-with-settings.yaml new file mode 100644 index 0000000000..9afcd0fb44 --- /dev/null +++ b/tests/Fixtures/parser/expected/application-with-settings.yaml @@ -0,0 +1,2891 @@ +1_deploy: + docker_compose_domains: + web: + domain: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + api: + domain: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + my-app: + domain: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' + admin: + domain: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io:8080' + blog: + domain: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + 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 + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + 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_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: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`api-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + coolify: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + coolify: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://admin-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + COOLIFY_FQDN: 'blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=redir-ghost-referenceapplication0001 + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/blog:2368`)' + - 'caddy_0.handle.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + coolify: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true + coolify: + name: coolify + external: true +2_custom_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_FQDN_ADMIN_8080: null + 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_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_URL_API: 'https://www.api.example.com' + 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_WEB: 'https://web.example.com' + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://web.example.com' + COOLIFY_FQDN: web.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-web-2567.service=https-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://www.api.example.com' + COOLIFY_FQDN: www.api.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.regex=^(http|https)://www\.(.+)' + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.replacement=$${1}://$${2}' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.middlewares=0-referenceapplication0001-to-non-www + - 'traefik.http.routers.https-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.service=https-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.redir=https://api.example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.api.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://my-app.example.com' + COOLIFY_FQDN: my-app.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.service=https-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my-app.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls=true + - 'caddy_0.handle.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api-v2.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://api-v2.example.com' + COOLIFY_FQDN: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://admin.example.com' + COOLIFY_FQDN: admin.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + coolify: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.service=https-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://admin.example.com' + - caddy_ingress_network=referenceapplication0001 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://blog.example.com/blog:2368' + COOLIFY_FQDN: 'blog.example.com/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.middlewares=redir-ghost-referenceapplication0001 + - 'traefik.http.routers.https-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls=true + - 'caddy_0.handle.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + coolify: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true + coolify: + name: coolify + external: true +3_preview: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-7 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-7 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-7: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.web.example.com' + COOLIFY_FQDN: 7.web.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + labels: + - com.example.team=platform + - com.example.dollar=price-$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.service=http-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.middlewares=0-referenceapplication0001-7-noindex + - 'traefik.http.routers.https-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.service=https-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.web.example.com' + - caddy_ingress_network=referenceapplication0001-7 + volumes: + - 'referenceapplication0001_web-data-pr-7:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-7:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-7:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-7: + condition: service_healthy + container_name: web-referenceapplication0001-pr-7 + restart: unless-stopped + networks: + referenceapplication0001-7: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + image: 'referenceapplication0001_web:pr-7' + api-pr-7: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.www.api.example.com' + COOLIFY_FQDN: 7.www.api.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + container_name: api-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.service=http-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.middlewares=0-referenceapplication0001-7-noindex + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.service=https-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.www.api.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + my-app-pr-7: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.my-app.example.com' + COOLIFY_FQDN: 7.my-app.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: my-app-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.service=http-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.middlewares=0-referenceapplication0001-7-noindex + - 'traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.service=https-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.my-app.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + api.v2-pr-7: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.middlewares=0-referenceapplication0001-7-noindex + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls=true + - 'caddy_0.handle.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.api-v2.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + coolify: null + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.api-v2.example.com' + COOLIFY_FQDN: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + admin-pr-7: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.admin.example.com' + COOLIFY_FQDN: 7.admin.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-7: null + coolify: null + container_name: admin-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.service=http-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.middlewares=0-referenceapplication0001-7-noindex + - 'traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.service=https-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.handle.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.admin.example.com' + - caddy_ingress_network=referenceapplication0001-7 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + blog-pr-7: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.blog.example.com/blog:2368' + COOLIFY_FQDN: '7.blog.example.com/blog:2368' + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: blog-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.replacement=/$1 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.middlewares=redir-ghost-referenceapplication0001-7,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls=true + - 'caddy_0.handle.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle=/blog:2368*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.blog.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + db-pr-7: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + volumes: + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-7: null + coolify: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + sidecar-pr-7: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-7 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + worker-pr-7: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + depends_on: + - db-pr-7 + container_name: worker-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + networks: + referenceapplication0001-7: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-7: + name: referenceapplication0001_web-data-pr-7 + referenceapplication0001_shared-external-pr-7: + name: referenceapplication0001_shared-external-pr-7 + referenceapplication0001_nfs-data-pr-7: + name: referenceapplication0001_nfs-data-pr-7 + referenceapplication0001_db-data-pr-7: + name: referenceapplication0001_db-data-pr-7 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-7: + name: referenceapplication0001-7 + external: true + coolify: + name: coolify + external: true +4_preview_without_generated_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 8: { } + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + - 'referenceapplication0001_web-data-pr-8:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-8 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-8 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: referenceapplication0001.10.0.0.1.sslip.io/api + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-8: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + labels: + - com.example.team=platform + - com.example.dollar=price-$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + volumes: + - 'referenceapplication0001_web-data-pr-8:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-8:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-8:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-8: + condition: service_healthy + container_name: web-referenceapplication0001-pr-8 + restart: unless-stopped + networks: + referenceapplication0001-8: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + image: 'referenceapplication0001_web:pr-8' + api-pr-8: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + container_name: api-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + my-app-pr-8: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: my-app-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + api.v2-pr-8: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + coolify: null + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + admin-pr-8: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-8: null + coolify: null + container_name: admin-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + blog-pr-8: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: blog-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + db-pr-8: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + volumes: + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-8: null + coolify: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + sidecar-pr-8: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-8 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + worker-pr-8: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + depends_on: + - db-pr-8 + container_name: worker-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + coolify: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-8: + name: referenceapplication0001_web-data-pr-8 + referenceapplication0001_shared-external-pr-8: + name: referenceapplication0001_shared-external-pr-8 + referenceapplication0001_nfs-data-pr-8: + name: referenceapplication0001_nfs-data-pr-8 + referenceapplication0001_db-data-pr-8: + name: referenceapplication0001_db-data-pr-8 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-8: + name: referenceapplication0001-8 + external: true + coolify: + name: coolify + external: true diff --git a/tests/Fixtures/parser/expected/application.yaml b/tests/Fixtures/parser/expected/application.yaml new file mode 100644 index 0000000000..6703ebc366 --- /dev/null +++ b/tests/Fixtures/parser/expected/application.yaml @@ -0,0 +1,2637 @@ +1_deploy: + docker_compose_domains: + web: + domain: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + api: + domain: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + my-app: + domain: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io:80' + admin: + domain: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io:8080' + blog: + domain: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + 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 + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_3000: 'web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + 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_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: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-web-2567.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`api-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + COOLIFY_FQDN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.middlewares=gzip + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://admin-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + COOLIFY_FQDN: 'blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001' + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog-referenceapplication0001.10.0.0.1.sslip.io`) && PathPrefix(`/blog:2368`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceapplication0001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'http://web-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_WEB: web-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_API: 'http://api-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_API: api-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_MY_APP: 'http://my-app-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_MY_APP: my-app-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_ADMIN: 'http://admin-referenceapplication0001.10.0.0.1.sslip.io' + SERVICE_FQDN_ADMIN: admin-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_URL_BLOG: 'http://blog-referenceapplication0001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_BLOG: blog-referenceapplication0001.10.0.0.1.sslip.io + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +2_custom_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: { } + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_web-data:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_FQDN_ADMIN_8080: null + 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_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_URL_API: 'https://www.api.example.com' + 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_WEB: 'https://web.example.com' + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: 'http://web-referenceapplication0001.10.0.0.1.sslip.io:3000' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://web.example.com' + COOLIFY_FQDN: web.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-web-2567.service=http-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-web-2567.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-web-2567.service=https-0-referenceapplication0001-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceapplication0001 + volumes: + - 'referenceapplication0001_web-data:/app/data' + - '/data/coolify/applications/referenceapplication0001/config:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db: + condition: service_healthy + container_name: web-referenceapplication0001-20260102T030405 + restart: unless-stopped + networks: + referenceapplication0001: null + env_file: + - .env + image: 'referenceapplication0001_web:abcdef0123456789abcdef0123456789abcdef01' + api: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://www.api.example.com' + COOLIFY_FQDN: www.api.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'shared-external:/shared' + - 'nfs-data:/mnt/nfs' + container_name: api-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.regex=^(http|https)://www\.(.+)' + - 'traefik.http.middlewares.0-referenceapplication0001-to-non-www.redirectregex.replacement=$${1}://$${2}' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-api-8a5d.service=http-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-api-8a5d.middlewares=gzip,0-referenceapplication0001-to-non-www' + - 'traefik.http.routers.https-0-referenceapplication0001-api-8a5d.rule=Host(`www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.service=https-0-referenceapplication0001-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir=https://api.example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.api.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://my-app.example.com' + COOLIFY_FQDN: my-app.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: my-app-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-my-app-4dcb.service=http-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.rule=Host(`my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.service=https-0-referenceapplication0001-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my-app.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + api.v2: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.rule=Host(`api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-api-v2-b0fa.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api-v2.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://api-v2.example.com' + COOLIFY_FQDN: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + admin: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://admin.example.com' + COOLIFY_FQDN: admin.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001: null + container_name: admin-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-admin-2123.service=http-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.entryPoints=https + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.middlewares=gzip + - 'traefik.http.routers.https-0-referenceapplication0001-admin-2123.rule=Host(`admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.service=https-0-referenceapplication0001-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://admin.example.com' + - caddy_ingress_network=referenceapplication0001 + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + COOLIFY_URL: 'https://blog.example.com/blog:2368' + COOLIFY_FQDN: 'blog.example.com/blog:2368' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + container_name: blog-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + - traefik.docker.network=referenceapplication0001 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceapplication0001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001' + - 'traefik.http.routers.https-0-referenceapplication0001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-blog-126a.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceapplication0001 + networks: + referenceapplication0001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-20260102T030405 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + environment: + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + env_file: + - .env + worker: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"main"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-20260102T030405 + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_FQDN_WEB: web.example.com + SERVICE_URL_API: 'https://www.api.example.com' + SERVICE_FQDN_API: www.api.example.com + SERVICE_URL_MY_APP: 'https://my-app.example.com' + SERVICE_FQDN_MY_APP: my-app.example.com + SERVICE_URL_ADMIN: 'https://admin.example.com' + SERVICE_FQDN_ADMIN: admin.example.com + SERVICE_URL_BLOG: 'https://blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: blog.example.com + SERVICE_URL_API_V2: 'https://api-v2.example.com' + SERVICE_FQDN_API_V2: api-v2.example.com + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_API_V2: api.v2 + SERVICE_NAME_ADMIN: admin + SERVICE_NAME_BLOG: blog + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + SERVICE_NAME_WORKER: worker + depends_on: + - db + container_name: worker-referenceapplication0001-20260102T030405 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-20260102t030405 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=0 + networks: + referenceapplication0001: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceapplication0001_web-data: + name: referenceapplication0001_web-data + referenceapplication0001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceapplication0001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001: + name: referenceapplication0001 + external: true +3_preview: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-7 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-7 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-7: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.web.example.com' + COOLIFY_FQDN: 7.web.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-web-2567.service=http-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-web-2567.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-web-2567.rule=Host(`7.web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.service=https-0-referenceapplication0001-7-web-2567 + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-web-2567.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceapplication0001-7-web-2567.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.web.example.com' + - caddy_ingress_network=referenceapplication0001-7 + volumes: + - 'referenceapplication0001_web-data-pr-7:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-7:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-7:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-7 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-7: + condition: service_healthy + container_name: web-referenceapplication0001-pr-7 + restart: unless-stopped + networks: + referenceapplication0001-7: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-7' + api-pr-7: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.www.api.example.com' + COOLIFY_FQDN: 7.www.api.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + container_name: api-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-api-8a5d.service=http-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.rule=Host(`7.www.api.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.service=https-0-referenceapplication0001-7-api-8a5d + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-8a5d.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + - traefik.http.services.https-0-referenceapplication0001-7-api-8a5d.loadbalancer.server.port=3001 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3001}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.www.api.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + my-app-pr-7: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.my-app.example.com' + COOLIFY_FQDN: 7.my-app.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: my-app-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-my-app-4dcb.service=http-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.rule=Host(`7.my-app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.service=https-0-referenceapplication0001-7-my-app-4dcb + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceapplication0001-7-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.my-app.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + api.v2-pr-7: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.rule=Host(`7.api-v2.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-api-v2-b0fa.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.api-v2.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.api-v2.example.com' + COOLIFY_FQDN: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + admin-pr-7: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.admin.example.com' + COOLIFY_FQDN: 7.admin.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-7: null + container_name: admin-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceapplication0001-7-admin-2123.service=http-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.middlewares=gzip,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.rule=Host(`7.admin.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.service=https-0-referenceapplication0001-7-admin-2123 + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-admin-2123.tls=true + - traefik.http.services.http-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceapplication0001-7-admin-2123.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.admin.example.com' + - caddy_ingress_network=referenceapplication0001-7 + env_file: + - .env + blog-pr-7: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + COOLIFY_URL: 'https://7.blog.example.com/blog:2368' + COOLIFY_FQDN: '7.blog.example.com/blog:2368' + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + container_name: blog-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + - traefik.docker.network=referenceapplication0001-7 + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.regexp=^/blog:2368/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceapplication0001-7.rewrite.replacement=/$1 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceapplication0001-7-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.regex=^/blog:2368/(.*)' + - traefik.http.middlewares.redir-ghost-referenceapplication0001-7.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.middlewares=0-referenceapplication0001-7-noindex,redirect-to-https' + - 'traefik.http.routers.http-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.middlewares=gzip,redir-ghost-referenceapplication0001-7,0-referenceapplication0001-7-noindex' + - 'traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.rule=Host(`7.blog.example.com`) && PathPrefix(`/blog:2368`)' + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceapplication0001-7-blog-126a.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/blog:2368*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://7.blog.example.com' + - caddy_ingress_network=referenceapplication0001-7 + networks: + referenceapplication0001-7: null + env_file: + - .env + db-pr-7: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + volumes: + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-7: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + env_file: + - .env + sidecar-pr-7: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-7 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + environment: + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + env_file: + - .env + worker-pr-7: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/7/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-7 + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_FQDN_API: 7.www.api.example.com + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_FQDN_ADMIN: 7.admin.example.com + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_NAME_WEB: web-pr-7 + SERVICE_NAME_API: api-pr-7 + SERVICE_NAME_MY_APP: my-app-pr-7 + SERVICE_NAME_API_V2: api.v2-pr-7 + SERVICE_NAME_ADMIN: admin-pr-7 + SERVICE_NAME_BLOG: blog-pr-7 + SERVICE_NAME_DB: db-pr-7 + SERVICE_NAME_SIDECAR: sidecar-pr-7 + SERVICE_NAME_WORKER: worker-pr-7 + depends_on: + - db-pr-7 + container_name: worker-referenceapplication0001-pr-7 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-7 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=7 + networks: + referenceapplication0001-7: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-7: + name: referenceapplication0001_web-data-pr-7 + referenceapplication0001_shared-external-pr-7: + name: referenceapplication0001_shared-external-pr-7 + referenceapplication0001_nfs-data-pr-7: + name: referenceapplication0001_nfs-data-pr-7 + referenceapplication0001_db-data-pr-7: + name: referenceapplication0001_db-data-pr-7 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-7: + name: referenceapplication0001-7 + external: true +4_preview_without_generated_domains: + docker_compose_domains: + web: + domain: 'https://web.example.com:3000' + api: + domain: 'https://www.api.example.com' + redirect: non-www + my-app: + domain: 'https://my-app.example.com:80' + admin: + domain: 'https://admin.example.com:8080' + blog: + domain: 'https://blog.example.com/blog:2368' + api.v2: + domain: 'https://api-v2.example.com' + previews: + 8: { } + 7: + fqdn: 'https://7.web.example.com,https://7.www.api.example.com,https://7.my-app.example.com,https://7.admin.example.com,https://7.blog.example.com/blog:2368,https://7.api-v2.example.com' + docker_compose_domains: + web: + domain: 'https://7.web.example.com' + api: + domain: 'https://7.www.api.example.com' + my-app: + domain: 'https://7.my-app.example.com' + admin: + domain: 'https://7.admin.example.com' + blog: + domain: 'https://7.blog.example.com/blog:2368' + api.v2: + domain: 'https://7.api-v2.example.com' + sidecar: + domain: '' + worker: + domain: '' + volumes: + - 'referenceapplication0001_db-data:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-7:/var/lib/postgresql/data' + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + - 'referenceapplication0001_nfs-data-pr-7:/mnt/nfs' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + - 'referenceapplication0001_shared-external-pr-7:/shared' + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_web-data:/app/data' + - 'referenceapplication0001_web-data-pr-7:/app/data' + - 'referenceapplication0001_web-data-pr-8:/app/data' + files: + - + fs_path: /data/coolify/applications/referenceapplication0001/config-pr-8 + mount_path: /app/config + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/selinux-pr-8 + mount_path: /app/selinux + is_directory: true + - + fs_path: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "application reference fixture" + environment_variables: + BARE_PASSTHROUGH: null + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + NO_BRACES_VALUE: null + REQUIRED: + value: null + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_FQDN_ADMIN: referenceapplication0001.10.0.0.1.sslip.io + SERVICE_FQDN_ADMIN_8080: null + SERVICE_FQDN_API: referenceapplication0001.10.0.0.1.sslip.io/api + SERVICE_FQDN_API_V2: 7.api-v2.example.com + SERVICE_FQDN_BLOG: 7.blog.example.com + SERVICE_FQDN_MY_APP: 7.my-app.example.com + SERVICE_FQDN_WEB: 7.web.example.com + SERVICE_FQDN_WEB_3000: null + SERVICE_HEX_32_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_NOBRACES: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_URL_ADMIN: 'https://7.admin.example.com' + SERVICE_URL_API: 'https://7.www.api.example.com' + SERVICE_URL_API_V2: 'https://7.api-v2.example.com' + SERVICE_URL_BLOG: 'https://7.blog.example.com/blog:2368' + SERVICE_URL_MY_APP: 'https://7.my-app.example.com' + SERVICE_URL_MY_APP_80: null + SERVICE_URL_WEB: 'https://7.web.example.com' + SERVICE_URL_WEB_3000: null + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + WITH_DEFAULT: null + compose: + services: + web-pr-8: + build: + context: . + dockerfile: Dockerfile + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + SERVICE_URL_WEB_3000: '' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + NO_BRACES_MAGIC: $SERVICE_PASSWORD_NOBRACES + SELF_REF: '${SELF_REF}' + SHARED: shared-value + PASSWORD: '${SERVICE_PASSWORD_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + USER: '${SERVICE_USER_WEB}' + API_URL: '${SERVICE_URL_API}' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + NO_BRACES_VALUE: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: web-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=web-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + volumes: + - 'referenceapplication0001_web-data-pr-8:/app/data' + - '/data/coolify/applications/referenceapplication0001/config-pr-8:/app/config:ro' + - '/data/coolify/applications/referenceapplication0001/selinux-pr-8:/app/selinux:z' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/applications/referenceapplication0001/web-init.sh-pr-8 + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + depends_on: + db-pr-8: + condition: service_healthy + container_name: web-referenceapplication0001-pr-8 + restart: unless-stopped + networks: + referenceapplication0001-8: null + env_file: + - .env + image: 'referenceapplication0001_web:pr-8' + api-pr-8: + image: 'node:22-alpine' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + ports: + - '3001:3001' + - + target: 3002 + published: 3002 + protocol: tcp + expose: + - 3001 + volumes: + - 'referenceapplication0001_shared-external-pr-8:/shared' + - 'referenceapplication0001_nfs-data-pr-8:/mnt/nfs' + container_name: api-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=api-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + my-app-pr-8: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: '' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: my-app-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: my-app-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=my-app-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + api.v2-pr-8: + image: traefik/whoami + container_name: api.v2-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=apiv2-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: api.v2-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + admin-pr-8: + image: 'nginx:alpine' + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: admin-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + networks: + internal: + ipv4_address: 172.30.0.10 + referenceapplication0001-8: null + container_name: admin-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=admin-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + blog-pr-8: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: blog-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + container_name: blog-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=blog-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + db-pr-8: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: db-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + volumes: + - 'referenceapplication0001_db-data-pr-8:/var/lib/postgresql/data' + networks: + internal: null + referenceapplication0001-8: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=db-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + env_file: + - .env + sidecar-pr-8: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceapplication0001-pr-8 + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=sidecar-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + environment: + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: sidecar-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + env_file: + - .env + worker-pr-8: + image: 'node:22-alpine' + command: + - node + - worker.js + environment: + APP_URL: '${SERVICE_URL_WEB}' + APP_URL_WITH_PORT: '${SERVICE_URL_WEB_3000}' + API_HOST: '${SERVICE_FQDN_API}' + COOLIFY_BRANCH: '"pull/8/head"' + COOLIFY_RESOURCE_UUID: referenceapplication0001 + COOLIFY_CONTAINER_NAME: worker-referenceapplication0001-pr-8 + SERVICE_NAME_WEB: web-pr-8 + SERVICE_NAME_API: api-pr-8 + SERVICE_NAME_MY_APP: my-app-pr-8 + SERVICE_NAME_API_V2: api.v2-pr-8 + SERVICE_NAME_ADMIN: admin-pr-8 + SERVICE_NAME_BLOG: blog-pr-8 + SERVICE_NAME_DB: db-pr-8 + SERVICE_NAME_SIDECAR: sidecar-pr-8 + SERVICE_NAME_WORKER: worker-pr-8 + depends_on: + - db-pr-8 + container_name: worker-referenceapplication0001-pr-8 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.applicationUuid=referenceapplication0001 + - coolify.type=application + - coolify.name=worker-referenceapplication0001-pr-8 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=reference + - coolify.environmentName=production + - coolify.pullRequestId=8 + networks: + referenceapplication0001-8: null + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + referenceapplication0001_web-data-pr-8: + name: referenceapplication0001_web-data-pr-8 + referenceapplication0001_shared-external-pr-8: + name: referenceapplication0001_shared-external-pr-8 + referenceapplication0001_nfs-data-pr-8: + name: referenceapplication0001_nfs-data-pr-8 + referenceapplication0001_db-data-pr-8: + name: referenceapplication0001_db-data-pr-8 + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceapplication0001-8: + name: referenceapplication0001-8 + external: true diff --git a/tests/Fixtures/parser/expected/invalid-yaml.yaml b/tests/Fixtures/parser/expected/invalid-yaml.yaml new file mode 100644 index 0000000000..dfb9e4721e --- /dev/null +++ b/tests/Fixtures/parser/expected/invalid-yaml.yaml @@ -0,0 +1,15 @@ +1_deploy: + applications: { } + databases: { } + environment_variables: { } + compose: { } +2_custom_domains: + applications: { } + databases: { } + environment_variables: { } + compose: { } +3_domain_on_applications_without_one: + applications: { } + databases: { } + environment_variables: { } + compose: { } diff --git a/tests/Fixtures/parser/expected/reference-with-application-settings.yaml b/tests/Fixtures/parser/expected/reference-with-application-settings.yaml new file mode 100644 index 0000000000..9a9e0ae14f --- /dev/null +++ b/tests/Fixtures/parser/expected/reference-with-application-settings.yaml @@ -0,0 +1,2632 @@ +1_deploy: + applications: + api: + fqdn: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api-referenceservice00000001.10.0.0.1.sslip.io/api + SERVICE_FQDN_BLOG: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + SERVICE_FQDN_BLOG_2368: 'blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP_80: 'my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_FQDN_WEB: web-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_8080: 'web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_FQDN_WWW: www-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_URL_BLOG: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_URL_BLOG_2368: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_URL_WEB: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - 'traefik.http.middlewares.0-referenceservice00000001-noindex.headers.customresponseheaders.X-Robots-Tag=noindex, nofollow' + - traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.regex=^(http|https)://(?:www\.)?(.+)' + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.replacement=$${1}://www.$${2}' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=0-referenceservice00000001-to-www,0-referenceservice00000001-noindex,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header.0_-Server= + - 'caddy_0.header.1_X-Robots-Tag="noindex, nofollow"' + - 'caddy_0.redir={scheme}://www.web-referenceservice00000001.10.0.0.1.sslip.io{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api-referenceservice00000001.10.0.0.1.sslip.io/api + COOLIFY_URL: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://www-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + COOLIFY_URL: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=http-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/ws`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +2_custom_domains: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.regex=^(http|https)://(?:www\.)?(.+)' + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.replacement=$${1}://www.$${2}' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=0-referenceservice00000001-to-www,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=0-referenceservice00000001-to-www,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir={scheme}://www.web.example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web.example.com, https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.regex=^(http|https)://www\.(.+)' + - 'traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.replacement=$${1}://$${2}' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip,0-referenceservice00000001-to-non-www' + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir=https://example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +3_domain_on_applications_without_one: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + fqdn: 'https://scheduler-extra.example.com' + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + fqdn: 'https://sidecar-extra.example.com' + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + fqdn: 'https://worker-extra.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.regex=^(http|https)://(?:www\.)?(.+)' + - 'traefik.http.middlewares.0-referenceservice00000001-to-www.redirectregex.replacement=$${1}://www.$${2}' + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=0-referenceservice00000001-to-www,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=0-referenceservice00000001-to-www,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir={scheme}://www.web.example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web.example.com, https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + logging: + driver: fluentd + options: + fluentd-address: 'tcp://127.0.0.1:24224' + fluentd-async: 'true' + fluentd-sub-second-precision: 'true' + env: 'COOLIFY_APP_NAME,COOLIFY_PROJECT_NAME,COOLIFY_SERVER_IP,COOLIFY_ENVIRONMENT_NAME' + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.permanent=false + - 'traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.regex=^(http|https)://www\.(.+)' + - 'traefik.http.middlewares.0-referenceservice00000001-to-non-www.redirectregex.replacement=$${1}://$${2}' + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip,0-referenceservice00000001-to-non-www' + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.redir=https://example.com{uri}' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + COOLIFY_FQDN: worker-extra.example.com + COOLIFY_URL: 'https://worker-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.service=http-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.service=https-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls=true + - traefik.http.services.http-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://worker-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + COOLIFY_FQDN: scheduler-extra.example.com + COOLIFY_URL: 'https://scheduler-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.service=http-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.service=https-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls=true + - traefik.http.services.http-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://scheduler-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://sidecar-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + COOLIFY_FQDN: sidecar-extra.example.com + COOLIFY_URL: 'https://sidecar-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true diff --git a/tests/Fixtures/parser/expected/reference-with-exact-caddy-labels.yaml b/tests/Fixtures/parser/expected/reference-with-exact-caddy-labels.yaml new file mode 100644 index 0000000000..2f615bc2e9 --- /dev/null +++ b/tests/Fixtures/parser/expected/reference-with-exact-caddy-labels.yaml @@ -0,0 +1,2397 @@ +1_deploy: + applications: + api: + fqdn: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api-referenceservice00000001.10.0.0.1.sslip.io/api + SERVICE_FQDN_BLOG: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + SERVICE_FQDN_BLOG_2368: 'blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP_80: 'my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_FQDN_WEB: web-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_8080: 'web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_FQDN_WWW: www-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_URL_BLOG: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_URL_BLOG_2368: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_URL_WEB: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api-referenceservice00000001.10.0.0.1.sslip.io/api + COOLIFY_URL: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://www-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + COOLIFY_URL: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +2_custom_domains: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +3_domain_on_applications_without_one: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + fqdn: 'https://scheduler-extra.example.com' + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + fqdn: 'https://sidecar-extra.example.com' + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + fqdn: 'https://worker-extra.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + COOLIFY_FQDN: worker-extra.example.com + COOLIFY_URL: 'https://worker-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://worker-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + COOLIFY_FQDN: scheduler-extra.example.com + COOLIFY_URL: 'https://scheduler-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://scheduler-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - caddy_0.log.format=json + - caddy_0.log.output.roll_keep=5 + - caddy_0.log.output.roll_keep_for=168h + - caddy_0.log.output.roll_size=20MiB + - 'caddy_0.log.output=file /traffic/access.log' + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://sidecar-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + COOLIFY_FQDN: sidecar-extra.example.com + COOLIFY_URL: 'https://sidecar-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true diff --git a/tests/Fixtures/parser/expected/reference-with-exact-traefik-labels.yaml b/tests/Fixtures/parser/expected/reference-with-exact-traefik-labels.yaml new file mode 100644 index 0000000000..3e83e83686 --- /dev/null +++ b/tests/Fixtures/parser/expected/reference-with-exact-traefik-labels.yaml @@ -0,0 +1,2430 @@ +1_deploy: + applications: + api: + fqdn: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api-referenceservice00000001.10.0.0.1.sslip.io/api + SERVICE_FQDN_BLOG: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + SERVICE_FQDN_BLOG_2368: 'blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP_80: 'my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_FQDN_WEB: web-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_8080: 'web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_FQDN_WWW: www-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_URL_BLOG: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_URL_BLOG_2368: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_URL_WEB: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api-referenceservice00000001.10.0.0.1.sslip.io/api + COOLIFY_URL: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=http-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + COOLIFY_URL: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=http-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/ws`)' + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +2_custom_domains: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +3_domain_on_applications_without_one: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + fqdn: 'https://scheduler-extra.example.com' + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + fqdn: 'https://sidecar-extra.example.com' + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + fqdn: 'https://worker-extra.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + COOLIFY_FQDN: worker-extra.example.com + COOLIFY_URL: 'https://worker-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.service=http-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.service=https-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls=true + - traefik.http.services.http-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + COOLIFY_FQDN: scheduler-extra.example.com + COOLIFY_URL: 'https://scheduler-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.service=http-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.service=https-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls=true + - traefik.http.services.http-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls=true + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + COOLIFY_FQDN: sidecar-extra.example.com + COOLIFY_URL: 'https://sidecar-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true diff --git a/tests/Fixtures/parser/expected/reference-with-migrated-services.yaml b/tests/Fixtures/parser/expected/reference-with-migrated-services.yaml new file mode 100644 index 0000000000..af7ce5b253 --- /dev/null +++ b/tests/Fixtures/parser/expected/reference-with-migrated-services.yaml @@ -0,0 +1,2651 @@ +1_deploy: + applications: + api: + fqdn: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + db: + fqdn: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 5432 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + gateway: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + web: + fqdn: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + databases: + sidecar: + exclude_from_status: true + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api-referenceservice00000001.10.0.0.1.sslip.io/api + SERVICE_FQDN_BLOG: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + SERVICE_FQDN_BLOG_2368: 'blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP_80: 'my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_FQDN_WEB: web-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_8080: 'web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_FQDN_WWW: www-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_URL_BLOG: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_URL_BLOG_2368: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_URL_WEB: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api-referenceservice00000001.10.0.0.1.sslip.io/api + COOLIFY_URL: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=http-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://www-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + COOLIFY_URL: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=http-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/ws`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + COOLIFY_FQDN: db-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=db + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-db-d77d.rule=Host(`db-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.service=http-0-referenceservice00000001-db-d77d + - traefik.http.services.http-0-referenceservice00000001-db-d77d.loadbalancer.server.port=5432 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 5432}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://db-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +2_custom_domains: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + db: + fqdn: 'https://db.example.com' + required_port: 5432 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + sidecar: + exclude_from_status: true + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db.example.com + SERVICE_FQDN_DB_5432: 'db.example.com:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'https://db.example.com' + SERVICE_URL_DB_5432: 'https://db.example.com:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'https://db.example.com:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + COOLIFY_FQDN: db.example.com + COOLIFY_URL: 'https://db.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=db + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-db-d77d.rule=Host(`db.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.service=http-0-referenceservice00000001-db-d77d + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-db-d77d.rule=Host(`db.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.service=https-0-referenceservice00000001-db-d77d + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.tls=true + - traefik.http.services.http-0-referenceservice00000001-db-d77d.loadbalancer.server.port=5432 + - traefik.http.services.https-0-referenceservice00000001-db-d77d.loadbalancer.server.port=5432 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 5432}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://db.example.com' + - caddy_ingress_network=referenceservice00000001 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +3_domain_on_applications_without_one: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + db: + fqdn: 'https://db.example.com' + required_port: 5432 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + fqdn: 'https://scheduler-extra.example.com' + required_port: 8080 + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + fqdn: 'https://worker-extra.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + sidecar: + exclude_from_status: true + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db.example.com + SERVICE_FQDN_DB_5432: 'db.example.com:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'https://db.example.com' + SERVICE_URL_DB_5432: 'https://db.example.com:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + COOLIFY_FQDN: worker-extra.example.com + COOLIFY_URL: 'https://worker-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.service=http-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.service=https-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls=true + - traefik.http.services.http-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://worker-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + COOLIFY_FQDN: scheduler-extra.example.com + COOLIFY_URL: 'https://scheduler-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.service=http-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.service=https-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls=true + - traefik.http.services.http-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://scheduler-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'https://db.example.com:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + COOLIFY_FQDN: db.example.com + COOLIFY_URL: 'https://db.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=db + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-db-d77d.rule=Host(`db.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-db-d77d.service=http-0-referenceservice00000001-db-d77d + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-db-d77d.rule=Host(`db.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.service=https-0-referenceservice00000001-db-d77d + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-db-d77d.tls=true + - traefik.http.services.http-0-referenceservice00000001-db-d77d.loadbalancer.server.port=5432 + - traefik.http.services.https-0-referenceservice00000001-db-d77d.loadbalancer.server.port=5432 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 5432}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://db.example.com' + - caddy_ingress_network=referenceservice00000001 + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true diff --git a/tests/Fixtures/parser/expected/reference.yaml b/tests/Fixtures/parser/expected/reference.yaml new file mode 100644 index 0000000000..3fe9d52d40 --- /dev/null +++ b/tests/Fixtures/parser/expected/reference.yaml @@ -0,0 +1,2598 @@ +1_deploy: + applications: + api: + fqdn: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api-referenceservice00000001.10.0.0.1.sslip.io/api + SERVICE_FQDN_BLOG: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + SERVICE_FQDN_BLOG_2368: 'blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP_80: 'my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_FQDN_WEB: web-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_WEB_8080: 'web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_FQDN_WWW: www-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_URL_BLOG: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_URL_BLOG_2368: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + SERVICE_URL_WEB: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://web-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://web-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api-referenceservice00000001.10.0.0.1.sslip.io/api + COOLIFY_URL: 'http://api-referenceservice00000001.10.0.0.1.sslip.io/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=http-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://api-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://my_app-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://www-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://www-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog-referenceservice00000001.10.0.0.1.sslip.io/blog + COOLIFY_URL: 'http://blog-referenceservice00000001.10.0.0.1.sslip.io/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://blog-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway-referenceservice00000001.10.0.0.1.sslip.io/ws + COOLIFY_URL: 'http://gateway-referenceservice00000001.10.0.0.1.sslip.io/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.http-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=http-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway-referenceservice00000001.10.0.0.1.sslip.io`) && PathPrefix(`/ws`)' + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=http://gateway-referenceservice00000001.10.0.0.1.sslip.io' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'http://web-referenceservice00000001.10.0.0.1.sslip.io:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +2_custom_domains: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true +3_domain_on_applications_without_one: + applications: + api: + fqdn: 'https://api.example.com/api' + required_port: 3000 + exclude_from_status: false + ports: '3000:3000,3001:3001/tcp' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/api-data + mount_path: /data + is_directory: true + blog: + fqdn: 'https://blog.example.com/blog' + required_port: 2368 + exclude_from_status: false + ports: '' + gateway: + fqdn: 'https://gateway.example.com' + exclude_from_status: false + ports: '' + gateway-ws: + fqdn: 'https://gateway.example.com/ws' + exclude_from_status: false + ports: '' + my-app: + fqdn: 'https://my_app.example.com' + required_port: 80 + exclude_from_status: false + ports: '' + scheduler: + fqdn: 'https://scheduler-extra.example.com' + required_port: 8080 + exclude_from_status: true + ports: '' + sidecar: + fqdn: 'https://sidecar-extra.example.com' + exclude_from_status: true + ports: '' + web: + fqdn: 'https://web.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + files: + - + fs_path: /data/coolify/services/referenceservice00000001/web-init.sh + mount_path: /docker-entrypoint.d/init.sh + is_directory: false + content: | + #!/bin/sh + echo "reference fixture" + - + fs_path: /data/coolify/services/referenceservice00000001/config + mount_path: /etc/nginx/conf.d + is_directory: true + worker: + fqdn: 'https://worker-extra.example.com' + required_port: 8080 + exclude_from_status: false + ports: '' + www: + fqdn: 'https://www.example.com' + exclude_from_status: false + ports: '' + databases: + db: + exclude_from_status: false + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + environment_variables: + API_URL: '${SERVICE_URL_API}' + APP_URL: '${SERVICE_URL_WEB}' + BARE_PASSTHROUGH: null + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + BUILD_VERSION: null + DASH_DEFAULT_VAR: null + GHOST_URL: '${SERVICE_URL_GHOST}' + HEX_128: '${SERVICE_HEX_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + INTERPOLATED_HOST: null + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + MAP_NULL: null + NESTED_INNER: null + NESTED_NO_DEFAULT_INNER: null + NESTED_NO_DEFAULT_OUTER: null + NESTED_OUTER: null + NO_BRACES_DEFAULT_VAR: null + NO_BRACES_VALUE: null + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_USER: '${SERVICE_USER_DB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + REQUIRED: + value: 'REQUIRED must be set' + required: true + SELF_REF: null + SERVICE_BASE64_64_WEB: '' + SERVICE_BASE64_WEB: '' + SERVICE_FOO_WEB: null + SERVICE_FQDN_API: api.example.com/api + SERVICE_FQDN_BLOG: blog.example.com/blog + SERVICE_FQDN_BLOG_2368: 'blog.example.com/blog:2368' + SERVICE_FQDN_DB: db-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_DB_5432: 'db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_FQDN_GATEWAY: gateway.example.com/ws + SERVICE_FQDN_GHOST: ghost-referenceservice00000001.10.0.0.1.sslip.io + SERVICE_FQDN_MY_APP: my_app.example.com + SERVICE_FQDN_MY_APP_80: 'my_app.example.com:80' + SERVICE_FQDN_WEB: web.example.com + SERVICE_FQDN_WEB_8080: 'web.example.com:8080' + SERVICE_FQDN_WWW: www.example.com + SERVICE_HEX_128_WEB: '' + SERVICE_HEX_32_WEB: '' + SERVICE_LOWERCASEUSER_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_64_WEB: '' + SERVICE_PASSWORDWITHSYMBOLS_WEB: '' + SERVICE_PASSWORD_64_WEB: '' + SERVICE_PASSWORD_DB: '' + SERVICE_PASSWORD_WEB: '' + SERVICE_REALBASE64_128_WEB: '' + SERVICE_REALBASE64_64_WEB: '' + SERVICE_SUPABASEANON_KEY: null + SERVICE_URL_API: 'https://api.example.com/api' + SERVICE_URL_BLOG: 'https://blog.example.com/blog' + SERVICE_URL_BLOG_2368: 'https://blog.example.com/blog:2368' + SERVICE_URL_DB: 'http://db-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + SERVICE_URL_GATEWAY: 'https://gateway.example.com/ws' + SERVICE_URL_GHOST: 'http://ghost-referenceservice00000001.10.0.0.1.sslip.io' + SERVICE_URL_MY_APP: 'https://my_app.example.com' + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + SERVICE_URL_WEB: 'https://web.example.com' + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + SERVICE_URL_WWW: 'https://www.example.com' + SERVICE_USER_DB: '' + SERVICE_USER_WEB: '' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + USER: '${SERVICE_USER_WEB}' + WITH_DEFAULT: null + compose: + services: + web: + image: 'nginx:alpine' + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + LITERAL: plain-value + BARE_PASSTHROUGH: '' + SELF_REF: '${SELF_REF}' + WITH_DEFAULT: '${WITH_DEFAULT:-fallback}' + REQUIRED: '${REQUIRED:?REQUIRED must be set}' + NO_BRACES: $NO_BRACES_VALUE + NESTED: '${NESTED_OUTER:-${NESTED_INNER:-inner-default}}' + NESTED_NO_DEFAULT: '${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}' + DASH_DEFAULT: '${DASH_DEFAULT_VAR-dash-default}' + NO_BRACES_DEFAULT: '$NO_BRACES_DEFAULT_VAR:-no-braces-default' + SHARED: shared-value + SHARED_MISSING: '{{environment.NOT_DEFINED}}' + INTERPOLATED: 'http://${INTERPOLATED_HOST:-localhost}/path' + PASSWORD: '${SERVICE_PASSWORD_WEB}' + PASSWORD_64: '${SERVICE_PASSWORD_64_WEB}' + PASSWORD_SYMBOLS: '${SERVICE_PASSWORDWITHSYMBOLS_WEB}' + BASE64: '${SERVICE_BASE64_WEB}' + BASE64_64: '${SERVICE_BASE64_64_WEB}' + REALBASE64_64: '${SERVICE_REALBASE64_64_WEB}' + PASSWORD_SYMBOLS_64: '${SERVICE_PASSWORDWITHSYMBOLS_64_WEB}' + REALBASE64_128: '${SERVICE_REALBASE64_128_WEB}' + HEX_32: '${SERVICE_HEX_32_WEB}' + HEX_128: '${SERVICE_HEX_128_WEB}' + SUPABASE_ANON_WITHOUT_JWT: '${SERVICE_SUPABASEANON_KEY}' + USER: '${SERVICE_USER_WEB}' + LOWERCASE_USER: '${SERVICE_LOWERCASEUSER_WEB}' + UNKNOWN_MAGIC: '${SERVICE_FOO_WEB}' + API_URL: '${SERVICE_URL_API}' + NO_BRACES_VALUE: null + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: web-referenceservice00000001 + COOLIFY_FQDN: web.example.com + COOLIFY_URL: 'https://web.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + labels: + - com.example.team=platform + - com.example.dollar=price-$$5 + - traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference=1 + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=web-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=web + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=web + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-web-2567.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-web-2567.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-web-2567.service=http-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.middlewares=gzip,reference-headers' + - 'traefik.http.routers.https-0-referenceservice00000001-web-2567.rule=Host(`web.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-web-2567.service=https-0-referenceservice00000001-web-2567 + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-web-2567.tls=true + - traefik.http.services.http-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-web-2567.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://web.example.com' + - caddy_ingress_network=referenceservice00000001 + volumes: + - 'referenceservice00000001_web-data:/usr/share/nginx/html' + - '/data/coolify/services/referenceservice00000001/config:/etc/nginx/conf.d:ro' + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - + type: bind + source: /data/coolify/services/referenceservice00000001/web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + bind: + create_host_path: true + healthcheck: + test: + - CMD + - wget + - '-qO-' + - 'http://127.0.0.1:8080' + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: + - custom.env + - .env + container_name: web-referenceservice00000001 + restart: unless-stopped + networks: + referenceservice00000001: null + api: + image: 'node:22-alpine' + build: + context: . + args: + - 'BUILD_VERSION=${BUILD_VERSION:-1.0.0}' + environment: + MAP_LITERAL: map-value + MAP_NULL: null + GHOST_URL: '${SERVICE_URL_GHOST}' + DB_URL: 'postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app' + BUILD_VERSION: '${BUILD_VERSION:-1.0.0}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: api-referenceservice00000001 + COOLIFY_FQDN: api.example.com/api + COOLIFY_URL: 'https://api.example.com/api' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + ports: + - '3000:3000' + - + target: 3001 + published: 3001 + protocol: tcp + volumes: + - 'nfs-data:/mnt/nfs' + - + type: bind + source: /data/coolify/services/referenceservice00000001/api-data + target: /data + bind: + create_host_path: true + - + type: bind + source: /data/coolify/services/referenceservice00000001/optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + container_name: api-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=api-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=api + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=api + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-api-8a5d-stripprefix.stripprefix.prefixes=/api + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.http-0-referenceservice00000001-api-8a5d.service=http-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.middlewares=https-0-referenceservice00000001-api-8a5d-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-api-8a5d.rule=Host(`api.example.com`) && PathPrefix(`/api`)' + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.service=https-0-referenceservice00000001-api-8a5d + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-api-8a5d.tls=true + - traefik.http.services.http-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - traefik.http.services.https-0-referenceservice00000001-api-8a5d.loadbalancer.server.port=3000 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 3000}}' + - 'caddy_0.handle_path=/api*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://api.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + my-app: + image: 'httpd:2.4-alpine' + environment: + SERVICE_URL_MY_APP_80: 'https://my_app.example.com:80' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: my-app-referenceservice00000001 + COOLIFY_FQDN: my_app.example.com + COOLIFY_URL: 'https://my_app.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: my-app-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=my-app-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=my-app + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=my-app + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-my-app-4dcb.service=http-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.rule=Host(`my_app.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.service=https-0-referenceservice00000001-my-app-4dcb + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-my-app-4dcb.tls=true + - traefik.http.services.http-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - traefik.http.services.https-0-referenceservice00000001-my-app-4dcb.loadbalancer.server.port=80 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://my_app.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + www: + image: 'nginx:alpine' + environment: + SERVICE_URL_WWW: 'https://www.example.com' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: www-referenceservice00000001 + COOLIFY_FQDN: www.example.com + COOLIFY_URL: 'https://www.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: www-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=www-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=www + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=www + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-www-4eae.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-www-4eae.rule=Host(`www.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-www-4eae.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://www.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + blog: + image: 'ghost:5-alpine' + environment: + SERVICE_URL_BLOG_2368: /blog + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: blog-referenceservice00000001 + COOLIFY_FQDN: blog.example.com/blog + COOLIFY_URL: 'https://blog.example.com/blog' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: blog-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=blog-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=blog + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=blog + - traefik.docker.network=referenceservice00000001 + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.handler=rewrite + - 'caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.regexp=^/blog/(.*)' + - caddy_0.handle_path.0_redir-ghost-referenceservice00000001.rewrite.replacement=/$1 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - 'traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.regex=^/blog/(.*)' + - traefik.http.middlewares.redir-ghost-referenceservice00000001.redirectregex.replacement=/$1 + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.http-0-referenceservice00000001-blog-126a.service=http-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.middlewares=gzip,redir-ghost-referenceservice00000001' + - 'traefik.http.routers.https-0-referenceservice00000001-blog-126a.rule=Host(`blog.example.com`) && PathPrefix(`/blog`)' + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.service=https-0-referenceservice00000001-blog-126a + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-blog-126a.tls=true + - traefik.http.services.http-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - traefik.http.services.https-0-referenceservice00000001-blog-126a.loadbalancer.server.port=2368 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 2368}}' + - 'caddy_0.handle_path=/blog*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://blog.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: / + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com + COOLIFY_URL: 'https://gateway.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.rule=Host(`gateway.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-3e21.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + gateway-ws: + image: traefik/whoami + environment: + SERVICE_URL_GATEWAY: /ws + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: gateway-ws-referenceservice00000001 + COOLIFY_FQDN: gateway.example.com/ws + COOLIFY_URL: 'https://gateway.example.com/ws' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: gateway-ws-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=gateway-ws-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=gateway-ws + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=gateway-ws + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.https-0-referenceservice00000001-gateway-ws-d203-stripprefix.stripprefix.prefixes=/ws + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.entryPoints=https + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.middlewares=https-0-referenceservice00000001-gateway-ws-d203-stripprefix,gzip' + - 'traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.rule=Host(`gateway.example.com`) && PathPrefix(`/ws`)' + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-gateway-ws-d203.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/ws*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://gateway.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + worker: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + SERVICE_URL_WEB_8080: 'https://web.example.com:8080' + APP_URL: '${SERVICE_URL_WEB}' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: worker-referenceservice00000001 + COOLIFY_FQDN: worker-extra.example.com + COOLIFY_URL: 'https://worker-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: worker-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=worker-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=worker + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=worker + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-worker-b618.service=http-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-worker-b618.rule=Host(`worker-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.service=https-0-referenceservice00000001-worker-b618 + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-worker-b618.tls=true + - traefik.http.services.http-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-worker-b618.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://worker-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + scheduler: + image: 'nginx:alpine' + command: + - sleep + - infinity + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: scheduler-referenceservice00000001 + COOLIFY_FQDN: scheduler-extra.example.com + COOLIFY_URL: 'https://scheduler-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + container_name: scheduler-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=scheduler-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=scheduler + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=scheduler + - traefik.docker.network=referenceservice00000001 + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.http-0-referenceservice00000001-scheduler-499f.service=http-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.rule=Host(`scheduler-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.service=https-0-referenceservice00000001-scheduler-499f + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-scheduler-499f.tls=true + - traefik.http.services.http-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - traefik.http.services.https-0-referenceservice00000001-scheduler-499f.loadbalancer.server.port=8080 + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 8080}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://scheduler-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + networks: + referenceservice00000001: null + env_file: + - .env + db: + image: 'postgres:16-alpine' + environment: + POSTGRES_USER: '${SERVICE_USER_DB}' + POSTGRES_PASSWORD: '${SERVICE_PASSWORD_DB}' + POSTGRES_DB: app + SERVICE_URL_DB_5432: 'http://db-referenceservice00000001.10.0.0.1.sslip.io:5432' + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: db-referenceservice00000001 + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + volumes: + - 'referenceservice00000001_db-data:/var/lib/postgresql/data' + - 'shared-external:/backups' + networks: + internal: null + referenceservice00000001: null + healthcheck: + test: + - CMD-SHELL + - 'pg_isready -U $${POSTGRES_USER}' + interval: 5s + container_name: db-referenceservice00000001 + restart: unless-stopped + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=db-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=db + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=database + - coolify.service.subName=db + env_file: + - .env + sidecar: + image: busybox + restart: 'no' + network_mode: 'service:web' + command: + - 'true' + container_name: sidecar-referenceservice00000001 + labels: + - coolify.managed=true + - coolify.version= + - coolify.serviceUuid=referenceservice00000001 + - coolify.type=service + - coolify.name=sidecar-referenceservice00000001 + - coolify.resourceName=reference + - coolify.projectName=reference-project + - coolify.serviceName=sidecar + - coolify.environmentName=production + - coolify.pullRequestId=0 + - 'coolify.service.subUuid=' + - coolify.service.subType=application + - coolify.service.subName=sidecar + - traefik.enable=true + - traefik.http.middlewares.gzip.compress=true + - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.entryPoints=http + - traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.middlewares=redirect-to-https + - 'traefik.http.routers.http-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.entryPoints=https + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.middlewares=gzip + - 'traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.rule=Host(`sidecar-extra.example.com`) && PathPrefix(`/`)' + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls.certresolver=letsencrypt + - traefik.http.routers.https-0-referenceservice00000001-sidecar-9523.tls=true + - 'caddy_0.encode=zstd gzip' + - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}' + - 'caddy_0.handle_path=/*' + - caddy_0.header=-Server + - 'caddy_0.try_files={path} /index.html /index.php' + - 'caddy_0=https://sidecar-extra.example.com' + - caddy_ingress_network=referenceservice00000001 + environment: + COOLIFY_RESOURCE_UUID: referenceservice00000001 + COOLIFY_CONTAINER_NAME: sidecar-referenceservice00000001 + COOLIFY_FQDN: sidecar-extra.example.com + COOLIFY_URL: 'https://sidecar-extra.example.com' + SERVICE_NAME_WEB: web + SERVICE_NAME_API: api + SERVICE_NAME_MY_APP: my-app + SERVICE_NAME_WWW: www + SERVICE_NAME_BLOG: blog + SERVICE_NAME_GATEWAY: gateway + SERVICE_NAME_GATEWAY_WS: gateway-ws + SERVICE_NAME_WORKER: worker + SERVICE_NAME_SCHEDULER: scheduler + SERVICE_NAME_DB: db + SERVICE_NAME_SIDECAR: sidecar + env_file: + - .env + volumes: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: 'addr=10.0.0.2,rw' + device: ':/exports/data' + referenceservice00000001_web-data: + name: referenceservice00000001_web-data + referenceservice00000001_db-data: + driver_opts: + type: none + o: bind + device: /srv/db + name: referenceservice00000001_db-data + networks: + internal: null + default: null + aliased: + aliases: + - alias-name + referenceservice00000001: + name: referenceservice00000001 + external: true diff --git a/tests/Fixtures/parser/expected/unsafe-service-name.yaml b/tests/Fixtures/parser/expected/unsafe-service-name.yaml new file mode 100644 index 0000000000..7e7f49e9f9 --- /dev/null +++ b/tests/Fixtures/parser/expected/unsafe-service-name.yaml @@ -0,0 +1,2 @@ +1_deploy: + error: "Exception: Invalid Docker Compose service name: Invalid service name: contains forbidden character ';' (command separator). Shell metacharacters are not allowed for security reasons. Service names must not contain shell metacharacters." diff --git a/tests/Fixtures/parser/expected/unsafe-volume-path.yaml b/tests/Fixtures/parser/expected/unsafe-volume-path.yaml new file mode 100644 index 0000000000..5370991291 --- /dev/null +++ b/tests/Fixtures/parser/expected/unsafe-volume-path.yaml @@ -0,0 +1,2 @@ +1_deploy: + error: "Exception: Invalid Docker volume definition: Invalid volume source: contains forbidden character ';' (command separator). Shell metacharacters are not allowed for security reasons. Please use safe path names without shell metacharacters." diff --git a/tests/Fixtures/parser/service-invalid-yaml.yaml b/tests/Fixtures/parser/service-invalid-yaml.yaml new file mode 100644 index 0000000000..914aeeb100 --- /dev/null +++ b/tests/Fixtures/parser/service-invalid-yaml.yaml @@ -0,0 +1,5 @@ +# Reference compose for the service parser: invalid YAML gives an empty result. +services: + web: + image: nginx:alpine + environment: [unclosed diff --git a/tests/Fixtures/parser/service-reference.yaml b/tests/Fixtures/parser/service-reference.yaml new file mode 100644 index 0000000000..8da5c33869 --- /dev/null +++ b/tests/Fixtures/parser/service-reference.yaml @@ -0,0 +1,181 @@ +# Reference compose for the service parser (serviceParser + updateCompose). +# Test-only: tests/Feature/ServiceParserReferenceTest.php parses it and compares the result +# with service-reference.expected.yaml. Each service covers one group of parser features. +services: + # Domain with a port, magic secrets, all environment syntaxes, labels, volumes. + web: + image: nginx:alpine + environment: + - SERVICE_URL_WEB_8080 + - LITERAL=plain-value + - BARE_PASSTHROUGH + - SELF_REF=${SELF_REF} + - WITH_DEFAULT=${WITH_DEFAULT:-fallback} + - REQUIRED=${REQUIRED:?REQUIRED must be set} + - NO_BRACES=$NO_BRACES_VALUE + - NESTED=${NESTED_OUTER:-${NESTED_INNER:-inner-default}} + - NESTED_NO_DEFAULT=${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}} + - DASH_DEFAULT=${DASH_DEFAULT_VAR-dash-default} + - NO_BRACES_DEFAULT=$NO_BRACES_DEFAULT_VAR:-no-braces-default + - SHARED={{environment.SHARED_KEY}} + - SHARED_MISSING={{environment.NOT_DEFINED}} + - INTERPOLATED=http://${INTERPOLATED_HOST:-localhost}/path + - PASSWORD=${SERVICE_PASSWORD_WEB} + - PASSWORD_64=${SERVICE_PASSWORD_64_WEB} + - PASSWORD_SYMBOLS=${SERVICE_PASSWORDWITHSYMBOLS_WEB} + - BASE64=${SERVICE_BASE64_WEB} + - BASE64_64=${SERVICE_BASE64_64_WEB} + - REALBASE64_64=${SERVICE_REALBASE64_64_WEB} + - PASSWORD_SYMBOLS_64=${SERVICE_PASSWORDWITHSYMBOLS_64_WEB} + - REALBASE64_128=${SERVICE_REALBASE64_128_WEB} + - HEX_32=${SERVICE_HEX_32_WEB} + - HEX_128=${SERVICE_HEX_128_WEB} + - SUPABASE_ANON_WITHOUT_JWT=${SERVICE_SUPABASEANON_KEY} + - USER=${SERVICE_USER_WEB} + - LOWERCASE_USER=${SERVICE_LOWERCASEUSER_WEB} + - UNKNOWN_MAGIC=${SERVICE_FOO_WEB} + - API_URL=${SERVICE_URL_API} + labels: + com.example.team: platform + com.example.dollar: price-$5 + traefik.http.middlewares.reference-headers.headers.customresponseheaders.X-Reference: "1" + volumes: + - web-data:/usr/share/nginx/html + - ./config:/etc/nginx/conf.d:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - type: bind + source: ./web-init.sh + target: /docker-entrypoint.d/init.sh + read_only: true + content: | + #!/bin/sh + echo "reference fixture" + healthcheck: + test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8080"] + interval: 10s + depends_on: + db: + condition: service_healthy + env_file: custom.env + + # Path value with FQDN declaration, map-style environment, build args, ports. + api: + image: node:22-alpine + build: + context: . + args: + - BUILD_VERSION=${BUILD_VERSION:-1.0.0} + environment: + SERVICE_FQDN_API: /api + MAP_LITERAL: map-value + MAP_NULL: + GHOST_URL: ${SERVICE_URL_GHOST} + DB_URL: postgres://${SERVICE_USER_DB}:${SERVICE_PASSWORD_DB}@db:5432/app + ports: + - "3000:3000" + - target: 3001 + published: 3001 + protocol: tcp + volumes: + - nfs-data:/mnt/nfs + - type: bind + source: ./api-data + target: /data + - type: bind + source: ./optional + target: /optional + bind: + create_host_path: false + expose: + - 3000 + + # Hyphenated service name: SERVICE_URL_MY_APP maps to compose service "my-app". + my-app: + image: httpd:2.4-alpine + environment: + - SERVICE_URL_MY_APP_80 + + # Host www.example.com after the custom domain step (redirect to non-www in the settings case). + www: + image: nginx:alpine + environment: + - SERVICE_URL_WWW + + # Ghost image with a path domain: extra redirect labels for the path. + blog: + image: ghost:5-alpine + environment: + - SERVICE_URL_BLOG_2368=/blog + + # Shared host with path routing (Appwrite style): same variable, different paths. + gateway: + image: traefik/whoami + environment: + - SERVICE_URL_GATEWAY=/ + gateway-ws: + image: traefik/whoami + environment: + - SERVICE_URL_GATEWAY=/ws + + # Exact copy of web's declaration (old Twenty template, #11924): no domain, no variable writes. + worker: + image: nginx:alpine + command: ["sleep", "infinity"] + environment: + - SERVICE_URL_WEB_8080 + - APP_URL=${SERVICE_URL_WEB} + + # SERVICE_FQDN_ twin of web's SERVICE_URL_ declaration: also a copy. + scheduler: + image: nginx:alpine + command: ["sleep", "infinity"] + environment: + - SERVICE_FQDN_WEB_8080 + exclude_from_hc: true + + # Database image: ServiceDatabase row, no domain, no proxy labels. + db: + image: postgres:16-alpine + environment: + - POSTGRES_USER=${SERVICE_USER_DB} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_DB} + - POSTGRES_DB=app + - SERVICE_URL_DB_5432 + volumes: + - db-data:/var/lib/postgresql/data + - shared-external:/backups + networks: + - internal + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"] + interval: 5s + + # restart "no": excluded from status checks; shares web's network namespace. + sidecar: + image: busybox + restart: "no" + network_mode: "service:web" + command: ["true"] + +volumes: + web-data: + db-data: + driver_opts: + type: none + o: bind + device: /srv/db + shared-external: + external: true + nfs-data: + driver_opts: + type: nfs + o: addr=10.0.0.2,rw + device: ":/exports/data" + +networks: + internal: + default: + # Networks with aliases are not added to every service. + aliased: + aliases: + - alias-name diff --git a/tests/Fixtures/parser/service-unsafe-name.yaml b/tests/Fixtures/parser/service-unsafe-name.yaml new file mode 100644 index 0000000000..75c6a8acb4 --- /dev/null +++ b/tests/Fixtures/parser/service-unsafe-name.yaml @@ -0,0 +1,4 @@ +# Reference compose for the service parser: a service name with shell metacharacters is rejected. +services: + "web;rm -rf /": + image: nginx:alpine diff --git a/tests/Fixtures/parser/service-unsafe.yaml b/tests/Fixtures/parser/service-unsafe.yaml new file mode 100644 index 0000000000..b148e6f7cc --- /dev/null +++ b/tests/Fixtures/parser/service-unsafe.yaml @@ -0,0 +1,6 @@ +# Reference compose for the service parser error path: a bind source with shell metacharacters must be rejected. +services: + web: + image: nginx:alpine + volumes: + - "./data;touch /tmp/pwned:/data"