Skip to content

DevOps Stack

Vulcan uses GitLab CI/CD for automation, Docker for containerization, and Azure AKS for Kubernetes orchestration.

CI/CD

TechnologyPurpose
GitLab CIContinuous integration and deployment pipelines
LefthookFast, parallel Git hooks manager

Containerization

TechnologyPurpose
DockerContainerization for consistent development and deployment
Azure Container RegistryPrivate Docker image registry

Orchestration

TechnologyPurpose
Azure Kubernetes Service (AKS)Managed Kubernetes for container orchestration
Nginx Ingress ControllerKubernetes ingress and load balancing

Infrastructure as Code

TechnologyPurpose
TerraformInfrastructure provisioning and management
KustomizeKubernetes configuration management

Monitoring

TechnologyPurpose
Azure Application InsightsApplication performance monitoring
Azure Log AnalyticsCentralized log aggregation

CI/CD Pipeline

┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│    Push      │    │   GitLab CI  │    │    AKS       │
│  to Branch   │ →  │   Pipeline   │ →  │  Deployment  │
└──────────────┘    └──────────────┘    └──────────────┘

Pipeline Stages:
1. Build      - Compile code, run tests
2. Docker     - Build and push image to ACR
3. Deploy     - Update Kubernetes deployment
4. Verify     - Health check

Git Hooks (Lefthook)

HookAction
pre-commitESLint + Prettier on staged files
commit-msgcommitlint validation
pre-pushType check + test suite

Environment Configuration

Staging

URL: https://staging.vulcan.hantverksdata.se
Branch: develop
Deployment: Automatic after tests pass
Approval: None required

Production

URL: https://vulcan.hantverksdata.se
Branch: main
Deployment: Manual trigger
Approval: Required

Docker Multi-Stage Build

dockerfile
# Build stage
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

# Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app .
EXPOSE 8080
ENTRYPOINT ["dotnet", "Vulcan.Api.dll"]

Kubernetes Structure

yaml
# Namespace structure
namespaces:
  - vulcan-staging    # Staging environment
  - vulcan-prod       # Production environment

# Per namespace deployments
deployments:
  - vulcan-web
  - vulcan-be-coresetup
  - vulcan-be-leads
  - vulcan-be-quotation
  - vulcan-be-contracts
  - vulcan-be-projects
  - vulcan-be-invoicing
  - vulcan-be-documents
  - vulcan-be-ai
  - vulcan-be-planning

services:
  - ClusterIP for internal communication
  - LoadBalancer for public endpoints

ingress:
  - Nginx Ingress Controller
  - TLS termination
  - Path-based routing

Infrastructure Repository

vulcan-infrastructure/
├── terraform/
│   ├── modules/
│   │   ├── aks/
│   │   ├── postgresql/
│   │   ├── redis/
│   │   ├── keyvault/
│   │   └── openai/
│   ├── environments/
│   │   ├── staging/
│   │   └── production/
│   └── main.tf
├── kubernetes/
│   ├── base/
│   │   ├── deployments/
│   │   ├── services/
│   │   └── ingress/
│   └── overlays/
│       ├── staging/
│       └── production/
└── scripts/
    ├── deploy.sh
    └── rollback.sh

Security

Network

  • AKS with Cilium CNI
  • Network policies
  • Private endpoints for PaaS

Identity

  • Azure AD integration
  • Managed Identity for services
  • RBAC for resources

Secrets

  • Key Vault for all secrets
  • No secrets in code or config
  • Automatic rotation where supported

Disaster Recovery

ComponentRPORTOStrategy
Database5 min1 hourPoint-in-time restore
Storage00GRS replication
AKSN/A30 minMulti-replica deployments

Built with VitePress | v1.1.0