zkt26/sk1
2026-05-19 04:02:59 +02:00
..
api feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
caddy feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
db feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
docs Remove Exam Defense Q&A from documentation 2026-05-19 04:02:59 +02:00
frontend feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
.gitignore feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
backup-db.sh feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
cloud-init.yaml feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
docker-compose.yaml feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
env.example feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
prepare-app.sh feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
README.md feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
remove-app.sh feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00
view-logs.sh feat(sk1): Initial commit for Azure Cloud Deployment assignment 2026-05-19 03:52:09 +02:00

Task Manager — Cloud Deployment (SK1)

A full-stack task management web application deployed to Microsoft Azure using Docker Compose.

🏗️ Architecture

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