From 2443ce80f7208eccc7172796a8b102d4f89a8183 Mon Sep 17 00:00:00 2001 From: Nitheesh Date: Wed, 1 Apr 2026 10:00:23 +0200 Subject: [PATCH] initial commit --- z1/NitheeshWork_Documentation.docx | Bin 0 -> 18085 bytes z1/README.md | 241 +++++++++++++++++++++++++++++ z1/docker-compose.yaml | 106 +++++++++++++ z1/nitheeshwork.tar.gz | Bin 0 -> 13988 bytes z1/prepare-app.sh | 36 +++++ z1/remove-app.sh | 39 +++++ z1/start-app.sh | 34 ++++ z1/stop-app.sh | 20 +++ 8 files changed, 476 insertions(+) create mode 100644 z1/NitheeshWork_Documentation.docx create mode 100644 z1/README.md create mode 100644 z1/docker-compose.yaml create mode 100644 z1/nitheeshwork.tar.gz create mode 100644 z1/prepare-app.sh create mode 100644 z1/remove-app.sh create mode 100644 z1/start-app.sh create mode 100644 z1/stop-app.sh diff --git a/z1/NitheeshWork_Documentation.docx b/z1/NitheeshWork_Documentation.docx new file mode 100644 index 0000000000000000000000000000000000000000..65efa1b6905df697f4b0e163e004a1ba54bcedb8 GIT binary patch literal 18085 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/dev/null 2>&1 \ + && echo " Network already exists, skipping." \ + || docker network create nitheeshwork-net + +# ── 2. Named volumes ───────────────────────────────────────── +echo "" +echo "▸ Creating named volumes…" +for vol in nitheeshwork-postgres-data nitheeshwork-redis-data nitheeshwork-pgadmin-data; do + docker volume inspect "$vol" >/dev/null 2>&1 \ + && echo " Volume $vol already exists, skipping." \ + || docker volume create "$vol" && echo " Created: $vol" +done + +# ── 3. Build backend image ─────────────────────────────────── +echo "" +echo "▸ Building backend Docker image…" +docker build -t nitheeshwork-backend:latest ./backend + +echo "" +echo "✔ Preparation complete." +echo " Run ./start-app.sh to start all services." diff --git a/z1/remove-app.sh b/z1/remove-app.sh new file mode 100644 index 0000000..8c8a93c --- /dev/null +++ b/z1/remove-app.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# ============================================================ +# remove-app.sh – Remove ALL NitheeshWork containers, images, +# volumes, and network (full cleanup) +# ============================================================ +set -euo pipefail + +echo "╔══════════════════════════════════════════════╗" +echo "║ NitheeshWork – Remove Application ║" +echo "╚══════════════════════════════════════════════╝" +echo "" +echo "⚠ WARNING: This will delete all data, including" +echo " the PostgreSQL database and Redis cache." +echo "" +read -rp " Are you sure? Type 'yes' to confirm: " confirm +[[ "$confirm" == "yes" ]] || { echo "Aborted."; exit 0; } + +cd "$(dirname "$0")" + +echo "" +echo "▸ Stopping and removing containers…" +docker compose down --remove-orphans 2>/dev/null || true + +echo "" +echo "▸ Removing named volumes…" +for vol in nitheeshwork-postgres-data nitheeshwork-redis-data nitheeshwork-pgadmin-data; do + docker volume rm "$vol" 2>/dev/null && echo " Removed: $vol" || echo " Volume $vol not found, skipping." +done + +echo "" +echo "▸ Removing Docker network…" +docker network rm nitheeshwork-net 2>/dev/null && echo " Removed: nitheeshwork-net" || echo " Network not found, skipping." + +echo "" +echo "▸ Removing built images…" +docker rmi nitheeshwork-backend:latest 2>/dev/null && echo " Removed: nitheeshwork-backend:latest" || echo " Image not found, skipping." + +echo "" +echo "✔ All NitheeshWork resources have been removed." diff --git a/z1/start-app.sh b/z1/start-app.sh new file mode 100644 index 0000000..c173c2d --- /dev/null +++ b/z1/start-app.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# ============================================================ +# start-app.sh – Start all NitheeshWork services +# ============================================================ +set -euo pipefail + +echo "╔══════════════════════════════════════════════╗" +echo "║ NitheeshWork – Start Application ║" +echo "╚══════════════════════════════════════════════╝" + +cd "$(dirname "$0")" + +echo "" +echo "▸ Starting services with docker compose…" +docker compose up -d --remove-orphans + +echo "" +echo "▸ Waiting for services to become healthy…" +sleep 6 + +docker compose ps + +echo "" +echo "╔══════════════════════════════════════════════════════╗" +echo "║ NitheeshWork is ready! ║" +echo "╠══════════════════════════════════════════════════════╣" +echo "║ 🌐 Web App (frontend) → http://localhost:8080 ║" +echo "║ 🔌 REST API (backend) → http://localhost:4000 ║" +echo "║ 🗄️ pgAdmin (DB UI) → http://localhost:5050 ║" +echo "║ ║" +echo "║ pgAdmin login: admin@nitheeshwork.com / adminpass ║" +echo "║ PostgreSQL: host=postgres db=taskdb ║" +echo "║ user=taskuser pass=taskpass ║" +echo "╚══════════════════════════════════════════════════════╝" diff --git a/z1/stop-app.sh b/z1/stop-app.sh new file mode 100644 index 0000000..28255ef --- /dev/null +++ b/z1/stop-app.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# ============================================================ +# stop-app.sh – Stop all NitheeshWork services (data preserved) +# ============================================================ +set -euo pipefail + +echo "╔══════════════════════════════════════════════╗" +echo "║ NitheeshWork – Stop Application ║" +echo "╚══════════════════════════════════════════════╝" + +cd "$(dirname "$0")" + +echo "" +echo "▸ Stopping all services (volumes and data are preserved)…" +docker compose stop + +echo "" +echo "✔ All services stopped." +echo " Data in volumes is preserved." +echo " Run ./start-app.sh to resume."