Junior DevOps Engineer · Cloud Engineer · Platform Engineer
Email — LinkedIn — roadmap.sh
Infrastructure as Code? Yeah, I work in Terraform mostly - EC2, VPC, security groups, IAM, remote state.
CI/CD? Built pipelines in both GitHub Actions and Jenkins, for build, test, and deploy.
Docker? I keep images lean with multi-stage builds - no dragging build tools into what actually ships.
Ansible? Mostly EC2 provisioning and config, written to be idempotent so reruns don't break anything.
flowchart LR
A[Push to main] --> B[GitHub Actions: terraform.yml]
B --> C[terraform init]
C --> D[terraform plan]
D --> E[terraform apply -auto-approve]
E --> F[(S3 backend tfstate)]
E --> G[(DynamoDB state lock)]
E --> H[AWS: Security Group allow HTTP 80]
E --> I[AWS: EC2 t2.micro nginx via user_data]
J[Manual trigger] --> K[GitHub Actions: destroy.yml]
K --> L[terraform destroy -auto-approve]
I started with local state, which felt fine right up until terraform destroy failed on the next run, turns out the GitHub Actions runner throws itself away after every job, state file and all. Moved to S3 + DynamoDB and that problem went away. Not a design choice I made up front, just what broke first.
flowchart LR
A[Jenkins job triggered] --> B[Clone repository]
B --> C[Docker: multi-stage build]
C --> D[Push to Docker Hub]
D --> E[ansible-playbook deploy to EC2]
The Dockerfile builds in node:20-alpine, then copies only what's actually needed — package.json, node_modules, public, .next, into a clean runtime stage. Nothing from the build stage leaks into what ships.



