Skip to content

SLT-1344: C4 setup - #157

Open
ArtisKrumins wants to merge 1 commit into
masterfrom
feature/SLT-1344-c4-diagrams
Open

ArtisKrumins wants to merge 1 commit into
masterfrom
feature/SLT-1344-c4-diagrams

Conversation

@ArtisKrumins

Copy link
Copy Markdown
Contributor

C4 diagrams.
Covers AWS, AKS and EKS vendors. Multiple views.
Based on Structurize.

Copilot AI balanced review requested due to automatic review settings September 29, 2026 07:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Several generated diagrams currently misrepresent optional infrastructure, provider defaults, and deployment boundaries.

Review effort: Balanced
Findings: 8 Medium severity · 4 Low severity

Open (12)
What changed in this PR

Adds a Structurizr-based C4 architecture model covering Silta’s platform, toolchain, project environments, and four cloud vendors.

Changes:

  • Adds C4 system, container, and deployment models.
  • Adds local viewing, validation, export, and extension tooling.
  • Documents cloud differences and diagram conventions.
File Description
README.md Links and explains the C4 model.
c4/​workspace.dsl Defines the base workspace.
c4/​views/​views.dsl Defines architecture views.
c4/​views/​styles.dsl Defines diagram styling.
c4/​README.md Documents model usage.
c4/​model/​toolchain.dsl Models delivery tooling.
c4/​model/​relationships.dsl Connects modeled elements.
c4/​model/​project-environment.dsl Models project releases.
c4/​model/​platform.dsl Models cluster services.
c4/​model/​people.dsl Defines platform audiences.
c4/​model/​external-systems.dsl Models external dependencies.
c4/​model/​dashboard.dsl Models the dashboard.
c4/​extensions/​README.md Documents client extensions.
c4/​extensions/​client-template.dsl Provides an extension template.
c4/​export.sh Exports diagrams.
c4/​docs/​03-cloud-differences.md Documents provider differences.
c4/​docs/​02-reading-these-diagrams.md Explains diagram interpretation.
c4/​docs/​01-overview.md Introduces Silta architecture.
c4/​deployment/​uks.dsl Models UKS deployment.
c4/​deployment/​gke.dsl Models GKE deployment.
c4/​deployment/​eks.dsl Models EKS deployment.
c4/​deployment/​aks.dsl Models AKS deployment.
c4/​compose.yaml Runs Structurizr locally.
c4/​.gitignore Excludes generated artifacts.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread c4/compose.yaml
volumes:
- .:/usr/local/structurizr
# Keeps generated files owned by you rather than root.
user: "${UID:-1000}:${GID:-1000}"
Comment thread c4/deployment/aks.dsl

aksLb = infrastructureNode "Azure Load Balancer" "Standard L4 load balancer with a static public IP, fronting the Traefik ingress service for the built-in cluster domain." "Azure Load Balancer"

aksAppGw = infrastructureNode "Application Gateway" "Optional L7 entry point for exposed customer domains, driven by the AGIC add-on watching in-cluster Ingress resources. Requires VNet peering, a route table association, and the gateway subnet allow-listed in nginx realipfrom, noauthips and the release NetworkPolicy." "Application Gateway + AGIC"
Comment thread c4/deployment/eks.dsl

eksEbs = infrastructureNode "EBS (gp2)" "Default block storage class for database and search volumes, provisioned by the Amazon EBS CSI driver add-on." "EBS"

eksEfs = infrastructureNode "EFS" "Managed NFS, used where the nfs-subdir provisioner is preferred over csi-rclone." "EFS"
Comment thread c4/deployment/gke.dsl

gkeGcs = infrastructureNode "Cloud Storage" "Buckets behind the silta-shared storage class — public files, private files, backups, reference data — and the public charts.wdr.io Helm repository." "GCS"

gkeFilestore = infrastructureNode "Filestore" "Managed NFS share used where the nfs-subdir provisioner is preferred over csi-rclone." "Filestore"
Comment thread c4/deployment/uks.dsl

uksBlock = infrastructureNode "UpCloud block storage" "Block volumes for database and search. Minimum provisionable size is 1Gi." "UKS storage class"

uksManagedDb = infrastructureNode "Managed MySQL" "Optional managed database, replacing the in-cluster MariaDB. Requires the application user to use mysql_native_password." "UpCloud Managed Database"

scheduledJobs = container "Scheduled jobs" "CronJobs owned by the release: application cron, nightly database and file backups with retention, and reference-data refresh that seeds preview environments from a sanitised copy of a reference environment." "Kubernetes CronJob"

sharedFiles = container "Shared file storage" "ReadWriteMany volumes on the silta-shared storage class: public files, private files, backups and reference data. Shared by every pod of the release." "PersistentVolumeClaim (csi-rclone)"
Comment thread c4/deployment/eks.dsl
Comment on lines +5 to +6
# * ingress-nginx replaces Traefik, and the NLB speaks the PROXY protocol so
# the real client IP survives;
Comment thread c4/deployment/gke.dsl

gkeFilestore = infrastructureNode "Filestore" "Managed NFS share used where the nfs-subdir provisioner is preferred over csi-rclone." "Filestore"

deploymentNode "GKE cluster" "Regional, VPC-native, with autoscaling node pools" "Kubernetes" {
Comment thread c4/model/people.dsl
# ---------------------------------------------------------------------------
# People
#
# Silta has three very different audiences, and the model keeps them separate
Comment thread c4/views/views.dsl
# ---------------------------------------------------------------------------
# Views
#
# Deployment views (L4) are the core of this baseline — one per supported

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants