ef85ae6ea1
http://flights-ui.devwebzavod.ru/ru/flights-map was still hitting the same-origin tile path after adding the k8s env: Modern.js renders the <Suspense> fallback on the server (i18n isn't preloaded), so the route component that reads getEnv() never actually runs during SSR. The page hydrates client-side, where process.env is Rspack's empty stub and MAP_TILE_URL is never set — getEnv() falls back to the default. Move the value into window.__ENV__ instead: - modern.config.ts: inline a <script> into html.tags that sets window.__ENV__ = { MAP_TILE_URL: <value> } at SSR-server startup. The snippet is authored once at server boot, so the HTML template baked into dist/standalone/html/main/index.html always carries the pod's tile URL. - src/env/index.ts: merge window.__ENV__ on top of process.env so the browser prefers the injected value (process.env only has NODE_ENV after Rspack's polyfill). - Dockerfile.react: accept MAP_TILE_URL as a build ARG and expose it as ENV before `pnpm build:standalone`, so Modern.js picks it up when building the HTML template. k8s env still flows into the Node SSR process; the build-arg path guarantees correctness even when the runtime env is stripped. - deployment/build-docker.sh: forward MAP_TILE_URL through as a build-arg (default keeps the same-origin path). CI on the devwebzavod cluster can export MAP_TILE_URL=https://flights.test.aeroflot.ru/map/api/tile/{z}/{x}/{y}.jpeg before running build-docker.sh and the resulting image will serve tiles from the upstream the real Aeroflot ingress terminates.
29 lines
1.0 KiB
Bash
29 lines
1.0 KiB
Bash
#!/bin/bash
|
|
|
|
echo -e "\E[1;34mCleanup docker build cache to reduce disk usage\E[1;0m"
|
|
docker image prune -f
|
|
docker container prune -f
|
|
|
|
function build {
|
|
K8NAMESPACE="flights-ui"
|
|
echo -e "\E[1;34mBuilding $2 ($1)\E[1;0m"
|
|
export CopyRetryCount=100
|
|
docker rmi -f $(docker images aeroflot.$K8NAMESPACE/$1 -a -q|uniq) >/dev/null 2>/dev/null
|
|
ls -l "$2/Dockerfile"
|
|
# MAP_TILE_URL must be a build-arg (not just a runtime env) because
|
|
# Modern.js bakes html.tags into the HTML template at `pnpm build:standalone`
|
|
# time. Setting it only on the pod won't change the served HTML.
|
|
# Defaults here keep the prod-cluster behavior (same-origin) intact;
|
|
# devwebzavod builds override with the flights.test.aeroflot.ru URL.
|
|
: "${MAP_TILE_URL:=/map/api/tile/{z}/{x}/{y}.jpeg}"
|
|
export MAP_TILE_URL
|
|
docker build -t aeroflot.$K8NAMESPACE/$1:v$VERSION.$BUILD_NUMBER \
|
|
--build-arg ENVIRONMENT=${ENVIRONMENT} \
|
|
--build-arg=NPM_PROXY \
|
|
--build-arg MAP_TILE_URL=${MAP_TILE_URL} \
|
|
-f "$2/Dockerfile" $2
|
|
}
|
|
|
|
build flights-ui "../Aeroflot.Flights.Front"
|
|
|
|
exit 0 |