Spaces:
Sleeping
Sleeping
| # Fixed script for Amazon Linux 2023 | |
| $setupScript = @' | |
| #!/bin/bash | |
| cd /home/ec2-user/AWS_Portfolio_Manager | |
| # Install supervisor via pip | |
| sudo pip3 install supervisor --break-system-packages | |
| # Create supervisor directories | |
| sudo mkdir -p /etc/supervisor/conf.d | |
| sudo mkdir -p /var/log/supervisor | |
| # Create main supervisor config | |
| sudo tee /etc/supervisord.conf > /dev/null <<'MAINEOF' | |
| [unix_http_server] | |
| file=/tmp/supervisor.sock | |
| [supervisord] | |
| logfile=/var/log/supervisor/supervisord.log | |
| logfile_maxbytes=50MB | |
| logfile_backups=10 | |
| loglevel=info | |
| pidfile=/tmp/supervisord.pid | |
| nodaemon=false | |
| minfds=1024 | |
| minprocs=200 | |
| [rpcinterface:supervisor] | |
| supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface | |
| [supervisorctl] | |
| serverurl=unix:///tmp/supervisor.sock | |
| [include] | |
| files = /etc/supervisor/conf.d/*.conf | |
| MAINEOF | |
| # Create systemd service for supervisor | |
| sudo tee /etc/systemd/system/supervisord.service > /dev/null <<'SYSEOF' | |
| [Unit] | |
| Description=Supervisor process control system | |
| After=network.target | |
| [Service] | |
| Type=forking | |
| ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf | |
| ExecReload=/usr/local/bin/supervisorctl reload | |
| ExecStop=/usr/local/bin/supervisorctl shutdown | |
| Restart=on-failure | |
| [Install] | |
| WantedBy=multi-user.target | |
| SYSEOF | |
| # Enable and start supervisord | |
| sudo systemctl daemon-reload | |
| sudo systemctl enable supervisord | |
| sudo systemctl start supervisord | |
| # Kill any running streamlit | |
| pkill -f 'streamlit run' || true | |
| # Create supervisor config for streamlit | |
| sudo tee /etc/supervisor/conf.d/streamlit.conf > /dev/null <<'EOF' | |
| [program:streamlit] | |
| directory=/home/ec2-user/AWS_Portfolio_Manager | |
| command=/home/ec2-user/AWS_Portfolio_Manager/venv/bin/streamlit run application.py --server.port 5000 --server.address 0.0.0.0 | |
| user=ec2-user | |
| autostart=true | |
| autorestart=true | |
| stderr_logfile=/var/log/streamlit.err.log | |
| stdout_logfile=/var/log/streamlit.out.log | |
| environment=HOME="/home/ec2-user",USER="ec2-user" | |
| EOF | |
| # Reload and start | |
| sudo supervisorctl reread | |
| sudo supervisorctl update | |
| sudo supervisorctl start streamlit | |
| '@ | |
| # Write with Unix line endings | |
| [System.IO.File]::WriteAllText("$PWD\setup_supervisor.sh", $setupScript.Replace("`r`n", "`n"), [System.Text.Encoding]::ASCII) | |
| # Now run on all instances | |
| . .\get-ips.ps1 | |
| $instanceIds = aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names portfolio-manager-asg --query 'AutoScalingGroups[0].Instances[?HealthStatus==`Healthy`].InstanceId' --output text | |
| $instanceIdArray = $instanceIds -split "`t" | |
| ssh-keygen -t rsa -f temp_supervisor_key -N '""' -q | |
| for ($i = 0; $i -lt $global:instances.Count; $i++) { | |
| $ip = $global:instances[$i] | |
| $instanceId = $instanceIdArray[$i] | |
| Write-Host "Setting up supervisor on $ip..." -ForegroundColor Yellow | |
| aws ec2-instance-connect send-ssh-public-key --instance-id $instanceId --instance-os-user ec2-user --ssh-public-key file://temp_supervisor_key.pub | Out-Null | |
| # Copy script and execute | |
| scp -i temp_supervisor_key -o StrictHostKeyChecking=no setup_supervisor.sh ec2-user@${ip}:/tmp/ | |
| ssh -i temp_supervisor_key -o StrictHostKeyChecking=no ec2-user@$ip "bash /tmp/setup_supervisor.sh" | |
| if ($LASTEXITCODE -eq 0) { | |
| Write-Host "Supervisor configured on $ip" -ForegroundColor Green | |
| } else { | |
| Write-Host "Check errors on $ip" -ForegroundColor Yellow | |
| } | |
| } | |
| Remove-Item temp_supervisor_key, temp_supervisor_key.pub, setup_supervisor.sh -ErrorAction SilentlyContinue | |
| Write-Host "`nSetup complete! Verifying..." -ForegroundColor Green | |
| # Verify | |
| foreach ($ip in $global:instances) { | |
| Write-Host "`nChecking $ip..." -ForegroundColor Cyan | |
| ssh -i "C:\Users\mccoo\.ssh\aws-eb" ec2-user@$ip "sudo supervisorctl status" 2>$null | |
| } |