Zum Hauptinhalt springen

Kundenportal Operations

πŸ€– Consolidated with Claude Code, reviewed by author.

Co-Authored-By: Claude (noreply@anthropic.com)

Sources (from cca.wiki):

  • Hosting-v2-(Azure-DevOps-Hosting).md β†’ Infrastructure components
  • Neue-Kundenportal-Version-ausrollen.md β†’ Release process

Deployment und Betrieb des Kundenportals.

Infrastructure Components​

ComponentPurposeAzure Resource
Management AppHosting ServerTIS-PROD-CCAKundenportalManagement-WE-APP
StorageWorking Directorykundenportal-hosting-working-directory
CDNFrontend AssetsTIS-PROD-TISCCAWebApplications-CDN1
Certificate*.myversum.atmyversum-at-wildcard
Key VaultCertificate StorageMyVersumVault
DNS*.myversum.atManaged by A1 (migration to Azure planned)

Operational Repository​

Warning: Changes to this repository affect all Kundenportale immediately.

Repository: togethercca-hosting/kundenportal-hosting

Structure:

kundenportal-hosting/
β”œβ”€β”€ manifest.json
β”œβ”€β”€ _versionen/
└── *.myversum.at/ # Portal folders

The Management App accesses this repository via Managed Identity.

Release Process​

graph TB
A[Corner4 completes changes] --> B[togethercca triggers Release Pipeline]
B --> C[Stage 1: Deploy Assets β†’ CDN]
B --> D[Stage 2: Deploy Package β†’ Management Service]
D --> E[Management Service commits to Hosting Repo]
E --> F[Portals auto-select version based on CCAOnline]

1. Build Pipeline​

Pipeline: kundenportal Build

  • Builds togethercca-cdn configuration
  • Extracts version from environment.togethercca-cdn
  • Adds version meta tag to index.html

2. Release Pipeline​

Pipeline: kundenportal Release

Stage 1: Azure CDN​

Deploys static assets to CDN for browser loading:

  1. Extract build artifact
  2. Remove web.config and customization/
  3. Rename index.html β†’ index_$version$.html
  4. Copy to Azure Blob Storage (cdn.togethercca.com/kundenportal-frontend/)

Stage 2: Hosting V2 (Kundenportal-Management)​

Deploys core files to Management Service:

  1. Create deploy package containing:
    • index.html
    • ngsw-worker.js, ngsw.json
    • safety-worker.js, worker-basic.min.js
  2. POST to /kundenportal-versionen/v2 with OAuth2 token
  3. Management Service extracts to _versionen/{version}/ in Hosting Repo
  4. Commits and pushes changes

Authentication: OAuth2 Client Credentials Flow (Azure AD App with portale.deploy permission).

3. Version Selection​

Each portal has a configured version mode:

ModeBehavior
latest_compatibleAuto-select based on CCAOnline version
Specific version (e.g. 2.1.00)Pinned to exact version

Automatic selection (latest_compatible):

  1. User requests portal (e.g., makler.myversum.at)
  2. Management Service calls CCAOnline /health endpoint
  3. Reads applicationVersion from health response
  4. Selects matching SPA version from _versionen/
  5. Serves appropriate index.html (assets load from CDN)

Version lookup is cached for 10 minutes per portal.

Pinned versions are used when a portal needs to stay on a specific SPA version regardless of CCAOnline updates.

4. Admin Dashboard (Optional)​

Admin Dashboard: https://admin-dashboard.togethercca.com/

Used for:

  • Viewing portal list and status
  • Checking installed versions
  • Manual portal management

Certificate Management​

The wildcard certificate for *.myversum.at is renewed annually.

Access requirements:

  • Certificate Registration β†’ Key Vault (for renewal)
  • App Service β†’ Key Vault (for binding)

DNS Management​

Currently managed by A1. Migration to Azure DNS planned for scriptable management.

Portal-specific CNAME entries are created during v2 hosting migration.