#!/bin/bash # POTE Proxmox/Ubuntu Setup Script # Run this inside your Proxmox LXC container or Ubuntu VM set -e echo "==========================================" echo " POTE - Proxmox Deployment Setup" echo "==========================================" echo "" # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Configuration POTE_USER="poteapp" POTE_HOME="/home/$POTE_USER" POTE_DIR="$POTE_HOME/pote" DB_NAME="pote" DB_USER="poteuser" DB_PASS="changeme123" # CHANGE THIS! echo -e "${YELLOW}⚠️ Using default password '$DB_PASS' - CHANGE THIS in production!${NC}" echo "" # Check if running as root if [ "$EUID" -ne 0 ]; then echo "Please run as root (sudo)" exit 1 fi # Step 1: Update system echo -e "${GREEN}[1/9]${NC} Updating system..." apt update && apt upgrade -y # Step 2: Install dependencies echo -e "${GREEN}[2/9]${NC} Installing dependencies..." apt install -y \ python3.11 \ python3.11-venv \ python3-pip \ postgresql \ postgresql-contrib \ git \ curl \ build-essential \ libpq-dev \ nano \ htop # Step 3: Setup PostgreSQL echo -e "${GREEN}[3/9]${NC} Setting up PostgreSQL..." # Check if we need sudo (if we're not root) if [ "$EUID" -eq 0 ]; then # Running as root, use su directly su - postgres -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'\"" | grep -q 1 || \ su - postgres -c "psql << EOF CREATE DATABASE $DB_NAME; CREATE USER $DB_USER WITH PASSWORD '$DB_PASS'; GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER; ALTER DATABASE $DB_NAME OWNER TO $DB_USER; EOF" else # Not root, use sudo sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'" | grep -q 1 || \ sudo -u postgres psql << EOF CREATE DATABASE $DB_NAME; CREATE USER $DB_USER WITH PASSWORD '$DB_PASS'; GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER; ALTER DATABASE $DB_NAME OWNER TO $DB_USER; EOF fi echo "✓ PostgreSQL database '$DB_NAME' created" # Step 4: Create app user echo -e "${GREEN}[4/9]${NC} Creating application user..." id -u $POTE_USER &>/dev/null || useradd -m -s /bin/bash $POTE_USER echo "✓ User '$POTE_USER' created" # Step 5: Clone repository (if not exists) echo -e "${GREEN}[5/9]${NC} Setting up POTE repository..." if [ ! -d "$POTE_DIR" ]; then echo "Enter your POTE repository URL (or press Enter to skip git clone):" read -r REPO_URL if [ -n "$REPO_URL" ]; then # Clone as the pote user su - $POTE_USER -c "git clone '$REPO_URL' '$POTE_DIR'" else echo "Skipping git clone. Make sure code is in $POTE_DIR" fi else echo "✓ Directory $POTE_DIR already exists" fi # Step 6: Setup Python environment echo -e "${GREEN}[6/9]${NC} Setting up Python environment..." su - $POTE_USER << 'EOF' cd pote python3.11 -m venv venv source venv/bin/activate pip install --upgrade pip pip install -e . echo "✓ Python dependencies installed" EOF # Step 7: Create .env file echo -e "${GREEN}[7/9]${NC} Creating environment configuration..." su - $POTE_USER << EOF cat > pote/.env << ENVEOF DATABASE_URL=postgresql://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME QUIVERQUANT_API_KEY= FMP_API_KEY= LOG_LEVEL=INFO ENVEOF chmod 600 pote/.env EOF echo "✓ Environment file created" # Step 8: Run database migrations echo -e "${GREEN}[8/9]${NC} Running database migrations..." su - $POTE_USER << 'EOF' cd pote source venv/bin/activate alembic upgrade head EOF echo "✓ Database schema initialized" # Step 9: Setup directories echo -e "${GREEN}[9/9]${NC} Creating directories..." su - $POTE_USER -c "mkdir -p ~/logs" su - $POTE_USER -c "mkdir -p ~/backups" echo "✓ Log and backup directories created" # Summary echo "" echo "==========================================" echo " ✅ POTE Installation Complete!" echo "==========================================" echo "" echo "Next steps:" echo "" echo "1. Switch to pote user:" echo " su - $POTE_USER" echo "" echo "2. Activate virtual environment:" echo " cd pote && source venv/bin/activate" echo "" echo "3. Test with fixtures (offline):" echo " python scripts/ingest_from_fixtures.py" echo "" echo "4. Enrich securities:" echo " python scripts/enrich_securities.py" echo "" echo "5. Setup cron jobs (as poteapp user):" echo " crontab -e" echo "" echo " Add these lines:" echo " 0 6 * * * cd $POTE_DIR && $POTE_DIR/venv/bin/python scripts/fetch_congressional_trades.py --days 7 >> $POTE_HOME/logs/trades.log 2>&1" echo " 15 6 * * * cd $POTE_DIR && $POTE_DIR/venv/bin/python scripts/enrich_securities.py >> $POTE_HOME/logs/enrich.log 2>&1" echo "" echo "⚠️ IMPORTANT: Change database password in .env!" echo " Edit: $POTE_DIR/.env" echo "" echo "📖 Full guide: docs/08_proxmox_deployment.md" echo ""