feat: docker setup and sync lejer am/imbang duga with kaunter (#1)

Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
2026-10-27 11:04:43 +08:00
parent 5300e81a95
commit 026e31d037
19 changed files with 400 additions and 134 deletions
+55
View File
@@ -0,0 +1,55 @@
<?php
if (!function_exists('api_url_for_browser')) {
/**
* Base URL for JavaScript in the browser.
* API_URL may be a Docker-only hostname (api_arrahn-app-1). Browsers use API_BROWSER_URL.
* Docker dev often uses host.docker.internal for PHP→host; browsers may not resolve it.
* Production URLs are unchanged when API_BROWSER_URL is empty.
*/
function api_url_for_browser(): string
{
$browser = rtrim((string) config('api.browser_url'), '/');
if ($browser !== '') {
return $browser;
}
$url = rtrim((string) config('api.url'), '/');
return str_ireplace('host.docker.internal', '127.0.0.1', $url);
}
}
if (!function_exists('api_url_for_server')) {
/**
* Base URL for PHP Http::get/put from this container.
* Vue posts MIX_API_URL (localhost:8080) as "hostname"; that is for the browser.
* Inside Docker, localhost is this container — map it to API_URL.
*/
function api_url_for_server(?string $url = null): string
{
$internal = rtrim((string) config('api.url'), '/');
if ($url === null || $url === '') {
return $internal;
}
$url = rtrim($url, '/');
$browser = rtrim((string) config('api.browser_url'), '/');
if ($internal === '') {
return $url;
}
if ($browser !== '' && strcasecmp($url, $browser) === 0) {
return $internal;
}
$host = parse_url($url, PHP_URL_HOST);
if (in_array($host, ['localhost', '127.0.0.1', 'host.docker.internal'], true)) {
return $internal;
}
return $url;
}
}