Files
postgres/install_postgres.sh
2025-12-09 11:12:08 +01:00

106 lines
3.2 KiB
Bash

#!/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 <<EOF > .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:<POSTGRES_PASSWORD>@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."