106 lines
3.2 KiB
Bash
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."
|