SLT-1344: C4 setup - #157
Open
ArtisKrumins wants to merge 1 commit into
Open
ArtisKrumins wants to merge 1 commit into
ArtisKrumins wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Several generated diagrams currently misrepresent optional infrastructure, provider defaults, and deployment boundaries.
Review effort: Balanced
Findings: 8
Open (12)
Compose does not receive host user and group IDs · New Optional Application Gateway lacks the Optional tag · New EFS is missing the Optional tag · New Filestore is missing the Optional tag · New Managed MySQL is missing the Optional tag · New Optional CDN lacks the Optional tag · New In-cluster agent is modeled as an external system · New Base deployment element is incorrectly fixed to csi-rclone · New NLB is incorrectly documented as HTTP ingress · New Generated diagram incorrectly labels all GKE clusters VPC-native · New Introductory person count is inconsistent · New Deployment diagram is incorrectly labeled C4 level 4 · New
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.
| volumes: | ||
| - .:/usr/local/structurizr | ||
| # Keeps generated files owned by you rather than root. | ||
| user: "${UID:-1000}:${GID:-1000}" |
|
|
||
| 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" |
|
|
||
| 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" |
|
|
||
| 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" |
|
|
||
| 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 on lines
+5
to
+6
| # * ingress-nginx replaces Traefik, and the NLB speaks the PROXY protocol so | ||
| # the real client IP survives; |
|
|
||
| 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" { |
| # --------------------------------------------------------------------------- | ||
| # People | ||
| # | ||
| # Silta has three very different audiences, and the model keeps them separate |
| # --------------------------------------------------------------------------- | ||
| # Views | ||
| # | ||
| # Deployment views (L4) are the core of this baseline — one per supported |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


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