I needed to practice DevOps, so I started a small side project called ifconfig-py. The idea was simple: rebuild ifconfig.me (the classic "What's my IP?" utility) in Python using FastAPI, with my own twist. Not because the world needed another one, but because I needed a real project to practice on. Here's the thing about DevOps: you can read about Docker, Kubernetes, and proxies all day, but you only internalize it when something is running, breaking, and needing to be fixed. So I picked a simple API that I was curious about, and used it as a sandbox. Here is what I actually practiced: 🐳 Dockerization: Went from a single-stage Dockerfile to a proper multi-stage build: builder stage, lean Alpine runtime, non-root user, layer caching done right, working healthcheck. ♾️ CI/CD with GitHub Actions: Two separate pipelines: CI runs on every push to main (ignoring markdown changes), spins up the app, and smoke tests the /health endpoint. CD triggers automatically when CI passes. It reads the version from pyproject.toml, tags the image with the semver version, the short commit SHA, and latest, then builds and pushes a multi-arch image (amd64 + arm64) to Docker Hub via Buildx and QEMU. Manual dispatch with a custom tag is supported, too. Small project, but the pipeline is production-shaped. 🌐 Nginx as a reverse proxy: Forwarding headers correctly, making sure the app sees the real client IP. Small config, big lessons. The app itself? Simple by design. The point wasn't the app; it was everything around it. The project is still ongoing, and I'll keep building on it as I go. I'm planning to dive deeper into each of these topics in future posts, so if any of this resonates, stay tuned! And if you spot something I could've done better, I'm all ears. 🔗 https://lnkd.in/dRy-r_jV #DevOps #Docker #GitHubActions #CICD #Nginx
Excellent work 👏 👏👏 Keep it up 🔥
Good work
Great work bro 🫡
Good Job!
Nice work
Nice work 👏
Great work! 🌸
Good work 👏💚