Файловый менеджер - Редактировать - /home/gqdcvggs/.bash_history
Назад
npm install #1742592175 npm install pm2 -g #1742592187 pm2 start server.js --name "trafficlight" #1742592191 clear #1742592654 npm install express socket.io body-parser #1742592667 pm2 start server.js --name "trafficlight" --watch #1742592681 pm2 status #1742592694 pm2 restart trafficlight #1742592698 clear #1742592701 pm2 status #1742592718 pm2 logs trafficlight --lines 100 --watch #1742592787 pm2 restart trafficlight #1742592790 pm2 status #1742592797 clear #1742592819 pm2 status #1742592832 clear #1742592975 <html lang="en"> #1742592975 <head> #1742592975 <meta charset="UTF-8"> #1742592975 <meta name="viewport" content="width=device-width, initial-scale=1.0"> #1742592975 <title>TrafficLight</title> #1742592975 <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap" rel="stylesheet"> #1742592975 <script src="https://cdn.tailwindcss.com"></script> #1742592975 <script> #1742592975 tailwind.config = { #1742592975 theme: { #1742592975 extend: { #1742592975 fontFamily: { #1742592975 'poppins': ['Poppins', 'sans-serif'] #1742592975 } #1742592975 } #1742592975 } #1742592975 } #1742592975 </script> #1742592975 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /> #1742592975 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script> #1742592975 <style> #1742592975 body { #1742592975 font-family: 'Poppins', sans-serif; #1742592975 font-weight: 300; #1742592975 } #1742592975 #map { #1742592975 height: 75vh; #1742592975 width: 100%; #1742592975 } #1742592975 .modal { #1742592975 display: none; #1742592975 position: fixed; #1742592975 z-index: 1000; #1742592975 left: 0; #1742592975 top: 0; #1742592975 width: 100%; #1742592975 height: 100%; #1742592975 background-color: rgba(0,0,0,0.5); #1742592975 } #1742592975 .modal-content { #1742592975 background-color: white; #1742592975 margin: 10% auto; #1742592975 padding: 20px; #1742592975 width: 90%; #1742592975 max-width: 500px; #1742592975 border-radius: 8px; #1742592975 } #1742592975 .location-dot { #1742592975 width: 16px; #1742592975 height: 16px; #1742592975 background-color: blue; #1742592975 border-radius: 50%; #1742592975 border: 2px solid white; #1742592975 animation: pulse 1.5s infinite; #1742592975 } #1742592975 @keyframes pulse { #1742592975 0% { #1742592975 box-shadow: 0 0 0 0 rgba(0, 0, 255, 0.7); #1742592975 } #1742592975 70% { #1742592975 box-shadow: 0 0 0 10px rgba(0, 0, 255, 0); #1742592975 } #1742592975 100% { #1742592975 box-shadow: 0 0 0 0 rgba(0, 0, 255, 0); #1742592975 } #1742592975 } #1742592975 </style> #1742592975 </head> #1742592975 <body class="bg-white"> #1742592976 <header class="py-3 px-4 shadow-sm bg-blue-50 sticky top-0 z-10"> #1742592976 <h1 class="text-xl text-center font-medium">TrafficLight</h1> #1742592976 </header> #1742592976 <div id="map"></div> #1742592976 <div class="fixed bottom-4 right-4 flex flex-col gap-2 z-20"> #1742592976 <button id="addLightBtn" class="bg-blue-500 text-white p-3 rounded-full shadow-lg hover:bg-blue-600"> #1742592976 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-6 h-6"> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4" /> #1742592976 </svg> #1742592976 </button> #1742592976 <button id="measureBtn" class="bg-green-500 text-white p-3 rounded-full shadow-lg hover:bg-green-600"> #1742592976 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-6 h-6"> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" /> #1742592976 </svg> #1742592976 </button> #1742592976 <button id="locateBtn" class="bg-purple-500 text-white p-3 rounded-full shadow-lg hover:bg-purple-600"> #1742592976 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-6 h-6"> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" /> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" /> #1742592976 </svg> #1742592976 </button> #1742592976 </div> #1742592976 <div id="addLightModal" class="modal"> #1742592976 <div class="modal-content"> #1742592976 <div class="flex justify-between items-center mb-4"> #1742592976 <h2 class="text-lg font-medium">Add New Traffic Light</h2> #1742592976 <button class="close-modal text-gray-500 hover:text-gray-700"> #1742592976 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> #1742592976 </svg> #1742592976 </button> #1742592976 </div> #1742592976 <form id="addTrafficLightForm"> #1742592976 <div class="mb-3"> #1742592976 <label class="block text-sm mb-1">Name</label> #1742592976 <input type="text" id="lightName" class="w-full px-3 py-2 border rounded" required> #1742592976 </div> #1742592976 <div class="mb-3"> #1742592976 <label class="block text-sm mb-1">Location (tap map to set)</label> #1742592976 <div class="flex gap-2"> #1742592976 <input type="text" id="latitude" placeholder="Latitude" class="w-full px-3 py-2 border rounded" required readonly> #1742592976 <input type="text" id="longitude" placeholder="Longitude" class="w-full px-3 py-2 border rounded" required readonly> #1742592976 </div> #1742592976 </div> #1742592976 <div class="mb-3"> #1742592976 <label class="block text-sm mb-1">Direction</label> #1742592976 <select id="direction" class="w-full px-3 py-2 border rounded" required> #1742592976 <option value="north">North</option> #1742592976 <option value="east">East</option> #1742592976 <option value="south">South</option> #1742592976 <option value="west">West</option> #1742592976 </select> #1742592976 </div> #1742592976 <div class="mb-4"> #1742592976 <label class="block text-sm mb-1">Cycle Duration (seconds)</label> #1742592976 <div class="flex gap-2"> #1742592976 <div class="w-1/2"> #1742592976 <label class="block text-xs text-red-500">Red</label> #1742592976 <input type="number" id="redDuration" placeholder="60" class="w-full px-3 py-2 border rounded" required> #1742592976 </div> #1742592976 <div class="w-1/2"> #1742592976 <label class="block text-xs text-green-500">Green</label> #1742592976 <input type="number" id="greenDuration" placeholder="30" class="w-full px-3 py-2 border rounded" required> #1742592976 </div> #1742592976 </div> #1742592976 </div> #1742592976 <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 w-full">Add Traffic Light</button> #1742592976 </form> #1742592976 </div> #1742592976 </div> #1742592976 <div id="measureModal" class="modal"> #1742592976 <div class="modal-content"> #1742592976 <div class="flex justify-between items-center mb-4"> #1742592976 <h2 class="text-lg font-medium">Measure Traffic Light Timing</h2> #1742592976 <button class="close-modal text-gray-500 hover:text-gray-700"> #1742592976 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> #1742592976 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> #1742592976 </svg> #1742592976 </button> #1742592976 </div> #1742592976 <div class="mb-3"> #1742592977 <label class="block text-sm mb-1">Select Traffic Light</label> #1742592977 <select id="selectLight" class="w-full px-3 py-2 border rounded mb-2"> #1742592977 <option value="">-- Select a traffic light --</option> #1742592977 </select> #1742592977 </div> #1742592977 <div class="mb-3"> #1742592977 <label class="block text-sm mb-1">Current Status</label> #1742592977 <div id="lightStatus" class="h-10 flex items-center"> #1742592977 <span class="text-gray-500">Select a traffic light to see status</span> #1742592977 </div> #1742592977 </div> #1742592977 <div class="grid grid-cols-3 gap-2 mb-3"> #1742592977 <button id="startMeasure" class="bg-red-500 text-white px-2 py-2 rounded hover:bg-red-600">Start (Red)</button> #1742592977 <button id="stopMeasure" class="bg-green-500 text-white px-2 py-2 rounded hover:bg-green-600">Stop (Green)</button> #1742592977 <button id="saveMeasure" class="bg-blue-500 text-white px-2 py-2 rounded hover:bg-blue-600">Save</button> #1742592977 </div> #1742592977 <div id="measureResult" class="text-sm"></div> #1742592977 </div> #1742592977 </div> #1742592977 <div id="lightInfoModal" class="modal"> #1742592977 <div class="modal-content"> #1742592977 <div class="flex justify-between items-center mb-4"> #1742592977 <h2 class="text-lg font-medium" id="lightInfoTitle">Traffic Light Information</h2> #1742592977 <button class="close-modal text-gray-500 hover:text-gray-700"> #1742592977 <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> #1742592977 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> #1742592977 </svg> #1742592977 </button> #1742592977 </div> #1742592977 <div id="lightInfoContent" class="mb-4"></div> #1742592977 <div id="lightInfoStatus" class="mb-4 py-3 px-4 rounded-lg"></div> #1742592977 <div class="flex justify-end"> #1742592977 <button id="measureThisLight" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">Measure This Light</button> #1742592977 </div> #1742592977 </div> #1742592977 </div> #1742592977 <script> #1742592977 // DOM elements #1742592977 const addLightBtn = document.getElementById('addLightBtn'); #1742592977 const measureBtn = document.getElementById('measureBtn'); #1742592977 const locateBtn = document.getElementById('locateBtn'); #1742592977 const addLightModal = document.getElementById('addLightModal'); #1742592977 const measureModal = document.getElementById('measureModal'); #1742592977 const lightInfoModal = document.getElementById('lightInfoModal'); #1742592977 const closeModalButtons = document.querySelectorAll('.close-modal'); #1742592977 #1742592977 // Map and location variables #1742592977 let map; #1742592977 let userMarker; #1742592977 let userWatchId; #1742592977 let selectingLocation = false; #1742592977 let tempMarker; #1742592977 let markers = {}; #1742592977 let selectedLightId = null; #1742592977 #1742592977 // Initialize map #1742592977 initMap(); #1742592977 #1742592977 // Initialize modals #1742592977 closeModalButtons.forEach(button => { #1742592977 button.addEventListener('click', function() { #1742592977 addLightModal.style.display = 'none'; #1742592977 measureModal.style.display = 'none'; #1742592977 lightInfoModal.style.display = 'none'; #1742592977 selectingLocation = false; #1742592977 if (tempMarker) { #1742592977 map.removeLayer(tempMarker); #1742592977 tempMarker = null; #1742592977 } #1742592977 }); #1742592977 }); #1742592977 #1742592977 // Button click handlers #1742592977 addLightBtn.addEventListener('click', function() { #1742592977 addLightModal.style.display = 'block'; #1742592977 selectingLocation = true; #1742592977 #1742592977 // If user location is available, pre-fill the coordinates #1742592977 if (userMarker) { #1742592977 const position = userMarker.getLatLng(); #1742592977 document.getElementById('latitude').value = position.lat.toFixed(6); #1742592977 document.getElementById('longitude').value = position.lng.toFixed(6); #1742592977 #1742592977 // Add temporary marker #1742592977 if (tempMarker) map.removeLayer(tempMarker); #1742592977 tempMarker = L.marker([position.lat, position.lng], { #1742592977 draggable: true #1742592977 }).addTo(map); #1742592977 #1742592977 tempMarker.on('dragend', function() { #1742592977 const newPos = tempMarker.getLatLng(); #1742592977 document.getElementById('latitude').value = newPos.lat.toFixed(6); #1742592977 document.getElementById('longitude').value = newPos.lng.toFixed(6); #1742592977 }); #1742592977 } #1742592977 }); #1742592977 #1742592977 measureBtn.addEventListener('click', function() { #1742592977 measureModal.style.display = 'block'; #1742592977 }); #1742592977 #1742592977 locateBtn.addEventListener('click', function() { #1742592977 startGeolocation(); #1742592977 }); #1742592977 #1742592977 // Map initialization #1742592977 function initMap() { map = L.map('map').setView([51.505, -0.09], 13); #1742592977 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { #1742592978 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>' #1742592978 }).addTo(map); #1742592978 #1742592978 // Map click handler #1742592978 map.on('click', function(e) { #1742592978 if (selectingLocation) { #1742592978 document.getElementById('latitude').value = e.latlng.lat.toFixed(6); #1742592978 document.getElementById('longitude').value = e.latlng.lng.toFixed(6); #1742592978 #1742592978 // Update or create temporary marker #1742592978 if (tempMarker) map.removeLayer(tempMarker); #1742592978 tempMarker = L.marker([e.latlng.lat, e.latlng.lng], { #1742592978 draggable: true #1742592978 }).addTo(map); #1742592978 #1742592978 tempMarker.on('dragend', function() { #1742592978 const newPos = tempMarker.getLatLng(); #1742592978 document.getElementById('latitude').value = newPos.lat.toFixed(6); #1742592978 document.getElementById('longitude').value = newPos.lng.toFixed(6); #1742592978 }); #1742592978 } #1742592978 }); #1742592978 #1742592978 // Start geolocation immediately #1742592978 startGeolocation(); #1742592978 #1742592978 // Load traffic lights #1742592978 loadTrafficLights(); #1742592978 } #1742592978 #1742592978 // Geolocation functions #1742592978 function startGeolocation() { if (navigator.geolocation) { #1742592978 if (userWatchId) navigator.geolocation.clearWatch(userWatchId); #1742592978 #1742592978 userWatchId = navigator.geolocation.watchPosition( #1742592978 updateUserLocation, #1742592978 handleGeolocationError, #1742592978 { enableHighAccuracy: true, maximumAge: 10000, timeout: 5000 }; ); #1742592978 #1742592978 // Also get initial position #1742592978 navigator.geolocation.getCurrentPosition( #1742592978 updateUserLocation, #1742592978 handleGeolocationError, #1742592978 { enableHighAccuracy: true }; ); #1742592978 } #1742592978 } #1742592978 #1742592978 function updateUserLocation(position) { #1742592978 const lat = position.coords.latitude; #1742592978 const lng = position.coords.longitude; #1742592978 #1742592978 // Create or update user marker #1742592978 // Create a custom icon for user location #1742592978 const locationIcon = L.divIcon({ #1742592978 className: 'location-dot', #1742592978 iconSize: [16, 16] #1742592978 }); #1742592978 #1742592978 userMarker = L.marker([lat, lng], { #1742592978 icon: locationIcon, #1742592978 zIndexOffset: 1000 #1742592978 }).addTo(map); #1742592978 #1742592978 // Center map on first location update #1742592978 map.setView([lat, lng], 16); #1742592978 } else { #1742592978 userMarker.setLatLng([lat, lng]); #1742592978 } #1742592978 } #1742592978 #1742592978 function handleGeolocationError(error) { #1742592978 console.error('Geolocation error:', error.message); #1742592978 // Silent error, don't alert user } // Traffic light functions function loadTrafficLights() { fetch('db.php?action=getTrafficLights') .then(response => response.json()) .then(data => { data.forEach(light => { addLightToMap(light); addLightToSelect(light); }); }) .catch(error => console.error('Error loading traffic lights:', error)); } function addLightToMap(light) { const marker = L.marker([light.latitude, light.longitude]) .addTo(map); marker.on('click', function() { showLightInfo(light); }); markers[light.id] = { marker: marker, data: light }; updateLightStatus(light); } function addLightToSelect(light) { const option = document.createElement('option'); option.value = light.id; option.textContent = light.name; document.getElementById('selectLight').appendChild(option); } function updateLightStatus(light) { const totalCycle = parseInt(light.red_duration) + parseInt(light.green_duration); const currentTime = Math.floor(Date.now() / 1000); const timeInCycle = currentTime % totalCycle; let status, timeLeft, statusClass; if (timeInCycle < light.red_duration) { status = 'RED'; timeLeft = light.red_duration - timeInCycle; statusClass = 'bg-red-100 text-red-800 border-red-200'; } else { status = 'GREEN'; timeLeft = totalCycle - timeInCycle; statusClass = 'bg-green-100 text-green-800 border-green-200'; } // Update marker icon based on status if (markers[light.id]) { const markerIcon = L.divIcon({ className: `marker-icon ${status === 'RED' ? 'red-light' : 'green-light'}`, html: `<div style="width: 24px; height: 24px; background-color: ${status === 'RED' ? 'red' : 'green'}; border-radius: 50%; border: 2px solid white;"></div>`, iconSize: [24, 24], iconAnchor: [12, 12] }); markers[light.id].marker.setIcon(markerIcon); markers[light.id].data = light; } // Update info modal if open and showing this light if (lightInfoModal.style.display === 'block' && selectedLightId == light.id) { document.getElementById('lightInfoStatus').className = statusClass; document.getElementById('lightInfoStatus').innerHTML = ` <div class="font-medium">Current Status: ${status}</div> <div>Changes in: ${timeLeft} seconds</div> `; } // Update measure modal if this light is selected const selectedLight = document.getElementById('selectLight').value; if (selectedLight == light.id) { const statusElement = document.getElementById('lightStatus'); if (status === 'RED') { statusElement.innerHTML = `<span class="px-3 py-1 bg-red-500 text-white rounded">RED (${timeLeft}s)</span>`; } else { statusElement.innerHTML = `<span class="px-3 py-1 bg-green-500 text-white rounded">GREEN (${timeLeft}s)</span>`; } } } function showLightInfo(light) { selectedLightId = light.id; document.getElementById('lightInfoTitle').textContent = light.name; document.getElementById('lightInfoContent').innerHTML = ` <div class="grid grid-cols-2 gap-2"> <div class="text-sm text-gray-600">Direction:</div> <div>${light.direction}</div> <div class="text-sm text-gray-600">Red Duration:</div> <div>${light.red_duration} seconds</div> <div class="text-sm text-gray-600">Green Duration:</div> <div>${light.green_duration} seconds</div> <div class="text-sm text-gray-600">Location:</div> <div>${light.latitude}, ${light.longitude}</div> </div> `; // Calculate and show current status const totalCycle = parseInt(light.red_duration) + parseInt(light.green_duration); const currentTime = Math.floor(Date.now() / 1000); const timeInCycle = currentTime % totalCycle; let status, timeLeft, statusClass; if (timeInCycle < light.red_duration) { status = 'RED'; timeLeft = light.red_duration - timeInCycle; statusClass = 'bg-red-100 text-red-800 border-red-200'; } else { status = 'GREEN'; timeLeft = totalCycle - timeInCycle; statusClass = 'bg-green-100 text-green-800 border-green-200'; } document.getElementById('lightInfoStatus').className = statusClass; document.getElementById('lightInfoStatus').innerHTML = ` <div class="font-medium">Current Status: ${status}</div> <div>Changes in: ${timeLeft} seconds</div> `; // Show the modal lightInfoModal.style.display = 'block'; // Set up measure button document.getElementById('measureThisLight').onclick = function() { lightInfoModal.style.display = 'none'; measureModal.style.display = 'block'; document.getElementById('selectLight').value = light.id; // Update status display const statusElement = document.getElementById('lightStatus'); if (status === 'RED') { statusElement.innerHTML = `<span class="px-3 py-1 bg-red-500 text-white rounded">RED (${timeLeft}s)</span>`; } else { statusElement.innerHTML = `<span class="px-3 py-1 bg-green-500 text-white rounded">GREEN (${timeLeft}s)</span>`; } }; } // Form handlers document.getElementById('addTrafficLightForm').addEventListener('submit', function(e) { e.preventDefault(); const lightData = { name: document.getElementById('lightName').value, latitude: document.getElementById('latitude').value, longitude: document.getElementById('longitude').value, direction: document.getElementById('direction').value, red_duration: document.getElementById('redDuration').value, green_duration: document.getElementById('greenDuration').value }; fetch('db.php?action=addTrafficLight', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(lightData) }) .then(response => response.json()) .then(data => { if (data.success) { addLightToMap(data.light); addLightToSelect(data.light); document.getElementById('addTrafficLightForm').reset(); addLightModal.style.display = 'none'; if (tempMarker) { map.removeLayer(tempMarker); tempMarker = null; } selectingLocation = false; } }) .catch(error => console.error('Error adding traffic light:', error)); }); // Measure timing handlers let measureStartTime = 0; document.getElementById('startMeasure').addEventListener('click', function() { measureStartTime = Date.now(); document.getElementById('measureResult').textContent = 'Measuring... Press Green button when light changes'; }); document.getElementById('stopMeasure').addEventListener('click', function() { if (measureStartTime === 0) return; const duration = Math.floor((Date.now() - measureStartTime) / 1000); document.getElementById('measureResult').textContent = `Measured: ${duration} seconds. Click Save to update.`; }); document.getElementById('saveMeasure').addEventListener('click', function() { const lightId = document.getElementById('selectLight').value; if (!lightId) return; const duration = Math.floor((Date.now() - measureStartTime) / 1000); if (duration <= 0) return; fetch('db.php?action=updateTiming', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ id: lightId, red_duration: duration }) }) .then(response => response.json()) .then(data => { if (data.success) { document.getElementById('measureResult').textContent = 'Timing updated successfully!'; measureStartTime = 0; } }) .catch(error => console.error('Error updating timing:', error)); }); document.getElementById('selectLight').addEventListener('change', function() { const lightId = this.value; if (!lightId) return; fetch(`db.php?action=getTrafficLight&id=${lightId}`) .then(response => response.json()) .then(light => { updateLightStatus(light); }) .catch(error => console.error('Error getting traffic light:', error)); }); // Real-time updates setInterval(() => { fetch('db.php?action=getTrafficLights') .then(response => response.json()) .then(data => { data.forEach(light => { updateLightStatus(light); }); }) .catch(error => console.error('Error updating traffic lights:', error)); }, 1000); </script> </body> </html> clear #1742593889 pm2 status #1743004206 node footer-maj.js #1743004297 clear #1743004299 node footer-maj.js #1743935602 composer require trafficlight/api-sdk #1743935625 clear #1744650965 pm2 list #1744650977 pm2 start #1744650984 pm2 start server.js #1744650989 pm2 list #1744652468 pm2 restart #1744652473 pm2 list #1744652477 pm2 restart server.js #1744913381 npm install mapbox-gl --save #1744913429 clear #1744915440 pm2 status #1745150241 pm2 statuts #1745150259 pm2 start server.js #1745150273 pm2 examples #1745150283 pm2 ls #1745184787 pm2 restart #1745184792 pm2 restart 0 #1745245740 pm2 ls #1745245759 pm2 restart 0 #1745246509 pm2 ls #1745426049 pm2 LIST #1745426053 pm2 list #1745426079 pm2 restart #1745426083 pm2 restart 0 #1745426101 pm2 restart #1745426104 pm2 list #1745919209 pm2 #1745919219 pm2 -h #1745919234 pm2 ls #1745919240 clear #1745919243 pm2 status 0 #1745919248 clear #1746622184 cd imators.com #1746622190 node footer-conv.js #1746622324 clear #1746622331 cd imators.com #1746622338 node footer-conv.js #1746622417 node footer-conv.js / #1746622762 clear #1746622765 cd imators.com #1746622770 node footer-maj.js #1746622896 clear #1747046379 cd idsma.imators.com #1747046382 clear #1747046388 composer require stripe/stripe-php #1747937801 cd support-chatbox-intgr/ #1747937803 composer require cboden/ratchet #1747937824 pm2 start server.php --interpreter php #1747938132 composer require cboden/ratchet #1747938149 pm2 start ecosystem.config.js #1747938463 stop 1 #1747938468 pm2 stop 1 #1747938473 pm2 stop 0 #1747938477 pm2 start ecosystem.config.js #1747938670 pm2 stop 1 #1747938673 pm2 start server.php --interpreter php --name chatbox-websocket -- websocket #1747938693 pm2 #1747938698 pm2 -h #1747938703 pm2 kill 1 #1747938709 clear #1747938713 pm2 start server.php --interpreter php --name chatbox-websocket -- websocket #1747938766 pm2 stop all #1747938769 pm2 delete all #1747938771 clear #1747938788 pm2 start ecosystem.config.js #1747938791 pm2 save #1747938796 pm2 startup #1747938828 clear #1747938829 pm2 list #1747938857 pm2 logs chatbox-websocket #1747939074 pm2 restart #1747939080 pm2 list #1747939083 pm2 restart 0 #1747939185 clear #1747939187 pm2 list #1747939367 pm2 stop 0 #1747939371 pm2 delete all #1747939373 clear #1747939421 cd support-chatbox-intgr/ #1747939429 pm2 start ecosystem.config.js #1747939477 npm install -g nodemon #1747939488 nodemon chatbox.js #1747939610 pm2 list #1747939730 pm2 show 0 #1747939846 pm2 stop all #1747939851 pm2 delete all #1747939857 pm2 start ecosystem.config.js #1747939864 cd support-chatbox-intgr/ #1747939866 pm2 start ecosystem.config.js #1747939949 npx chokidar ./chatbox.js -c "pm2 restart chatbox-websocket" #1747939973 npm install -g chokidar-cli #1747939982 chokidar ./chatbox.js -c "pm2 restart chatbox-websocket" #1747940329 pm2 restart chatbox-websocket #1748042782 composer require firebase/php-jwt #1748090714 cd ../imators.systems #1748090720 mkdir rhodes #1748090725 mkdir waterloo #1748090727 clear #1748090743 cd ../vertchasseur.com #1748090759 cp -r * ../imators.systems/rhodes #1748090764 cp -r * ../imators.systems/waterloo #1748090766 clear #1748102171 cp -r * ../monwaterloo.be #1748102183 cp -r * ../../monwaterloo.be #1748513956 npx heroui-cli@latest init #1748514088 npm install -g npm@11.4.1 #1748514098 npx heroui-cli@latest init #1748514223 clear #1748514223 nvm list-remote #1748514234 nvm install 20 #1748514242 clear #1748514248 npx heroui-cli@latest init #1748514263 nvm use 20 #1748514267 clear #1748514269 npx heroui-cli@latest init #1748514279 clear #1748514285 nvm install node #1748514295 nvm use node #1748514297 clear #1748514301 npx heroui-cli@latest init #1748514325 npx --yes heroui-cli@1.2.3 init --force #1748514335 clear #1748514344 composer create-project laravel/laravel ise-engine #1748514367 cd ise-engine #1748514369 clear #1748514405 npm install @heroui/core @heroui/theme #1748514443 npm install @heroui/react framer-motion #1748514498 npm install -D tailwindcss postcss autoprefixer #1748514506 clear #1748514510 npx tailwindcss init -p #1748514582 npx tailwindcss init #1748514587 cd ise-engine/ #1748514589 npx tailwindcss init #1748514593 clear #1748514656 cd ise-engine && composer install && npm install && cp .env.example .env && php artisan key:generate && npm run dev & #1748514668 clear #1748514670 cd / #1748514670 cd ise-engine && composer install && npm install && cp .env.example .env && php artisan key:generate && npm run dev & #1748514675 ls #1748514677 clear #1748514680 cd home #1748514682 s #1748514683 ls #1748514689 cd gqdcvggs #1748514690 clear #1748514692 ls #1748514696 cd ise.imators.systems/ #1748514697 clear #1748514704 cd ise-engine && composer install && npm install && cp .env.example .env && php artisan key:generate && npm run dev & #1748514892 cd ise-engine #1748514894 clear #1748514901 npm run build #1748514905 pm2 start ecosystem.config.js #1748514954 clear #1748514954 pm2 start "php artisan serve --host=0.0.0.0 --port=8000" --name ise-engine #1748514965 clear #1748514972 pm2 statuts #1748514982 pm2 list #1748514993 pm2 enable watch 1 #1748515001 pm2 save #1748515006 pm2 startup #1748515009 clear #1748515140 pm2 start ecosystem.config.js #1748515143 clear #1748515152 mv ise-engine/* . #1748515156 clear #1748515158 cd ../ #1748515159 mv ise-engine/* . #1748515162 clear #1748515172 mv ise-engine/.* . 2>/dev/null #1748515177 rmdir ise-engine #1748515180 clear #1748515222 cd ise-engine #1748515223 clear #1748515236 pm2 start "php artisan serve --host=0.0.0.0 --port=8000" --name ise-engine --watch #1748515251 pm2 deleyte 1 #1748515255 pm2 delete 1 #1748515257 clear #1748515262 pm2 reload ise-engine #1748515321 clear #1748523800 php artisan make:migration create_documents_table #1748523805 php artisan make:migration create_document_shares_table #1748523807 clear #1748524056 php artisan make:migration create_documents_table #1748524583 clear #1748524585 php artisan migrate #1748524817 clear #1748524818 php artisan migrate #1748524863 clear #1748524865 php artisan migrate #1748524963 clear #1748524965 php artisan migrate #1748524981 c;ea #1748524983 clear #1748524987 php artisan migrate #1748525113 clear #1748525333 mysql -h web05.ouiheberg.com:2083 -u gqdcvggs -p gqdcvggs_ise #1748525392 php artisan migrate #1751063096 sudo apt update #1751063129 cd ~ #1751063136 wget https://downloads.plex.tv/plex-media-server-new/1.32.8.7639-fb6452ebf/debian/plexmediaserver_1.32.8.7639-fb6452ebf_amd64.deb #1751378111 cd imators.systems #1751378117 cd peerkinton-bot #1751378122 npm install #1751378534 clear #1751378539 cd imators.systems/ #1751378543 cd peerkinton-bot/ #1751378603 npm install #1751379049 pm2 start ecosystem.config.js #1751379057 pm2 save #1751379061 pm2 startup #1751380338 cd imators.systems #1751380347 cd peerkinton-bot #1751380352 pm2 reload 0 #1751405841 cd imators.systems/peerkinton-bot #1751405880 pm2 list #1751405903 pm2 reload #1751405909 pm2 reload 0 #1751406986 pm2 stop 0 #1751407005 pm2 delete 0 #1751407008 clear #1751987758 composer require phpmailer/phpmailer #1755254748 clear #1755254749 ls #1755254751 clear #1755254755 cd vertchasseur.com #1755254757 clear #1755254768 cat > composer.json << 'EOF' { "require": { "stripe/stripe-php": "^10.0" } } EOF #1755254770 clear #1755254776 composer install #1755254794 clear #1755254796 composer install #1755254799 clear #1755254804 composer install #1755254817 composer update #1755254838 clear #1755254838 curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - #1755254843 clear #1755254843 curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - #1755254845 clear #1755254946 apt-get install -y nodejs #1755254954 clear #1755254954 npm install -g pm2 #1755255016 cd vertchasseur.com #1755255021 npm install -g pm2 #1755255285 npm install -g npm@11.5.2 #1755258788 clear #1755258788 pm2 start ecosystem.config.js #1755258833 cd vertchasseur.com #1755258835 clear #1755258850 pm2 start ecosystem.config.js #1755274519 cd vertchasseur.com #1755274521 clear #1755274539 pm2 start ecosystem.config.js #1755274555 pm2 statuts #1755274569 pm2 status #1756393340 clear #1756393341 ls #1756393346 cd vertchasseur.com #1756393347 clear #1756393362 composer require pkpass/pkpass #1756393381 clear #1756395553 cd vertchasseur.com #1756395554 clear #1756395584 composer remove pkpass/pkpass #1756395587 clear #1756395592 composer require pkpass/pkpass #1756395648 composer remove pkpass/pkpass #1756395653 ls #1756395655 clear #1756395657 wget https://github.com/tschoffelen/php-pkpass/archive/refs/heads/master.zip #1756395666 unzip master.zip #1756395672 mv php-pkpass-master pkpass #1756395679 mkdir -p vendor/pkpass #1756395685 mv pkpass vendor/pkpass/pkpass #1756395710 ls #1756395712 clear #1756395713 cd vendor #1756395715 ls #1756395717 cd pkpass #1756395718 ls #1756395723 cd pkpass #1756395724 ls #1756395726 clear #1756397398 cd ../ #1756397403 cd ./ #1756397409 cd / #1756397418 cd vertchasseur.com #1756397418 clear #1756397420 ls #1756397424 cd home #1756397424 ls #1756397428 cd gqdcvggs #1756397429 clear #1756397430 ls #1756397434 cd vertchasseur.com #1756397444 clear #1756397445 ls #1756397446 clear #1756397453 cp logo_new.png icon.png #1756397464 ls #1756593402 clear #1756593404 ls #1756593419 cd vertchasseur.com #1756593420 clear #1756593436 composer require stripe/stripe #1755274580 pm2 logs #1757952912 clear #1757952926 cd vertchaseur.com #1757952927 ls #1757952932 cd vertchasseur.com #1757952934 clear #1757952945 npm install -g cordova #1757953770 npm install -g npm@11.6.0 #1758569546 cd vertchasseur.com #1758569547 clear #1758569548 npm install @capacitor/core @capacitor/cli #1758569614 clear #1758569615 ls #1758569616 clear #1758569618 ls #1758569620 clear #1758649976 cd vertchasseur.com #1758649980 composer require stripe/stripe-php #1758650136 clear #1758650136 ls #1758650142 backup #1758650146 clear #1758887259 cd izhak.me/sixteen #1758887261 clear #1758887262 composer require stripe/stripe-php #1759849425 cd imators.systems/vertchasseur #1759849427 clear #1759849461 composer require stripe/stripe-php #1759988031 cd vertchasseur #1759988036 cd vertchasseur.com #1759988037 clear #1759988038 composer require firebase/php-jwt #1759988871 clear #1759988875 cd imators.systems/ #1759988876 clear #1759988880 cd vertchassseur #1759988881 clear #1759988884 cd vertchasseur #1759988886 clear #1759988887 composer require firebase/php-jwt #1760467581 cd imators.systems/client/guest #1760467581 npm install #1760467690 npm install -g npm@11.6.2 #1760467706 npm install -g pm2 #1760467787 clear #1760467788 pm2 start meeting_server.js --name imators-meeting #1760467796 pm2 save #1760467801 pm2 startup #1760720289 cd imators.systems/ #1760720291 clear #1760720291 netstat -tuln | grep 8080 #1760720329 ss -tuln | grep 8080 #1760720407 clear #1760720407 ps aux | grep apache #1760720420 find ~ -name "*.conf" -o -name ".htaccess" | grep -E 'imators|apache|httpd' #1760720458 clear #1760720458 pm2 delete imators-meeting #1760720566 pm2 start meeting_server.js --name imators-meeting -- --port 2083 #1760720575 clear #1760720580 cd client/guest #1760720581 clear #1760720584 pm2 delete imators-meeting #1760720590 clear #1760720591 pm2 start meeting_server.js --name imators-meeting -- --port 2083 #1760720674 pm2 delete imators-meeting #1760720723 clear #1760720723 pm2 start meeting_server.js --name imators-meeting #1760720729 pm2 logs imators-meeting #1760720793 clear #1760720794 pm2 delete all #1760720802 pm2 kill #1760720804 clear #1760720808 lsof -i -P -n | grep LISTEN #1760720911 pm2 delete all #1760720924 clear #1760720924 pm2 kill #1760720928 clear #1760720933 pm2 start meeting_server.js --name imators-meeting #1760720942 pm2 status #1760720945 clear #1762859937 tail -f /var/log/apache2/error.log #1762859951 tail -f /var/log/syslog
| ver. 1.6 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка