diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index ec16f6ec..b2fd93f7 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -198,6 +198,8 @@ jobs: NEXT_PUBLIC_BASE_URL=${{ needs.prepare.outputs.next_public_url }} NEXT_PUBLIC_TARGET=${{ needs.prepare.outputs.target }} DIRECTUS_URL=${{ needs.prepare.outputs.directus_url }} + UMAMI_WEBSITE_ID=${{ secrets.UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID }} + UMAMI_API_ENDPOINT=${{ secrets.UMAMI_API_ENDPOINT || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }} NPM_TOKEN=${{ secrets.REGISTRY_PASS }} tags: registry.infra.mintel.me/mintel/klz-cables.com:${{ needs.prepare.outputs.image_tag }} cache-from: type=registry,ref=registry.infra.mintel.me/mintel/klz-cables.com:buildcache @@ -246,6 +248,10 @@ jobs: # Gatekeeper GATEKEEPER_PASSWORD: ${{ secrets.GATEKEEPER_PASSWORD || 'klz2026' }} + + # Analytics + UMAMI_WEBSITE_ID: ${{ secrets.UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID }} + UMAMI_API_ENDPOINT: ${{ secrets.UMAMI_API_ENDPOINT || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }} steps: - name: Checkout repository uses: actions/checkout@v4 @@ -310,6 +316,10 @@ jobs: AUTH_COOKIE_NAME=klz_gatekeeper_session COOKIE_DOMAIN=$COOKIE_DOMAIN + # Analytics + UMAMI_WEBSITE_ID=$UMAMI_WEBSITE_ID + UMAMI_API_ENDPOINT=$UMAMI_API_ENDPOINT + TARGET=$TARGET SENTRY_ENVIRONMENT=$TARGET PROJECT_NAME=$PROJECT_NAME diff --git a/Dockerfile b/Dockerfile index 2ce06aa5..0efa3e73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,12 +6,16 @@ WORKDIR /app ARG NEXT_PUBLIC_BASE_URL ARG NEXT_PUBLIC_TARGET ARG DIRECTUS_URL +ARG UMAMI_WEBSITE_ID +ARG UMAMI_API_ENDPOINT ARG NPM_TOKEN # Environment variables for Next.js build ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL ENV NEXT_PUBLIC_TARGET=$NEXT_PUBLIC_TARGET ENV DIRECTUS_URL=$DIRECTUS_URL +ENV UMAMI_WEBSITE_ID=$UMAMI_WEBSITE_ID +ENV UMAMI_API_ENDPOINT=$UMAMI_API_ENDPOINT ENV SKIP_RUNTIME_ENV_VALIDATION=true ENV CI=true diff --git a/docker-compose.yml b/docker-compose.yml index 39864880..38adccde 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,7 @@ services: - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.entrypoints=websecure" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls.certresolver=le" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.tls=true" + - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.priority=1000" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.service=${PROJECT_NAME:-klz-cables}" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}.middlewares=${AUTH_MIDDLEWARE:-${PROJECT_NAME:-klz-cables}-ratelimit,${PROJECT_NAME:-klz-cables}-forward,${PROJECT_NAME:-klz-cables}-compress}" @@ -26,6 +27,7 @@ services: - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.entrypoints=websecure" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.tls.certresolver=le" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.tls=true" + - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.priority=2000" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.service=${PROJECT_NAME:-klz-cables}" - "traefik.http.routers.${PROJECT_NAME:-klz-cables}-unprotected.middlewares=${AUTH_MIDDLEWARE_UNPROTECTED:-${PROJECT_NAME:-klz-cables}-ratelimit,${PROJECT_NAME:-klz-cables}-forward,${PROJECT_NAME:-klz-cables}-compress}" diff --git a/next.config.mjs b/next.config.mjs index b9ca9eb3..1cdbab17 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -322,6 +322,15 @@ const nextConfig = { contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", }, async rewrites() { + const umamiUrl = + process.env.UMAMI_API_ENDPOINT || + process.env.UMAMI_SCRIPT_URL || + process.env.NEXT_PUBLIC_UMAMI_SCRIPT_URL || + 'https://analytics.infra.mintel.me'; + const glitchtipUrl = process.env.SENTRY_DSN + ? new URL(process.env.SENTRY_DSN).origin + : 'https://errors.infra.mintel.me'; + const directusUrl = process.env.INTERNAL_DIRECTUS_URL || process.env.DIRECTUS_URL || 'https://cms.klz-cables.com'; return [ @@ -329,6 +338,14 @@ const nextConfig = { source: '/cms/:path*', destination: `${directusUrl}/:path*`, }, + { + source: '/stats/:path*', + destination: `${umamiUrl}/:path*`, + }, + { + source: '/errors/:path*', + destination: `${glitchtipUrl}/:path*`, + }, ]; }, };