hvac-kia-content/deploy_production.sh
Ben Reed daab901e35 refactor: Update naming convention from hvacknowitall to hkia
Major Changes:
- Updated all code references from hvacknowitall/hvacnkowitall to hkia
- Renamed all existing markdown files to use hkia_ prefix
- Updated configuration files, scrapers, and production scripts
- Modified systemd service descriptions to use HKIA
- Changed NAS sync path to /mnt/nas/hkia

Files Updated:
- 20+ source files updated with new naming convention
- 34 markdown files renamed to hkia_* format
- All ScraperConfig brand_name parameters now use 'hkia'
- Documentation updated to reflect new naming

Rationale:
- Shorter, cleaner filenames
- Consistent branding across all outputs
- Easier to type and reference
- Maintains same functionality with improved naming

Next Steps:
- Deploy updated services to production
- Update any external references to old naming
- Monitor scrapers to ensure proper operation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 13:35:23 -03:00

250 lines
No EOL
6.6 KiB
Bash
Executable file

#!/bin/bash
#
# HKIA - Production Deployment Script
# Sets up systemd services, directories, and configuration
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Production paths
PROD_DIR="/opt/hvac-kia-content"
SERVICE_USER="hvac-content"
REPO_DIR="$(pwd)"
# Print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if running as root
check_root() {
if [[ $EUID -ne 0 ]]; then
print_error "This script must be run as root (use sudo)"
exit 1
fi
}
# Create service user
setup_user() {
print_status "Setting up service user..."
if ! id "$SERVICE_USER" &>/dev/null; then
useradd --system --shell /bin/bash --home-dir "$PROD_DIR" --create-home "$SERVICE_USER"
print_success "Created service user: $SERVICE_USER"
else
print_warning "Service user $SERVICE_USER already exists"
fi
}
# Setup production directory
setup_directories() {
print_status "Setting up production directories..."
# Create production directory
mkdir -p "$PROD_DIR"
mkdir -p "$PROD_DIR/data"
mkdir -p "$PROD_DIR/logs"
mkdir -p "$PROD_DIR/backups"
mkdir -p "$PROD_DIR/venv"
# Create NAS mount point (if doesn't exist)
mkdir -p "/mnt/nas/hkia"
# Copy application files
cp -r "$REPO_DIR/src" "$PROD_DIR/"
cp -r "$REPO_DIR/config" "$PROD_DIR/"
cp "$REPO_DIR/pyproject.toml" "$PROD_DIR/"
cp "$REPO_DIR/run_production.py" "$PROD_DIR/"
cp "$REPO_DIR/production_backlog_capture.py" "$PROD_DIR/"
cp "$REPO_DIR/automated_backlog_capture.py" "$PROD_DIR/"
# Copy environment template
if [[ -f "$REPO_DIR/.env.production" ]]; then
cp "$REPO_DIR/.env.production" "$PROD_DIR/.env.template"
print_warning "Remember to configure $PROD_DIR/.env with actual credentials"
fi
# Set ownership
chown -R "$SERVICE_USER:$SERVICE_USER" "$PROD_DIR"
print_success "Production directories configured"
}
# Install Python dependencies
setup_python() {
print_status "Setting up Python environment..."
# Install uv if not available
if ! command -v uv &> /dev/null; then
print_status "Installing uv package manager..."
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
fi
# Switch to service user for Python setup
sudo -u "$SERVICE_USER" bash << EOF
cd "$PROD_DIR"
export PATH="/home/$SERVICE_USER/.local/bin:\$PATH"
# Create virtual environment and install dependencies
uv venv venv
source venv/bin/activate
uv pip install -e .
# Install playwright browsers
if uv pip list | grep -q playwright; then
playwright install chromium
fi
EOF
print_success "Python environment configured"
}
# Install systemd services
install_services() {
print_status "Installing systemd services..."
# Copy systemd files
cp "$REPO_DIR/systemd/"*.service /etc/systemd/system/
cp "$REPO_DIR/systemd/"*.timer /etc/systemd/system/
# Update service files with correct paths and user
for service_file in /etc/systemd/system/hvac-*.service; do
sed -i "s|/home/ben/dev/hvac-kia-content|$PROD_DIR|g" "$service_file"
sed -i "s|User=ben|User=$SERVICE_USER|g" "$service_file"
sed -i "s|Group=ben|Group=$SERVICE_USER|g" "$service_file"
done
# Reload systemd
systemctl daemon-reload
# Enable services (but don't start yet)
systemctl enable hvac-content-aggregator.timer
systemctl enable hvac-monitoring.timer
systemctl enable hvac-tiktok-captions.timer
print_success "Systemd services installed and enabled"
}
# Setup monitoring
setup_monitoring() {
print_status "Setting up monitoring..."
# Copy monitoring files
cp -r "$REPO_DIR/monitoring" "$PROD_DIR/"
chown -R "$SERVICE_USER:$SERVICE_USER" "$PROD_DIR/monitoring"
# Create monitoring dashboard
sudo -u "$SERVICE_USER" bash << EOF
cd "$PROD_DIR"
source venv/bin/activate
python monitoring/setup_monitoring.py
EOF
print_success "Monitoring configured"
}
# Create logrotate configuration
setup_logrotate() {
print_status "Setting up log rotation..."
cat > /etc/logrotate.d/hvac-content << EOF
$PROD_DIR/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 $SERVICE_USER $SERVICE_USER
postrotate
systemctl reload hvac-content-aggregator.service || true
endscript
}
EOF
print_success "Log rotation configured"
}
# Verify installation
verify_installation() {
print_status "Verifying installation..."
# Check Python environment
if sudo -u "$SERVICE_USER" "$PROD_DIR/venv/bin/python" -c "import src.orchestrator; print('✓ Python modules OK')"; then
print_success "Python environment verified"
else
print_error "Python environment verification failed"
return 1
fi
# Check systemd services
for service in hvac-content-aggregator hvac-monitoring hvac-tiktok-captions; do
if systemctl is-enabled "${service}.timer" &>/dev/null; then
print_success "Service ${service}.timer is enabled"
else
print_error "Service ${service}.timer is not enabled"
return 1
fi
done
# Check directories
for dir in data logs backups; do
if [[ -d "$PROD_DIR/$dir" ]]; then
print_success "Directory $dir exists"
else
print_error "Directory $dir missing"
return 1
fi
done
print_success "Installation verification complete"
}
# Main deployment function
main() {
print_status "Starting HKIA production deployment..."
echo
check_root
setup_user
setup_directories
setup_python
install_services
setup_monitoring
setup_logrotate
verify_installation
echo
print_success "🎉 Production deployment complete!"
echo
print_warning "Next steps:"
echo "1. Configure $PROD_DIR/.env with actual credentials"
echo "2. Test the installation: sudo -u $SERVICE_USER $PROD_DIR/venv/bin/python $PROD_DIR/run_production.py --dry-run"
echo "3. Start services: sudo systemctl start hvac-content-aggregator.timer"
echo "4. Monitor logs: sudo journalctl -u hvac-content-aggregator.service -f"
echo "5. Check monitoring dashboard: http://localhost:8080"
echo
}
# Run main function
main "$@"