POTE/scripts/proxmox_setup.sh
ilia 9bb39c9913 Fix proxmox_setup.sh to work when running as root in LXC
- Detect if running as root and use 'su' instead of 'sudo' for postgres
- Fixes: sudo: command not found error in LXC containers
2025-12-14 21:01:30 -05:00

170 lines
4.7 KiB
Bash
Executable File

#!/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
sudo -u $POTE_USER 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..."
sudo -u $POTE_USER bash << 'EOF'
cd $POTE_DIR
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..."
sudo -u $POTE_USER bash << EOF
cat > $POTE_DIR/.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_DIR/.env
EOF
echo "✓ Environment file created"
# Step 8: Run database migrations
echo -e "${GREEN}[8/9]${NC} Running database migrations..."
sudo -u $POTE_USER bash << 'EOF'
cd $POTE_DIR
source venv/bin/activate
alembic upgrade head
EOF
echo "✓ Database schema initialized"
# Step 9: Setup directories
echo -e "${GREEN}[9/9]${NC} Creating directories..."
sudo -u $POTE_USER mkdir -p $POTE_HOME/logs
sudo -u $POTE_USER mkdir -p $POTE_HOME/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 ""