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 componentsNeue-Kundenportal-Version-ausrollen.mdβ Release process
Deployment und Betrieb des Kundenportals.
Infrastructure Componentsβ
| Component | Purpose | Azure Resource |
|---|---|---|
| Management App | Hosting Server | TIS-PROD-CCAKundenportalManagement-WE-APP |
| Storage | Working Directory | kundenportal-hosting-working-directory |
| CDN | Frontend Assets | TIS-PROD-TISCCAWebApplications-CDN1 |
| Certificate | *.myversum.at | myversum-at-wildcard |
| Key Vault | Certificate Storage | MyVersumVault |
| DNS | *.myversum.at | Managed 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-cdnconfiguration - 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:
- Extract build artifact
- Remove
web.configandcustomization/ - Rename
index.htmlβindex_$version$.html - Copy to Azure Blob Storage (
cdn.togethercca.com/kundenportal-frontend/)
Stage 2: Hosting V2 (Kundenportal-Management)β
Deploys core files to Management Service:
- Create deploy package containing:
index.htmlngsw-worker.js,ngsw.jsonsafety-worker.js,worker-basic.min.js
- POST to
/kundenportal-versionen/v2with OAuth2 token - Management Service extracts to
_versionen/{version}/in Hosting Repo - 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:
| Mode | Behavior |
|---|---|
latest_compatible | Auto-select based on CCAOnline version |
Specific version (e.g. 2.1.00) | Pinned to exact version |
Automatic selection (latest_compatible):
- User requests portal (e.g.,
makler.myversum.at) - Management Service calls CCAOnline
/healthendpoint - Reads
applicationVersionfrom health response - Selects matching SPA version from
_versionen/ - 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.