CI/CD, containers, cloud — it sounds like a lot. But for a student side project or society app, you only need a small fraction of it. Here's what matters and in what order.
Start With Automated Tests and CI
Before containers, before Kubernetes, before anything else: set up a GitHub Actions workflow that runs your tests on every push. This single change will prevent more bugs from reaching production than any other DevOps investment. It takes 20 minutes to set up and pays dividends for the entire life of the project.
A basic workflow: checkout the code, install dependencies, run linting, run type checking, run tests. If any step fails, the PR is blocked. No configuration, no infrastructure — just a YAML file in `.github/workflows/`. Start here.
Docker: When You Actually Need It
You don't need Docker for a Next.js app deployed to Vercel. You do need it when your app has infrastructure dependencies that are hard to install locally (PostgreSQL, Redis, a specific version of a CLI tool), or when you're deploying to a VPS rather than a managed platform.
The mental model: a Dockerfile describes an environment, a container is a running instance of that environment, and Docker Compose lets you define multiple containers that work together. For most student projects, `docker-compose up` to spin up a local database is the only Docker you'll need.
Deployment: The Simplest Path
Vercel for frontend (Next.js, React). Railway or Render for backend APIs and databases. Both have free tiers that are generous enough for society projects. Connect your GitHub repo, push to main, and it deploys automatically. That's your entire CD pipeline.
Add secrets as environment variables in the platform's dashboard, never in your code. Check the deployment logs when something breaks. Understand that your free-tier database goes to sleep after 15 minutes of inactivity — not a bug, a cost optimisation you need to work around in development.
3rd year CS student, cloud infrastructure enthusiast, and the person responsible for DevSoc's GitHub Actions pipelines.
