> $LOG # 1. MiroFish echo "=== MIROFISH ===" >> $LOG cd /opt/mirofish 2>/dev/null if [ -f package.json ]; then echo "npm install..." >> $LOG npm install >> $LOG 2>&1 echo "MiroFish modules: $(ls node_modules 2>/dev/null | wc -l)" >> $LOG # Configure .env if [ ! -f .env ]; then cp .env.example .env 2>/dev/null; fi sed -i 's/your_api_key/sk-34db1ad3152443cd86563d1bfc576c30/g' .env 2>/dev/null # Start on port 5010 (3000 taken by CRM) PORT=5010 nohup npm run dev >> /tmp/mirofish.log 2>&1 & echo "MiroFish PID: $!" >> $LOG else echo "MiroFish: package.json not found" >> $LOG fi # 2. Paperclip echo "=== PAPERCLIP ===" >> $LOG cd /opt/paperclip-weval 2>/dev/null if [ -f package.json ]; then echo "npm install..." >> $LOG npm install >> $LOG 2>&1 echo "Paperclip modules: $(ls node_modules 2>/dev/null | wc -l)" >> $LOG PORT=3150 nohup npm start >> /tmp/paperclip.log 2>&1 & echo "Paperclip PID: $!" >> $LOG else echo "Paperclip: package.json not found" >> $LOG fi # 3. Scrapy project fix echo "=== SCRAPY ===" >> $LOG cd /opt/weval-scrapy python3 -m scrapy list >> $LOG 2>&1 echo "SCRIPT DONE $(date)" >> $LOG BASH; file_put_contents("/opt/launch-all.sh", $script); chmod("/opt/launch-all.sh", 0755); // Launch detached using proc_open (survives PHP shutdown) $proc = proc_open( "nohup bash /opt/launch-all.sh > /dev/null 2>&1 &", [["pipe","r"],["pipe","w"],["pipe","w"]], $pipes ); if(is_resource($proc)) { proc_close($proc); echo json_encode(["ok"=>true,"status"=>"launched","log"=>$log,"check"=>"tail -f /tmp/weval-launch-all.log"]); } else { // Fallback: exec exec("nohup bash /opt/launch-all.sh > /dev/null 2>&1 &"); echo json_encode(["ok"=>true,"status"=>"launched_exec","log"=>$log]); }