Files
solace-bg-dubai/deployment/proxmox/deploy-database.sh
defiQUG c94eb595f8
Some checks failed
CI / lint-and-test (push) Has been cancelled
Initial commit: add .gitignore and README
2026-02-09 21:51:53 -08:00

134 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deploy PostgreSQL Database Container on Proxmox VE
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="$SCRIPT_DIR/config/dapp.conf"
# Load configuration
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
fi
# Default values
VMID="${VMID_DATABASE:-3002}"
HOSTNAME="${HOSTNAME:-solace-db}"
IP_ADDRESS="${DATABASE_IP:-192.168.11.62}"
MEMORY="${DATABASE_MEMORY:-4096}"
CORES="${DATABASE_CORES:-2}"
DISK="${DATABASE_DISK:-50}"
# Database configuration
DB_NAME="${DATABASE_NAME:-solace_treasury}"
DB_USER="${DATABASE_USER:-solace_user}"
DB_PASSWORD="${DATABASE_PASSWORD:-}"
if [[ -z "$DB_PASSWORD" ]]; then
echo "ERROR: DATABASE_PASSWORD must be set in environment or config file"
exit 1
fi
echo "=========================================="
echo "Deploying Database Container"
echo "=========================================="
echo "VMID: $VMID"
echo "Hostname: $HOSTNAME"
echo "IP: $IP_ADDRESS"
echo "Memory: ${MEMORY}MB"
echo "Cores: $CORES"
echo "Disk: ${DISK}GB"
echo ""
# Check if running on Proxmox host
if ! command -v pct &> /dev/null; then
echo "ERROR: This script must be run on Proxmox host (pct command not found)"
exit 1
fi
# Check if container already exists
if pct list | grep -q "^\s*$VMID\s"; then
echo "Container $VMID already exists. Skipping creation."
echo "To recreate, delete the container first: pct destroy $VMID"
else
echo "Creating container $VMID..."
pct create "$VMID" \
"${CONTAINER_OS_TEMPLATE:-local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst}" \
--storage "${PROXMOX_STORAGE:-local-lvm}" \
--hostname "$HOSTNAME" \
--memory "$MEMORY" \
--cores "$CORES" \
--rootfs "${PROXMOX_STORAGE:-local-lvm}:${DISK}" \
--net0 "bridge=${PROXMOX_BRIDGE:-vmbr0},name=eth0,ip=${IP_ADDRESS}/24,gw=${GATEWAY:-192.168.11.1},type=veth" \
--unprivileged "${CONTAINER_UNPRIVILEGED:-1}" \
--swap "${CONTAINER_SWAP:-512}" \
--onboot "${CONTAINER_ONBOOT:-1}" \
--timezone "${CONTAINER_TIMEZONE:-UTC}" \
--features nesting=1,keyctl=1
echo "Container $VMID created successfully"
fi
# Start container
echo "Starting container $VMID..."
pct start "$VMID" || true
# Wait for container to be ready
echo "Waiting for container to be ready..."
sleep 5
for i in {1..30}; do
if pct exec "$VMID" -- test -f /etc/os-release 2>/dev/null; then
break
fi
sleep 1
done
# Install PostgreSQL
echo "Installing PostgreSQL..."
pct exec "$VMID" -- bash -c "
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y postgresql postgresql-contrib
systemctl enable postgresql
systemctl start postgresql
"
# Configure PostgreSQL
echo "Configuring PostgreSQL..."
pct exec "$VMID" -- bash -c "
# Update postgresql.conf to listen on container IP
sed -i \"s/#listen_addresses = 'localhost'/listen_addresses = '${IP_ADDRESS},localhost'/\" /etc/postgresql/*/main/postgresql.conf
# Update pg_hba.conf to allow connections from backend container
echo \"host all all 192.168.11.0/24 md5\" >> /etc/postgresql/*/main/pg_hba.conf
# Restart PostgreSQL
systemctl restart postgresql
"
# Create database and user
echo "Creating database and user..."
pct exec "$VMID" -- bash -c "
sudo -u postgres psql <<EOF
CREATE DATABASE ${DB_NAME};
CREATE USER ${DB_USER} WITH ENCRYPTED PASSWORD '${DB_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};
ALTER DATABASE ${DB_NAME} OWNER TO ${DB_USER};
EOF
"
echo ""
echo "=========================================="
echo "Database Container Deployment Complete"
echo "=========================================="
echo "Container: $VMID ($HOSTNAME)"
echo "IP Address: $IP_ADDRESS"
echo "Database: $DB_NAME"
echo "User: $DB_USER"
echo "Connection String: postgresql://${DB_USER}:${DB_PASSWORD}@${IP_ADDRESS}:5432/${DB_NAME}"
echo ""
echo "Next steps:"
echo "1. Update backend/.env with the connection string above"
echo "2. Run database migrations: cd backend && pnpm run db:migrate"