Forked from louislam/uptime-kuma | Production-ready infrastructure built on top.
This fork focuses entirely on the infrastructure layer: deploying Uptime Kuma on AWS using multiple orchestration strategies — from serverless Fargate to a fully managed EKS cluster with Helm.
Serverless deployment with persistent storage, remote state, and automated alerting.
Key features:
- ECS Fargate task (no EC2 to manage)
- EFS mount at
/app/datafor persistent SQLite data - SNS + CloudWatch for CPU monitoring and email alerts
- VPC with 2 public subnets across Availability Zones
- Terraform remote state in S3 (versioned, AES-256 encrypted, public access blocked)
- GitHub Actions CI/CD:
fmt,validate,init -backend=falseon every push
(Active monitoring dashboard showing real-time service status)
Full K8s deployment from scratch using kubectl.
| Resource | Purpose |
|---|---|
Deployment |
Uptime Kuma pod spec |
Service |
ClusterIP internal routing |
PersistentVolumeClaim |
Persistent data storage |
ConfigMap |
Environment configuration |
Secret |
Sensitive config (base64) |
Ingress |
External HTTP access |
k8s/manifests/
Custom-authored Helm chart for parameterized, multi-environment deployments.
- Configurable via
values.yaml - Templated Deployment, Service, Ingress, PVC
helm install uptime-kuma ./k8s/helm -n monitoringLive EKS cluster provisioned in eu-central-1 via Terraform. Deployed and validated end-to-end.
cd k8s/terraform && terraform init && terraform apply
aws eks update-kubeconfig --region eu-central-1 --name uptime-kuma-cluster
helm install uptime-kuma ./k8s/helm -n monitoringuptime-kuma/
├── .github/workflows/
│ └── terraform-ci.yml # CI/CD: fmt + validate on every push
├── img/
│ ├── kuma-arc.drawio.png # Architecture diagram
│ └── kumademo.png # Dashboard screenshot
├── terraform/
│ ├── bootstrap/ # S3 bucket for remote state (run once)
│ ├── backend.tf
│ └── ...
├── k8s/
│ ├── manifests/ # Raw Kubernetes YAML files
│ ├── helm/ # Custom Helm chart
│ └── terraform/ # EKS cluster (eu-central-1)
└── [original uptime-kuma source]
GitHub Actions runs automatically on every push to main and on pull requests.
| Step | What it does |
|---|---|
terraform fmt -check |
Fails if code is not properly formatted |
terraform init -backend=false |
Initializes without connecting to S3 |
terraform validate |
Checks for syntax and configuration errors |
cd terraform/bootstrap && terraform init && terraform apply # first time only
cd .. && terraform init && terraform apply
# Access: http://:3001minikube start
kubectl create namespace monitoring
helm install uptime-kuma ./k8s/helm -n monitoring
kubectl port-forward service/uptime-kuma 3001:3001 -n monitoringcd k8s/terraform && terraform init && terraform apply
aws eks update-kubeconfig --region eu-central-1 --name uptime-kuma-cluster
kubectl create namespace monitoring
helm install uptime-kuma ./k8s/helm -n monitoring- EFS Connectivity: Resolved
ResourceInitializationErrorby opening port 2049 in the Security Group for EFS communication. - Network Routing: Configured Internet Gateways and Route Tables within the VPC module for public access.
- Remote State Bootstrap: S3 backend cannot provision itself — a separate
bootstrap/module is required beforeterraform init. - CI/CD without credentials:
terraform init -backend=falseallows fmt/validate checks in GitHub Actions without AWS credentials.
AWS ECS Fargate · EKS · EFS · SNS · CloudWatch · VPC · IAM · S3
Terraform · Kubernetes · Helm · Docker · GitHub Actions
