Last deploy: passed · 5/5 checks

Infrastructure that ships itself.

CloudPilot is an end-to-end DevOps pipeline: Terraform provisions the servers, Ansible configures them, GitHub Actions tests and deploys on every push, and Prometheus watches to make sure the deploy actually worked.

PIPELINE.SCHEMATIC — main branch REV 1.0
Push git main Test pytest Build docker Deploy ansible Monitor prometheus
Bill of materials

What's actually running

Five tools, each doing exactly one job — no orchestration platform hiding what's happening underneath.

Layer
Component
Role
01
Terraform
Provisions the VPC, subnets, and Auto Scaling Group on AWS
02
Docker
Packages the app into a small, non-root, health-checked image
03
GitHub Actions
Runs tests, validates infra, builds the image, triggers deploy
04
Ansible
Rolls the new image out to every instance and checks it's healthy
05
Prometheus / Grafana
Watches request volume and uptime after the deploy ships
On every push to main

Five stages, one command: git push

Each stage gates the next — a failed test or a bad Terraform plan stops the pipeline before anything touches production.

STAGE 01
Test
pytest runs against the app. Fails here, nothing downstream runs.
STAGE 02
Validate
terraform fmt and validate catch broken or malformed infra code.
STAGE 03
Build
Docker image is built and pushed to GitHub Container Registry.
STAGE 04
Deploy
Ansible rolls the new image out across the EC2 fleet.
STAGE 05
Verify
Health checks confirm the new version is actually serving traffic.
Under the hood

A VPC across two availability zones, not a single point of failure

Public subnets in two AWS availability zones hold an Auto Scaling Group running the containerized app behind a security group that only opens port 80 to the world and port 22 to one admin IP.

VPC 10.0.0.0/16 AZ-a · public AZ-b · public EC2 EC2