此软件包包含用于通信的组件、 utils、 提供者和钩子 equinor/SubsurfAppManagement 由扩充团队开发.
快速链接
建筑和出版
合并代码后自动构建和发布 main 分支,如果包.json版本号更高.
最新版本
通过 nginx 代理应用程序透视
自动屏蔽器屏蔽请求 *.in.applicationinsights.azure.com这样 ApplicationInsightsProvider 发送遥测到
同源路径 /ai/v2/track 而Nginx将它转发给Azure. 跟踪是可选的:没有
APPLICATION_INSIGHTS_CONNECTION_STRING 应用程序没有追踪到任何东西,Nginx不会暴露代理路径. 摄入量
主机从 IngestionEndpoint 在连接字符串中,返回到应用程序 Insights 默认值
(单位:千美元)dc.services.visualstudio.com) 当它没有,所以不需要单独的主机变量.
将下面的文件复制到您的应用程序 Repo 中, 替换已有的文件( 例取自 equinor/sam-frontend这样
保留您的应用程序特定部分, 如端口、运行时变量和构建步骤等 。 与应用程序有关的行
每个文件上方的注释都标出"洞察".
1. 创建 proxy/ai-proxy.conf.template
location = /ai/v2/track {
limit_req zone=ai burst=20 nodelay;
limit_req_status 429;
client_max_body_size 1m;
proxy_pass https://${APPLICATION_INSIGHTS_INGESTION_HOST}/v2/track;
proxy_ssl_server_name on;
proxy_ssl_verify on;
proxy_ssl_verify_depth 3;
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
proxy_set_header Host ${APPLICATION_INSIGHTS_INGESTION_HOST};
proxy_set_header X-Forwarded-For $remote_addr;
}
2. 替换 proxy/nginx.conf
用下面的文件替换文件 。 更改对标准设置: limit_req_zone 线条和
include /etc/nginx/ai-proxy.conf; 线条。 调整 listen,则 /api/ 如果您有不同的话, 代理和其他应用程序特定部件 .
limit_req_zone $binary_remote_addr zone=ai:10m rate=5r/s;
server {
listen 5001;
server_name localhost;
root /usr/share/nginx/html;
include /etc/nginx/conf.d/securityheaders.conf;
# Application Insights proxy (empty file when APPLICATION_INSIGHTS_CONNECTION_STRING isn't set)
include /etc/nginx/ai-proxy.conf;
location /api/ {
client_max_body_size 100M;
proxy_pass ${API_URL};
}
location / {
index index.html index.htm;
try_files $uri /index.html;
}
location /env-config.js {
add_header Cache-Control "no-cache";
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
expires off;
access_log off;
}
location /env.sh {
deny all;
}
location ~ \.html$ {
add_header Cache-Control "no-cache";
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
expires off;
access_log off;
include /etc/nginx/conf.d/securityheaders.conf;
}
}
ai-proxy.conf一定要住进去/etc/nginx/没有/etc/nginx/conf.d/. nginx 自动包含所有内容conf.d/*.conf输入http语境,其中location无效,但无法启动.
3. 替换 env.sh
用下面的文件替换文件 。 更改对标准设置: if 块在底部。 自己留着吧
value=... 行(每个运行时间变量一个,匹配) radixconfig.yaml如果两者不同.
#!/bin/sh
# Add assignment
echo "window._env_ = {" >>./env-config.js
# For all the environment variables we want to have at
# runtime (one to one with Radixconfig)
value=$(printf '%s\n' "${CLIENT_ID}")
echo " CLIENT_ID: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${API_CLIENT_ID}")
echo " API_CLIENT_ID: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${NAME}")
echo " NAME: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${API_URL}")
echo " API_URL: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${API_SCOPE}")
echo " API_SCOPE: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${ENVIRONMENT_NAME}")
echo " ENVIRONMENT_NAME: \"$value\"," >>./env-config.js
value=$(printf '%s\n' "${APPLICATION_INSIGHTS_CONNECTION_STRING}")
echo " APPLICATION_INSIGHTS_CONNECTION_STRING: \"$value\"," >>./env-config.js
echo "}" >>./env-config.js
# Application Insights proxy (optional): only render the location when a connection string is set.
# The host comes from its IngestionEndpoint, falling back to the Application Insights default.
if [ -n "${APPLICATION_INSIGHTS_CONNECTION_STRING}" ]; then
APPLICATION_INSIGHTS_INGESTION_HOST=$(printf '%s' "${APPLICATION_INSIGHTS_CONNECTION_STRING}" | tr ';' '\n' | sed -n 's/^IngestionEndpoint=https\{0,1\}:\/\/\([^/]*\).*/\1/p' | head -n 1)
export APPLICATION_INSIGHTS_INGESTION_HOST="${APPLICATION_INSIGHTS_INGESTION_HOST:-dc.services.visualstudio.com}"
envsubst '${APPLICATION_INSIGHTS_INGESTION_HOST}' </etc/nginx/ai-proxy.conf.template >/etc/nginx/ai-proxy.conf
else
: >/etc/nginx/ai-proxy.conf
fi
# Update nginx.conf and securityheaders.conf with relevant environment variables
envsubst '${API_URL}' </etc/nginx/conf.d/default.conf.template >/etc/nginx/conf.d/default.conf
envsubst '${API_URL}' </etc/nginx/conf.d/securityheaders.conf.template >/etc/nginx/conf.d/securityheaders.conf
4. 替换 Dockerfile
用下面的文件替换文件 。 更改对标准设置: ai-proxy.conf.template COPY 和两个
ai-proxy.conf 线条 RUN调整建设阶段和 EXPOSE 端口到您的应用程序.
# Base
FROM imbios/bun-node:22-alpine AS base
WORKDIR /app
COPY package.json ./
COPY bun.lock ./
COPY tsconfig.json ./
COPY vite.config.ts ./
COPY index.html ./
COPY src ./src
COPY public ./public
# Install dependencies and build
RUN bun install --frozen-lockfile && bun run build
# STAGE 2 => SETUP NGINX and Run
FROM nginxinc/nginx-unprivileged:alpine
USER 0
# Clear default nginx html file
RUN rm -rf /usr/share/nginx/html/*
COPY --from=base /app/dist /usr/share/nginx/html
COPY proxy/nginx.conf /etc/nginx/conf.d/default.conf.template
COPY proxy/securityheaders.conf /etc/nginx/conf.d/securityheaders.conf.template
COPY proxy/ai-proxy.conf.template /etc/nginx/ai-proxy.conf.template
EXPOSE 5001
# Copy shell script to container to handle runtime environment variables
WORKDIR /usr/share/nginx/html
COPY ./env.sh .
RUN rm -rf ./env-config.js \
&& touch ./env-config.js \
&& touch /etc/nginx/ai-proxy.conf \
&& chown nginx ./env-config.js /etc/nginx/ai-proxy.conf \
&& chown -R nginx /etc/nginx/conf.d \
&& chown -R nginx /usr/share/nginx/html \
&& chmod +x ./env.sh
USER 101
CMD ["/bin/sh", "-c", "./env.sh && nginx -g \"daemon off;\""]
5. 最新情况 radixconfig.yaml
对于每个应该跟踪的环境,设置连接字符串. 代理目标从它的
IngestionEndpoint 自动( 或应用程序 Insights 默认, 如果没有) 。 对于没有环境
追踪,设定为 '' 或弃去.
APPLICATION_INSIGHTS_CONNECTION_STRING: 'InstrumentationKey=...;IngestionEndpoint=https://northeurope-4.in.applicationinsights.azure.com/;...'
6. 核实
docker build -t app .
docker run --rm -d --name app-test -p 5001:5001 -e APPLICATION_INSIGHTS_CONNECTION_STRING='InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://northeurope-4.in.applicationinsights.azure.com/' app
curl -i -X POST http://localhost:5001/ai/v2/track -d '[]' # reaches Azure (200/400), not 404/502
docker stop app-test
# No connection string set: nginx still starts without the proxy path
docker run --rm -d --name app-test -p 5001:5001 app
docker logs app-test
docker stop app-test
替换 5001 端口为您 nginx.conf 监听,并添加应用程序的其他需要变量(NAME, (中文(简体) ), ENVIRONMENT_NAME, (中文(简体) ), API_URL如果需要的话.