PixelProxy is a scalable, containerized reverse proxy system built with Node.js and Express, managed via Docker Compose. It includes a centralized logging stack powered by Loki, Promtail, and Grafana, and features a CircleCI-based CI/CD pipeline for secure, automated deployment.
- Multiple clients (Web Browsers on Desktop and Mobile) access the system.
-
Nginx Load Balancer
- Listens on port 80
- Uses least-connections algorithm
- Has failover support for backup server
-
PixelProxy Instances (Node.js/Express):
PixelProxy 1:3001:3000PixelProxy 2:3002:3000PixelProxy 3:3003:3000Backup Proxy:3004:3000(activated only when primaries fail)
-
Environment Variables:
APP_NAME -
Live Reload: Docker Compose Watch enabled
-
Custom Docker network:
pixpro-network- Supports internal container communication
- External ports:
80,3001-3004
-
Volume Mounts:
nginx.conf: Configurationnginx/logs/: Access/Error Logs
- Promtail collects logs from Nginx
- Loki stores logs
- Grafana visualizes logs in real-time
- Clients → Nginx → Least-busy PixelProxy
- Backup traffic (dashed line) to backup server only when needed
- 🔁 Live Reload with Docker Compose Watch
- 📂 File Syncing
- ❌ Ignored Paths:
node_modules/,logs/,.git/
- 🛠️ Checkout code
- 🏗️ Build Docker image
▶️ Rundocker-compose- 🔍 Trivy security scan
- 🔐 Docker Hub login
- 🏷️ Tag and push image
- Docker & Docker Compose
- Node.js
- CircleCI account (optional for CI/CD)
docker-compose up --builddocker compose -f docker-compose.logging.yml up --build- Internal endpoints expose health status
- Health checks used by Docker and monitoring tools
| Component | Version |
|---|---|
| Node.js | 23-alpine |
| Express | 4.x |
| Nginx | latest |
| Docker Compose | v2+ |
| Grafana | 10.x |
| Loki | latest |
| Promtail | latest |
- Automated scanning with Trivy
- Minimal base images
- Regular dependency updates
Visit Grafana at: http://localhost:3000
Default credentials:
- User:
admin - Password:
admin