From ae6fa92d552ff574d4613d9c496fa4fcb640c6fc Mon Sep 17 00:00:00 2001 From: devmatrix Date: Fri, 20 Feb 2026 22:50:34 +0000 Subject: [PATCH] Add .gitignore and production deployment script --- .gitignore | 51 ++++++++++ deploy-prod.sh | 260 ++++++------------------------------------------- server.log | 6 ++ 3 files changed, 87 insertions(+), 230 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49d763a --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +venv/ +env/ +ENV/ + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Application data +data/ +*.json +!data/.gitkeep + +# Logs +*.log +logs/ + +# OS +.DS_Store +Thumbs.db + +# Temp files +tmp/ +temp/ +*.tmp \ No newline at end of file diff --git a/deploy-prod.sh b/deploy-prod.sh index f2159ac..e85c48a 100755 --- a/deploy-prod.sh +++ b/deploy-prod.sh @@ -1,242 +1,42 @@ #!/bin/bash -# IPMI Controller - Production Deployment Script -# Run this on the production server to set up auto-start and persistence +# Deploy IPMI Controller to production set -e -INSTALL_DIR="/opt/ipmi-controller" -DATA_DIR="$INSTALL_DIR/data" +PROD_HOST="192.168.5.210" +PROD_USER="devmatrix" +PROD_DIR="/opt/ipmi-controller" SERVICE_NAME="ipmi-controller" -USER="devmatrix" -echo "🌡️ IPMI Controller - Production Deployment" -echo "=============================================" -echo "" +echo "=== Deploying IPMI Controller to Production ===" +echo "Target: $PROD_HOST" -# Check if running as root -if [ "$EUID" -ne 0 ]; then - echo "❌ Please run as root: sudo ./deploy-prod.sh" - exit 1 -fi +# Create remote directory +echo "Creating remote directory..." +ssh $PROD_USER@$PROD_HOST "sudo mkdir -p $PROD_DIR && sudo chown $PROD_USER:$PROD_USER $PROD_DIR" -# Get the source directory -SOURCE_DIR="${1:-$(pwd)}" -if [ ! -f "$SOURCE_DIR/web_server.py" ]; then - echo "❌ Cannot find web_server.py in $SOURCE_DIR" - echo "Usage: sudo ./deploy-prod.sh [source-directory]" - exit 1 -fi +# Copy files +echo "Copying files..." +rsync -avz --exclude='.git' --exclude='__pycache__' --exclude='data/*.json' \ + ./ $PROD_USER@$PROD_HOST:$PROD_DIR/ -echo "📁 Source: $SOURCE_DIR" -echo "📁 Install: $INSTALL_DIR" -echo "" +# Install systemd service +echo "Installing systemd service..." +ssh $PROD_USER@$PROD_HOST "sudo cp $PROD_DIR/ipmi-controller.service /etc/systemd/system/" +ssh $PROD_USER@$PROD_HOST "sudo systemctl daemon-reload" +ssh $PROD_USER@$PROD_HOST "sudo systemctl enable $SERVICE_NAME" -# Create directories -echo "📂 Creating directories..." -mkdir -p "$INSTALL_DIR" -mkdir -p "$DATA_DIR" -mkdir -p /var/log/ipmi-controller - -# Copy application files -echo "📋 Copying application files..." -cp "$SOURCE_DIR/web_server.py" "$INSTALL_DIR/" -cp "$SOURCE_DIR/fan_controller.py" "$INSTALL_DIR/" -cp "$SOURCE_DIR/requirements.txt" "$INSTALL_DIR/" - -# Install dependencies -echo "🐍 Installing Python dependencies..." -pip3 install -q -r "$SOURCE_DIR/requirements.txt" || pip install -q -r "$SOURCE_DIR/requirements.txt" - -# Install ipmitool if not present -if ! command -v ipmitool &> /dev/null; then - echo "📦 Installing ipmitool..." - apt-get update -qq - apt-get install -y -qq ipmitool -fi - -# Preserve existing config if it exists -if [ -f "$DATA_DIR/config.json" ]; then - echo "💾 Preserving existing configuration..." - cp "$DATA_DIR/config.json" "$DATA_DIR/config.json.backup.$(date +%Y%m%d%H%M%S)" -else - echo "⚙️ Creating default configuration..." - cat > "$DATA_DIR/config.json" << 'EOF' -{ - "ipmi_host": "", - "ipmi_username": "", - "ipmi_password": "", - "ipmi_port": 623, - "http_sensor_enabled": false, - "http_sensor_url": "", - "http_sensor_timeout": 10, - "enabled": false, - "poll_interval": 10, - "min_speed": 10, - "max_speed": 100, - "panic_temp": 85, - "panic_speed": 100, - "panic_on_no_data": true, - "no_data_timeout": 60, - "primary_sensor": "cpu", - "sensor_preference": "auto", - "fans": {}, - "fan_groups": {}, - "fan_curves": { - "Balanced": { - "points": [ - {"temp": 30, "speed": 10}, - {"temp": 35, "speed": 12}, - {"temp": 40, "speed": 15}, - {"temp": 45, "speed": 20}, - {"temp": 50, "speed": 30}, - {"temp": 55, "speed": 40}, - {"temp": 60, "speed": 55}, - {"temp": 65, "speed": 70}, - {"temp": 70, "speed": 85}, - {"temp": 75, "speed": 95}, - {"temp": 80, "speed": 100} - ], - "sensor_source": "cpu", - "applies_to": "all" - }, - "Silent": { - "points": [ - {"temp": 30, "speed": 5}, - {"temp": 40, "speed": 10}, - {"temp": 50, "speed": 15}, - {"temp": 55, "speed": 25}, - {"temp": 60, "speed": 35}, - {"temp": 65, "speed": 50}, - {"temp": 70, "speed": 70}, - {"temp": 75, "speed": 85}, - {"temp": 80, "speed": 100} - ], - "sensor_source": "cpu", - "applies_to": "all" - }, - "Performance": { - "points": [ - {"temp": 30, "speed": 20}, - {"temp": 35, "speed": 25}, - {"temp": 40, "speed": 35}, - {"temp": 45, "speed": 45}, - {"temp": 50, "speed": 55}, - {"temp": 55, "speed": 70}, - {"temp": 60, "speed": 85}, - {"temp": 65, "speed": 95}, - {"temp": 70, "speed": 100} - ], - "sensor_source": "cpu", - "applies_to": "all" - } - }, - "active_curve": "Balanced", - "theme": "dark" -} -EOF -fi - -# Create users file if not exists -if [ ! -f "$DATA_DIR/users.json" ]; then - echo '{"users": {}}' > "$DATA_DIR/users.json" -fi - -# Set ownership -chown -R "$USER:$USER" "$INSTALL_DIR" -chown -R "$USER:$USER" /var/log/ipmi-controller - -# Create systemd service -echo "🔧 Creating systemd service..." -cat > "/etc/systemd/system/$SERVICE_NAME.service" << EOF -[Unit] -Description=IPMI Controller - Fan Control for Dell Servers -After=network.target -Wants=network.target - -[Service] -Type=simple -User=$USER -Group=$USER -WorkingDirectory=$INSTALL_DIR -Environment="PYTHONUNBUFFERED=1" -Environment="DATA_DIR=$DATA_DIR" -Environment="LOG_DIR=/var/log/ipmi-controller" -ExecStart=/usr/bin/python3 $INSTALL_DIR/web_server.py -ExecStop=/bin/kill -TERM \$MAINPID -ExecReload=/bin/kill -HUP \$MAINPID - -# Restart policy -Restart=always -RestartSec=10 -StartLimitInterval=60s -StartLimitBurst=3 - -# Logging -StandardOutput=append:/var/log/ipmi-controller/server.log -StandardError=append:/var/log/ipmi-controller/error.log - -# Security -NoNewPrivileges=false -ProtectSystem=no -ProtectHome=no - -[Install] -WantedBy=multi-user.target -EOF - -# Create logrotate config -echo "📝 Creating logrotate config..." -cat > "/etc/logrotate.d/ipmi-controller" << EOF -/var/log/ipmi-controller/*.log { - daily - rotate 14 - compress - delaycompress - missingok - notifempty - create 644 $USER $USER - sharedscripts - postrotate - systemctl reload ipmi-controller - endscript -} -EOF - -# Reload systemd -echo "🔄 Reloading systemd..." -systemctl daemon-reload - -# Enable service -echo "✅ Enabling service to start on boot..." -systemctl enable "$SERVICE_NAME" - -echo "" -echo "🚀 Starting IPMI Controller..." -systemctl start "$SERVICE_NAME" - -sleep 2 +# Restart service +echo "Restarting service..." +ssh $PROD_USER@$PROD_HOST "sudo systemctl restart $SERVICE_NAME" # Check status -if systemctl is-active --quiet "$SERVICE_NAME"; then - echo "" - echo "✅ IPMI Controller is running!" - echo "" - echo "🌐 Access: http://$(hostname -I | awk '{print $1}'):8000" - echo "" - echo "📋 Management Commands:" - echo " Status: sudo systemctl status $SERVICE_NAME" - echo " Logs: sudo journalctl -u $SERVICE_NAME -f" - echo " Restart: sudo systemctl restart $SERVICE_NAME" - echo " Stop: sudo systemctl stop $SERVICE_NAME" - echo "" - echo "💾 Settings: $DATA_DIR/config.json" - echo "📜 Logs: /var/log/ipmi-controller/" - echo "" - echo "✅ Production deployment complete!" - echo " Service will auto-start on boot." -else - echo "" - echo "⚠️ Service failed to start. Check logs:" - echo " sudo journalctl -u $SERVICE_NAME -f" - exit 1 -fi +echo "Checking service status..." +sleep 2 +ssh $PROD_USER@$PROD_HOST "sudo systemctl status $SERVICE_NAME --no-pager" + +echo "" +echo "=== Deployment Complete ===" +echo "IPMI Controller is now running at: http://$PROD_HOST:8000" +echo "" +echo "To check logs: ssh $PROD_USER@$PROD_HOST 'sudo journalctl -u $SERVICE_NAME -f'" \ No newline at end of file diff --git a/server.log b/server.log index c161183..d1f56ee 100644 --- a/server.log +++ b/server.log @@ -464,3 +464,9 @@ NameError: name 'padding' is not defined 2026-02-20 22:46:56,801 - fan_controller - INFO - All fans set to 15% (Temp 40.0°C) 2026-02-20 22:47:12,899 - fan_controller - INFO - Fan 0xff speed set to 14% 2026-02-20 22:47:12,900 - fan_controller - INFO - All fans set to 14% (Temp 38.0°C) +2026-02-20 22:48:44,782 - fan_controller - INFO - Fan 0xff speed set to 16% +2026-02-20 22:48:44,783 - fan_controller - INFO - All fans set to 16% (Temp 41.0°C) +2026-02-20 22:49:00,730 - fan_controller - INFO - Fan 0xff speed set to 15% +2026-02-20 22:49:00,730 - fan_controller - INFO - All fans set to 15% (Temp 40.0°C) +2026-02-20 22:49:16,428 - fan_controller - INFO - Fan 0xff speed set to 14% +2026-02-20 22:49:16,428 - fan_controller - INFO - All fans set to 14% (Temp 39.0°C)