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.
74 lines
1.5 KiB
Bash
74 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
export K8NAMESPACE="flights-ui"
|
|
|
|
echo "Create namespace [$K8NAMESPACE] if doesn't exist"
|
|
kubectl --kubeconfig $KUBECONFIG get namespace | grep -q "^$K8NAMESPACE " || kubectl --kubeconfig $KUBECONFIG create namespace $K8NAMESPACE
|
|
|
|
function deployImage {
|
|
export AFL_PRJ_NAME=$1
|
|
echo -e "\E[1;34mDeploy $AFL_PRJ_NAME\E[1;0m"
|
|
|
|
if [ "$IMAGE_PULL_SECRET" != "" ]
|
|
then
|
|
export IMAGE_PULL_SECRETS=$' imagePullSecrets:\n - name: '$IMAGE_PULL_SECRET$'\n'
|
|
else
|
|
export IMAGE_PULL_SECRETS=""
|
|
fi
|
|
|
|
echo "Using k8s yml file as following:"
|
|
envsubst < ./k8s/$AFL_PRJ_NAME.yaml
|
|
|
|
echo "Start kubectl apply..."
|
|
envsubst < ./k8s/$AFL_PRJ_NAME.yaml | kubectl --kubeconfig $KUBECONFIG apply -n $K8NAMESPACE -f -
|
|
|
|
echo -e "\E[1;34m ...done\E[1;0m"
|
|
}
|
|
|
|
function serve {
|
|
NAME=$1
|
|
PORT=$2
|
|
echo -e "\E[1;34mService $1 at port $2\E[1;0m"
|
|
|
|
cat <<EOF | kubectl --kubeconfig $KUBECONFIG apply -n $K8NAMESPACE -f /dev/stdin
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: $NAME
|
|
namespace: $K8NAMESPACE
|
|
spec:
|
|
ports:
|
|
- port: 80
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
name: $NAME
|
|
type: ClusterIP
|
|
EOF
|
|
}
|
|
|
|
function serveLB {
|
|
NAME=$1
|
|
PORT=$2
|
|
echo -e "\E[1;34mService $1 at port $2\E[1;0m"
|
|
|
|
cat <<EOF | kubectl --kubeconfig $KUBECONFIG apply -n $K8NAMESPACE -f /dev/stdin
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: $NAME
|
|
namespace: $K8NAMESPACE
|
|
spec:
|
|
ports:
|
|
- port: 80
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
name: $NAME
|
|
type: LoadBalancer
|
|
EOF
|
|
}
|
|
|
|
deployImage flights-ui
|
|
serveLB flights-ui
|