3.6 KiB
3.6 KiB
Task Manager — Cloud Deployment (SK1)
A full-stack task management web application deployed to Microsoft Azure using Docker Compose.
🏗️ Architecture
| Container | Image | Port | Purpose |
|---|---|---|---|
| Caddy | caddy:2-alpine | 443, 80 | Reverse proxy + automatic HTTPS (Let's Encrypt) |
| Frontend | nginx:alpine | 80 | Static files + API reverse proxy |
| API | node:20-alpine | 3000 | Express REST API (CRUD) |
| PostgreSQL | postgres:16-alpine | 5432 | Persistent relational database |
| Redis | redis:7-alpine | 6379 | In-memory cache |
🚀 Quick Deploy
# 1. Login to Azure (requires Azure for Students subscription)
az login
# 2. Clone and configure
git clone git@git.kemt.fei.tuke.sk:gs699he/zkt26.git
cd zkt26/sk1
cp env.example .env
nano .env # Set POSTGRES_PASSWORD, optionally change DNS_LABEL
# 3. Deploy (creates VM, installs Docker, starts containers)
./prepare-app.sh
# 4. Visit: https://taskmanager-gs699he.westeurope.cloudapp.azure.com
🗑️ Remove (after exam)
./remove-app.sh # Deletes entire resource group (VM, IP, disk)
💾 Backup & Logs
./backup-db.sh # Download database dump
./view-logs.sh # All container logs
./view-logs.sh --api -f # Follow API logs in real-time
📁 Project Structure
sk1/
├── api/ # Node.js REST API
│ ├── Dockerfile
│ ├── server.js # Express + CRUD routes
│ ├── db.js # PostgreSQL pool
│ └── package.json
├── frontend/ # Web UI
│ ├── Dockerfile
│ ├── nginx.conf
│ └── public/ (index.html, style.css, app.js)
├── db/init.sql # Database schema
├── caddy/Caddyfile # HTTPS proxy config
├── docs/
│ ├── architecture.png # Architecture diagram
│ ├── documentation.tex # LaTeX source
│ └── documentation.pdf # 9-page PDF report
├── docker-compose.yaml # 5-service orchestration
├── cloud-init.yaml # VM bootstrap (Docker install)
├── prepare-app.sh # Azure deployment script
├── remove-app.sh # Azure teardown script
├── backup-db.sh # Database backup
├── view-logs.sh # Access log viewer
├── env.example # Environment template
├── .gitignore
└── README.md
⚙️ Configuration
| Variable | Description | Default |
|---|---|---|
POSTGRES_PASSWORD |
Database password | (required) |
AZURE_RESOURCE_GROUP |
Azure resource group | taskmanager-rg |
AZURE_LOCATION |
Azure region | westeurope |
AZURE_VM_SIZE |
VM size | Standard_B1s |
AZURE_DNS_LABEL |
DNS label for URL | taskmanager-gs699he |
💰 Cost (Azure for Students)
| Resource | Monthly Cost |
|---|---|
| VM (Standard_B1s) | ~$7.59 |
| Public IP | ~$3.00 |
| Disk (30 GB) | ~$1.20 |
| TLS (Let's Encrypt) | Free |
| Total | ~$11.79/mo |
💡 Azure for Students gives $100 free credit — enough for ~8 months.
🔒 Security
- HTTPS enforced (Caddy + Let's Encrypt)
- Databases on isolated Docker network (
backend-net) - Secrets via
.env(gitignored) - Security headers in Nginx
- Auto-restart on failure
🤖 AI Declaration
- Google Antigravity (Gemini): Scripts, Docker config, LaTeX docs, diagram
- All code reviewed and adapted by student
Technical University of Košice — KEMT FEI — Cloud Technologies — 2026
