- PR1: Project scaffold, DB models, price loader - PR2: Congressional trade ingestion (House Stock Watcher) - PR3: Security enrichment + deployment infrastructure - 37 passing tests, 87%+ coverage - Docker + Proxmox deployment ready - Complete documentation - Works 100% offline with fixtures
156 lines
4.2 KiB
Bash
Executable File
156 lines
4.2 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..."
|
|
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
|
|
|
|
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 ""
|
|
|