134 lines
4.1 KiB
Bash
Executable File
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"
|
|
|