#!/usr/bin/env bash set -e echo "=== PostgreSQL Infra Installer ===" # Detect working directory (should be infra/postgres) SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR" echo "Using infra directory: $SCRIPT_DIR" # ----------------------------------------------------------- # 1. Ensure directories exist # ----------------------------------------------------------- echo "→ Creating required directories..." mkdir -p data mkdir -p backup # ----------------------------------------------------------- # 2. Permissions # ----------------------------------------------------------- echo "→ Setting directory permissions..." sudo chown -R "$USER:$USER" data backup # ----------------------------------------------------------- # 3. Create .env if missing # ----------------------------------------------------------- if [ ! -f ".env" ]; then echo "→ Creating .env file..." cat < .env POSTGRES_PASSWORD=$(openssl rand -hex 16) PGADMIN_PASSWORD=$(openssl rand -hex 16) EOF echo "Generated random passwords in .env" else echo "→ .env file already exists; skipping creation." fi echo "Current .env:" cat .env echo "" # ----------------------------------------------------------- # 4. Verify Docker & Docker Compose # ----------------------------------------------------------- echo "→ Checking Docker installation..." if ! command -v docker &> /dev/null; then echo "ERROR: Docker is not installed." exit 1 fi echo "→ Checking Docker Compose..." if ! docker compose version &> /dev/null; then echo "ERROR: Docker Compose V2 is not installed." exit 1 fi # ----------------------------------------------------------- # 5. Start PostgreSQL stack # ----------------------------------------------------------- echo "→ Starting PostgreSQL Docker stack..." docker compose up -d echo "→ Waiting for PostgreSQL to report healthy status..." sleep 3 docker ps --filter "name=postgres-db" # ----------------------------------------------------------- # 6. Setup backup container # ----------------------------------------------------------- echo "→ Checking backup service..." if [ -d "backup" ] && [ -f "backup/docker-compose.yml" ]; then echo "→ Starting backup runner..." cd backup docker compose up -d cd "$SCRIPT_DIR" else echo "⚠ Backup runner folder missing. Expected: ./backup/docker-compose.yml" echo "Skipping backup setup." fi # ----------------------------------------------------------- # 7. Summary # ----------------------------------------------------------- echo "" echo "====================================================" echo " PostgreSQL Infra Installed Successfully" echo "====================================================" echo "Host machine: $(hostname)" echo "Database port: 5432 (LAN accessible)" echo "Data dir: $SCRIPT_DIR/data" echo "Backups: $SCRIPT_DIR/backup/" echo "" echo "Connection string:" echo " postgresql://auction:@192.168.1.159:5432/auctiondb" echo "" echo "Start/Stop commands:" echo " docker compose up -d" echo " docker compose down" echo "" echo "If pgAdmin is enabled, visit:" echo " https://pgadmin.appmodel.nl/" echo "" echo "Done."