React + Express lab application used to demonstrate Docker packaging and GitHub Actions quality gates.
The application is the deployment subject. The DevOps evidence is the CI, Docker, and image-publish workflow around it.
Pull request or push to main
|
v
ci.yml
|-- API: npm ci -> npm test --if-present -> build check
|-- Webapp: npm ci -> npm test --if-present -> npm run build
|
v
docker-publish.yml on main
|-- Build API Docker image -> push to GHCR
|-- Build Webapp Docker image -> push to GHCR
| Area | Evidence |
|---|---|
| Full-stack app | ecommerce-platform with React webapp and Express API |
| Local runtime | docker-compose.yml starts API and webapp |
| API container | api/Dockerfile |
| Web container | webapp/Dockerfile and Nginx config |
| CI workflow | ci.yml |
| Image publishing | docker-publish.yml using Docker Buildx and GHCR |
| API test | api/tests/server.test.js |
cd Module-3/capstone-project-5/ecommerce-platform
JWT_SECRET=change_me docker compose up --buildEndpoints:
| Service | URL |
|---|---|
| Webapp | http://localhost:3000 |
| API health | http://localhost:3001/health |
- No screenshot folder is currently committed for this capstone.
- The workflow publishes images to GHCR, but this folder does not currently include a separate EC2 deploy workflow.
- The CI workflow still uses Node 20 in the nested lab app; update to Node 22/24 before using this as a primary CI/CD example.
- Runtime secrets are represented by local examples; do not commit real
JWT_SECRETvalues.
- Link to a passing Actions run for
ci.yml. - Link to published GHCR packages.
- Add a screenshot of
docker compose psand the API health endpoint. - Add a short deployment note if this lab is later connected to EC2.