- Replace 'sudo -u' with 'su -' throughout the script - Works perfectly in LXC containers running as root (no sudo installed) - Also works on regular VMs/servers where sudo is available - Fixes all remaining: sudo: command not found errors
171 lines
4.7 KiB
Bash
Executable File
171 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
|
|
# 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 ""
|
|
|