چگونه تونل بسازیم و سرور با ادرس ثابت راه اندازی کنیم
Archived teaching material
Archived academic material · Original source · Resource library
📋 فهرست مطالب
PM2 چیست؟
PM2 (Process Manager 2) یک مدیریتکننده process برای برنامههای Node.js است که:
🎯 مزایای PM2:
- ریستارت خودکار اگر برنامه crash کند
- مانیتورینگ وضعیت processes
- لاگگیری متمرکز
- شروع خودکار پس از ریبوت سیستم
- مدیریت حافظه و CPU
🔧 دستورات مهم PM2:
# شروع برنامه
pm2 start tunnel.js --name "tunnel"
# مشاهده وضعیت
pm2 status
# مشاهده لاگها
pm2 logs tunnel
# توقف برنامه
pm2 stop tunnel
# ریستارت
pm2 restart tunnel
# حذف از لیست
pm2 delete tunnel
# ذخیره configuration
pm2 save
⚙️ چرا از PM2 استفاده کردیم؟
- وقتی LocalTunnel قطع میشود، PM2 به طور خودکار آن را ریستارت میکند
- مدیریت بهتر لاگها و خطاها
- امکان مانیتورینگ از راه دور
توضیحات tunnel.js
📜 کد کامل:
// tunnel.js
const { exec } = require("child_process");
console.log("🚀 Starting localtunnel...");
const child = exec("npx localtunnel --port 5000 --subdomain hadisadoghiyazdi");
child.stdout.on("data", (data) => {
const output = data.toString().trim();
console.log(`[LT] ${output}`);
if (output.includes("your url is:")) {
console.log("✅ Tunnel is ready! No password required.");
}
});
child.stderr.on("data", (data) => {
console.error(`[LT-ERROR] ${data.toString().trim()}`);
});
child.on("close", (code) => {
console.log(`❌ Tunnel exited with code ${code}`);
process.exit(code || 1);
});
🔍 توضیح خط به خط:
-
وارد کردن ماژولها:
const { exec } = require("child_process");- برای اجرای دستورات سیستم عامل
-
اجرای LocalTunnel:
const child = exec("npx localtunnel --port 5000 --subdomain hadisadoghiyazdi");- ایجاد تونل روی پورت 5000
- استفاده از subdomain ثابت
-
مدیریت خروجی:
child.stdout.on("data", (data) => { console.log(`[LT] ${output}`); });- نمایش خروجی استاندارد
-
مدیریت خطاها:
child.stderr.on("data", (data) => { console.error(`[LT-ERROR] ${data.toString().trim()}`); });- نمایش خطاهای سیستم
-
مدیریت بسته شدن:
child.on("close", (code) => { console.log(`❌ Tunnel exited with code ${code}`); process.exit(code || 1); });- وقتی تونل بسته میشود، PM2 آن را ریستارت میکند
روش اجرا
🚀 راهاندازی سریع:
- فایل
main.batرا اجرا کنید - صبر کنید تا همه سرویسها راهاندازی شوند
- پسورد نمایش داده شده را کپی کنید
- به آدرس
https://hadisadoghiyazdi.loca.ltبروید - پسورد را وارد کنید
📝 فایل main.bat:
@echo off
cd /d "H:\HadiSadoghiYazdi\hadisadoghiyazdi1971.github.io\hadisadoghiyazdi1971.github.io\smart-repair-api"
title Smart Repair System
echo ========================================
echo 🚀 Starting System
echo ========================================
echo Step 1: Starting Flask...
start "Flask Server" python app.py
timeout /t 3 >nul
echo Step 2: Stopping old tunnel (if exists)...
call pm2 delete tunnel >nul 2>&1
timeout /t 2 >nul
echo Step 3: Starting new tunnel with pm2...
call pm2 start tunnel.js --name "tunnel" --restart-delay 3000
timeout /t 8 >nul
echo Step 4: Getting password...
powershell -Command "(Invoke-WebRequest -Uri 'https://loca.lt/mytunnelpassword' -UseBasicParsing).Content.Trim()" > password.txt
set /p TUNNEL_PASSWORD=<password.txt
echo.
echo ✅ SYSTEM READY!
echo 📍 Flask: http://localhost:5000
echo 🌐 Tunnel: https://hadisadoghiyazdi.loca.lt
echo 🔑 Password: %TUNNEL_PASSWORD%
echo.
echo To view tunnel logs: pm2 logs tunnel
echo To stop tunnel: pm2 stop tunnel
echo.
pause
عیبیابی
🔧 مشکلات رایج و راهحلها:
-
تونل قطع میشود:
- PM2 به طور خودکار ریستارت میکند
- دستی:
pm2 restart tunnel
-
پسورد کار نمیکند:
- جدید بگیرید:
https://loca.lt/mytunnelpassword - در فایل
password.txtذخیره میشود
- جدید بگیرید:
-
PM2 کار نمیکند:
- از
node tunnel.jsمستقیم استفاده کنید - یا از
npx pm2استفاده کنید
- از
-
پورت 5000 ت است:
- برنامههای دیگر را ببندید
- یا پورت را در
app.pyتغییر دهید
📞 دستورات مفید برای دیباگ:
# بررسی processes
pm2 status
# مشاهده لاگهای زنده
pm2 logs tunnel
# بررسی پورت
netstat -ano | findstr :5000
# بررسی سرویس Flask
curl http://localhost:5000/health
🎯 نکات نهایی
- سیستم با دیتابیس فایلمحل کار میکند
- اتصال اینترنتی با LocalTunnel برقرار میشود
- مدیریت خطا با PM2 انجام میشود
- پسورد هر 7 روز یکبار تغییر میکند