A FastAPI application deployed with modern cloud-native practices. This project demonstrates containerization, infrastructure as code, CI/CD automation, Kubernetes orchestration, and observability using Prometheus and Grafana.
flowchart LR
subgraph User
Client[Client / Browser]
end
subgraph Cloud[Kubernetes Cluster]
App[FastAPI Application] --> DB[(PostgreSQL)]
App --> Metrics[/Metrics Endpoint/]
App --> Service[LoadBalancer Service]
end
subgraph CI/CD[GitHub Actions Pipeline]
Source[GitHub Repo] --> Build[Docker Build & Push]
Build --> Deploy[Tf + K8s Apply]
end
subgraph Monitoring[Observability Stack]
Metrics --> Prometheus
Prometheus --> Grafana
end
Service --> Client
-
The application is packaged with Docker.
-
Image is stored in a container registry (DockerHub/ECR).
Build & push locally:
docker build -t droffilc1/journal-starter:latest .
docker push droffilc1/journal-starter:latest-
Terraform provisions:
-
Compute resources (ECS/Kubernetes nodes)
-
Networking (VPC, subnets, security groups)
-
PostgreSQL database
-
cd infra
terraform init
terraform apply -auto-approve-
GitHub Actions workflow (
.github/workflows/) handles:-
Build & test on every commit
-
Build & push Docker image
-
Deploy using Terraform & Kubernetes
-
-
Manifests under
/k8sdefine:-
Deployment(FastAPI app & PostgreSQL) -
Service(LoadBalancer for app, ClusterIP for DB) -
ConfigMapandSecretfor configuration
-
Deploy:
kubectl apply -f k8s/-
FastAPI exposes
/metricsendpoint. -
Prometheus scrapes metrics from the app.
-
Grafana visualizes key metrics:
-
Request count
-
Error rate
-
Response latency
-
CPU & memory usage
-
System Resources
Grafana JSON exports can be found in
/grafana/provisioning/dashboards/.
.
├── app/ # FastAPI application
├── Dockerfile # Container definition
├── infra/ # Terraform configs
├── k8s/ # Kubernetes manifests
├── .github/workflows/ # CI/CD pipeline configs
├── grafana/ # Grafana resources
├── prometheus/ # Prometheus resources
└── README.md- Run locally with Docker
docker build -t journal-starter . docker run -p 8080:8080 journal-starter- Provision infrastructure
cd infra && terraform apply -auto-approve- Deploy to Kubernetes
kubectl apply -f k8s/-
Access Monitoring
-
Prometheus →
http://localhost:9090 -
Grafana →
http://localhost:3000
-

