DevOps Engineering Projects
Every project below is a real broken system - the kind of DevOps problem teams actually hit in production, not a tutorial. Fix it in a live cloud workspace and it lands on your portfolio as a clickable proof point.
38 projects to build
Fix the Nginx 502 Bad GatewayCaught a port mismatch between the nginx upstream block and the actual app port, restoring traffic through theRecover a Crashed Linux ServiceFound the app crashing because INVENTORY_DB environment variable was not set, exported it, and restarted the aCorrect a Postgres Port MismatchFound postgresql.conf listening on a non-default port after a config change, realigned the app or postgres to Reopen the Redis Bind Address (Connection Refused)Caught Redis bound to 127.0.0.1 only after a config change, switched bind to the right interface so the app caResolve an Nginx 403 Forbidden (Permissions)Restored read+execute permissions on the document root so nginx (running as nginx user) can serve the HTML filFix a Docker Container That Exits ImmediatelyCorrected the Dockerfile CMD to reference the real entrypoint script so the container actually runs a process Write a Production-Ready DockerfileCreated a Dockerfile for a Python Flask app - python:3.12-slim base, dedicated non-root user, exposed port 808Repair a Failing GitHub Actions WorkflowRepaired the GitHub Actions workflow that failed on every push - fixed the malformed YAML, moved checkout befoShrink a Bloated Docker Image (Multi-Stage Build)Rewrote the single-stage Dockerfile as multi-stage so the 200MB build-time intermediate stays in the builder lPatch a Critical CVE Flagged by TrivyTrivy was failing CI with a CRITICAL CVE on pyyaml 5.3 - bumped the pin in requirements.txt to 5.4+ (the fixedWrite a Production systemd Service UnitWrote a production-grade systemd unit for the Flask app - Type=simple, ExecStart points at the venv python, ReGet a Terraform Plan to PassFixed three issues in the Terraform config that were blocking `terraform plan` - an unclosed block, a referencProvision an AWS S3 Bucket With TerraformFixed a typo in the aws_s3_bucket resource so the AWS provider accepted the argument and `terraform apply` actLock Down an Over-Permissive AWS IAM PolicyReplaced the wildcard Action and Resource on the deployer IAM policy with the single S3 action + specific buckDeploy an AWS Lambda Function With TerraformPointed the `aws_lambda_function` resource at the right zip + handler so `terraform apply` actually shipped thProvision an AWS EC2 Instance With TerraformFixed the `aws_instance` resource (real AMI from describe-images + a valid `t3.micro`) so `terraform apply` prRenew a Let's Encrypt Certificate Before It ExpiresUpdated the broken openssl x509 renewal command in renew.sh to issue a fresh 90-day cert before the existing oAmend a Botched Git Commit MessageUsed `git commit --amend -m '...'` to rewrite the most recent commit's message from a typo'd draft to the corrTrap SIGTERM for a Graceful ShutdownAdded a SIGTERM handler that flips `RUNNING = False`, lets the in-flight job finish, then exits - so KuberneteTrace an Nginx 503 CascadeFixed upstream timeout + health check path mismatch in nginx so health probes hit the right endpoint and slow Plug a Postgres Connection Pool LeakWrapped DB calls in try/finally so connections always release back to the pool, even on error - pool stopped eIndex a Slow Postgres Search QueryDiagnosed seq-scan on the search column via EXPLAIN, added an index, and the endpoint went from 3-5 seconds toConfigure an Nginx Rate LimitLoosened the over-aggressive limit_req zone + burst settings so legitimate traffic flows while still bouncing Make an App Wait for Postgres on StartupWrapped the startup DB connect in retry-with-backoff so the app survives the few seconds postgres takes to accRefactor Terraform Into a Reusable ModuleExtracted the three duplicated service blocks in main.tf into a reusable module under ./modules/service - rootReconcile Terraform State DriftReconciled the Terraform state with what someone had manually edited on disk - refreshed state, decided what tRepair a Broken Prometheus Scrape ConfigPointed the broken Prometheus scrape config at the right port and exposed the missing app_requests_total countWrite an Idempotent Ansible PlaybookWrote an idempotent Ansible playbook that templates the nginx site config, ensures the docroot exists with theDesign an Observability StackPicked the "metrics + structured logs + dashboards" stack - the workload says "debug a perf regression that haSpeed Up a Slow GitHub Actions PipelineCut the GitHub Actions pipeline from a single serial job to a parallel matrix with dependency caching, droppinMigrate a Postgres Database With Zero DowntimeReplaced the naive ALTER TABLE ADD COLUMN NOT NULL with a three-step zero-downtime migration (add nullable, baWire Up an AWS SQS Dead-Letter QueueCreated a separate DLQ queue + attached a RedrivePolicy with maxReceiveCount=3 to the main queue so poison mesLoad Config From AWS SSM Parameter StoreSwitched `app.py` from reading `DATABASE_URL` out of env to fetching `/app/database/url` from AWS SSM ParameteProvision an AWS VPC and Security GroupCreated the missing VPC + subnet + SG resources and wired the `aws_instance` to land in the VPC with a port-80Use git bisect to Find a Breaking CommitWalked `git bisect` between a known-good and known-bad commit, ran the test script at each step, and isolated Ship a Zero-Downtime Blue-Green DeployShipped deploy.sh that boots the new instance on 8081, waits for health checks, switches the nginx upstream, aPackage an App as a Helm ChartCreated a Helm chart for the API with Deployment + Service templates, parameterized via values.yaml - helm linMove Secrets Into HashiCorp VaultPushed API_KEY / DB_PASSWORD / JWT_SECRET from the checked-in .env into Vault (KV v2 at secret/app), rewrote a
Plus 33+ more DevOps projects in the workspace, with new ones added regularly.
More for DevOps engineers
Build your DevOps portfolio free. Fix real systems in a live cloud workspace - every fix is yours to keep.
Start free →