🟢 راهاندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) بخش اول
اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، معمولاً اولین چالش نصب پکیجها و بعد از اون تنظیم مسیرهای Socket.IO هست. توی این آموزش قدمبهقدم میبینیم چطور میشه یه اپ Express به همراه Socket.IO رو روی هاست اشتراکی راهاندازی کرد.
۱. ساخت اپلیکیشن Node.js
اول از داخل Application Manager یه اپ Node.js جدید میسازیم:
آدرس اپ: مثلاً
Startup File:
نسخه Node.js: متناسب با نیاز پروژه
بعد از ساخت اپ، پوشه پروژه ایجاد میشه و میتونیم فایلهای مورد نیازمون رو داخلش قرار بدیم.
۲. نصب Dependency ها
بعضی وقتها ممکنه نصب Dependency ها از داخل cPanel امکانپذیر نباشه؛ مثلاً زمانی که دسترسی به رجیستری پیشفرض npm وجود نداره یا اینترنت بینالملل با اختلال مواجه شده.
در این شرایط میتونیم داخل پوشه پروژه یک فایل
مثلاً برای استفاده از رجیستری چابکان:
بعد از ذخیره فایل، دوباره از داخل cPanel سعی میکنیم Dependency ها رو نصب کنیم.
اگر باز هم cPanel از رجیستری جدید استفاده نکرد، باید نصب رو به صورت دستی انجام بدیم.
اگر به Terminal یا SSH دسترسی داشته باشیم که کار خیلی ساده است:
اما روی بعضی هاستهای اشتراکی دسترسی SSH وجود نداره.
راهحلی که من استفاده کردم این بود که داخل
بعد از داخل cPanel و بخش Run JS Script اسکریپت
نمونه خروجی موفق:
وقتی خروجی مشابه این رو ببینیم یعنی Dependency ها با موفقیت نصب شدن و میتونیم سراغ مرحله بعدی یعنی راهاندازی Socket.IO بریم.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، معمولاً اولین چالش نصب پکیجها و بعد از اون تنظیم مسیرهای Socket.IO هست. توی این آموزش قدمبهقدم میبینیم چطور میشه یه اپ Express به همراه Socket.IO رو روی هاست اشتراکی راهاندازی کرد.
۱. ساخت اپلیکیشن Node.js
اول از داخل Application Manager یه اپ Node.js جدید میسازیم:
آدرس اپ: مثلاً
testingStartup File:
app.jsنسخه Node.js: متناسب با نیاز پروژه
بعد از ساخت اپ، پوشه پروژه ایجاد میشه و میتونیم فایلهای مورد نیازمون رو داخلش قرار بدیم.
۲. نصب Dependency ها
بعضی وقتها ممکنه نصب Dependency ها از داخل cPanel امکانپذیر نباشه؛ مثلاً زمانی که دسترسی به رجیستری پیشفرض npm وجود نداره یا اینترنت بینالملل با اختلال مواجه شده.
در این شرایط میتونیم داخل پوشه پروژه یک فایل
.npmrc ایجاد کنیم و رجیستری مورد نظرمون رو به npm معرفی کنیم.مثلاً برای استفاده از رجیستری چابکان:
registry=https://mirror2.chabokan.net/npm/
بعد از ذخیره فایل، دوباره از داخل cPanel سعی میکنیم Dependency ها رو نصب کنیم.
اگر باز هم cPanel از رجیستری جدید استفاده نکرد، باید نصب رو به صورت دستی انجام بدیم.
اگر به Terminal یا SSH دسترسی داشته باشیم که کار خیلی ساده است:
npm install express socket.io
اما روی بعضی هاستهای اشتراکی دسترسی SSH وجود نداره.
راهحلی که من استفاده کردم این بود که داخل
package.json یک اسکریپت برای نصب Dependency ها تعریف کردم:{
"scripts": {
"npm-install": "npm install"
}
}بعد از داخل cPanel و بخش Run JS Script اسکریپت
npm-install رو اجرا کردم و npm تمام پکیجها رو نصب کرد.نمونه خروجی موفق:
returncode: 0
stdout:
> node-test@1.0.0 npm-install
> npm install
added 22 packages, and audited 91 packages in 5s
16 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
stderr:
وقتی خروجی مشابه این رو ببینیم یعنی Dependency ها با موفقیت نصب شدن و میتونیم سراغ مرحله بعدی یعنی راهاندازی Socket.IO بریم.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
🟢 راهاندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) - بخش دوم
توی پست قبلی اپلیکیشن Node.js رو ساختیم و Dependency ها رو نصب کردیم. حالا اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، باید بدونیم که معمولاً Node.js روی cPanel پشت Passenger اجرا میشه و با VPS تفاوتهایی داره.
۱. ساخت فایل app.js
اول یه فایل
اینجا Express و Socket.IO رو مقداردهی اولیه کردیم.
۲. تنظیم Socket.IO
حالا باید Socket.IO رو به سرور HTTP متصل کنیم:
نکته مهم اینه که مقدار
فرض کنید اپلیکیشن رو روی آدرس زیر ساخته باشیم:
در این حالت مسیر Socket.IO باید چیزی شبیه این باشه:
۳. ثبت Route تست
برای اینکه مطمئن بشیم Express درست کار میکنه، یه Route تست تعریف میکنیم:
بعد از Restart کردن اپلیکیشن، با باز کردن این آدرس باید پیام بالا نمایش داده بشه:
اگر این صفحه باز شد یعنی Node.js و Express بدون مشکل در حال اجرا هستند.
۴. مدیریت اتصال کاربران
حالا میتونیم اولین Event مربوط به Socket.IO رو تعریف کنیم:
هر بار که یک کاربر متصل بشه، این Event اجرا میشه و یک پیام تست برای کلاینت ارسال میکنه.
۵. نکته مهم Passenger
روی اکثر هاستهای اشتراکی نباید از:
استفاده کنیم.
Passenger خودش سرور رو مدیریت میکنه و معمولاً فقط کافیه در انتهای فایل بنویسیم:
بعد از ذخیره فایل، اپلیکیشن رو Restart کنید تا تغییرات اعمال بشن.
در پست بعدی اتصال کلاینت، تست WebSocket و رفع خطای معروف 404 مربوط به Socket.IO رو بررسی میکنیم.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #Backend #JavaScript #آموزش_برنامه_نویسی #توسعه_وب
توی پست قبلی اپلیکیشن Node.js رو ساختیم و Dependency ها رو نصب کردیم. حالا اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، باید بدونیم که معمولاً Node.js روی cPanel پشت Passenger اجرا میشه و با VPS تفاوتهایی داره.
۱. ساخت فایل app.js
اول یه فایل
app.js داخل پوشه پروژه میسازیم:const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);اینجا Express و Socket.IO رو مقداردهی اولیه کردیم.
۲. تنظیم Socket.IO
حالا باید Socket.IO رو به سرور HTTP متصل کنیم:
const io = new Server(server, {
cors: {
origin: '*',
},
path: '/testing/socket.io',
});نکته مهم اینه که مقدار
path باید با آدرس اپلیکیشنی که داخل cPanel ساختیم هماهنگ باشه.فرض کنید اپلیکیشن رو روی آدرس زیر ساخته باشیم:
https://yourdomain.com/testing
در این حالت مسیر Socket.IO باید چیزی شبیه این باشه:
/testing/socket.io
۳. ثبت Route تست
برای اینکه مطمئن بشیم Express درست کار میکنه، یه Route تست تعریف میکنیم:
app.get('/testing/node-test', (req, res) => {
res.send('Node.js application is working');
});بعد از Restart کردن اپلیکیشن، با باز کردن این آدرس باید پیام بالا نمایش داده بشه:
https://yourdomain.com/testing/node-test
اگر این صفحه باز شد یعنی Node.js و Express بدون مشکل در حال اجرا هستند.
۴. مدیریت اتصال کاربران
حالا میتونیم اولین Event مربوط به Socket.IO رو تعریف کنیم:
io.on('connection', socket => {
console.log('New Client Connected');
socket.emit(
'server-message',
'Socket.IO connection successful'
);
});هر بار که یک کاربر متصل بشه، این Event اجرا میشه و یک پیام تست برای کلاینت ارسال میکنه.
۵. نکته مهم Passenger
روی اکثر هاستهای اشتراکی نباید از:
server.listen(...)
استفاده کنیم.
Passenger خودش سرور رو مدیریت میکنه و معمولاً فقط کافیه در انتهای فایل بنویسیم:
module.exports = server;
بعد از ذخیره فایل، اپلیکیشن رو Restart کنید تا تغییرات اعمال بشن.
در پست بعدی اتصال کلاینت، تست WebSocket و رفع خطای معروف 404 مربوط به Socket.IO رو بررسی میکنیم.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #Backend #JavaScript #آموزش_برنامه_نویسی #توسعه_وب
🟢 راهاندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) - بخش سوم
تا اینجا سرور Node.js و Socket.IO رو راهاندازی کردیم. حالا اگه بخوایم مطمئن بشیم WebSocket واقعاً کار میکنه، باید یه کلاینت تست بسازیم.
۱. اضافه کردن کلاینت Socket.IO
داخل صفحه HTML تست:
و بعد:
دقت کنید که مقدار
۲. دریافت پیام سرور
برای تست اتصال:
اگر همه چیز درست باشه باید داخل Console مرورگر پیام زیر رو ببینید:
۳. خطای معروف 404
یکی از رایجترین خطاهایی که روی هاست اشتراکی دیده میشه اینه:
این خطا معمولاً یکی از این دلایل رو داره:
مسیر
اپلیکیشن بعد از تغییرات Restart نشده.
درخواستها به جای
فایل Startup اشتباه انتخاب شده.
۴. بررسی لاگها
اگر اتصال برقرار نشد، لاگهای Node.js داخل cPanel بهترین محل برای پیدا کردن مشکل هستن.
معمولاً خطاهای زیر خیلی کمک میکنن:
یا:
یا:
۵. تست نهایی
اگر:
Route تست Express باز میشه
خطای 404 ندارید
پیام Socket.IO دریافت میشه
یعنی WebSocket با موفقیت روی هاست اشتراکی شما راهاندازی شده 🎉
از اینجا به بعد میتونید چت آنلاین، نوتیفیکیشن لحظهای، پنل ادمین Real-time و حتی سیستم Broadcast لاراول رو پیادهسازی کنید.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
تا اینجا سرور Node.js و Socket.IO رو راهاندازی کردیم. حالا اگه بخوایم مطمئن بشیم WebSocket واقعاً کار میکنه، باید یه کلاینت تست بسازیم.
۱. اضافه کردن کلاینت Socket.IO
داخل صفحه HTML تست:
<script src="https://cdn.socket.io/4.8.1/socket.io.min.js"></script>
و بعد:
const socket = io({
path: '/testing/socket.io',
});دقت کنید که مقدار
path باید دقیقاً با مقداری که روی سرور تنظیم کردیم یکسان باشه.۲. دریافت پیام سرور
برای تست اتصال:
socket.on('server-message', message => {
console.log(message);
});اگر همه چیز درست باشه باید داخل Console مرورگر پیام زیر رو ببینید:
Socket.IO connection successful
۳. خطای معروف 404
یکی از رایجترین خطاهایی که روی هاست اشتراکی دیده میشه اینه:
GET /socket.io/?EIO=4&transport=polling 404
این خطا معمولاً یکی از این دلایل رو داره:
مسیر
path روی سرور و کلاینت یکسان نیست.اپلیکیشن بعد از تغییرات Restart نشده.
درخواستها به جای
/testing/socket.io به /socket.io ارسال میشن.فایل Startup اشتباه انتخاب شده.
۴. بررسی لاگها
اگر اتصال برقرار نشد، لاگهای Node.js داخل cPanel بهترین محل برای پیدا کردن مشکل هستن.
معمولاً خطاهای زیر خیلی کمک میکنن:
Cannot find module ...
یا:
EADDRINUSE
یا:
404 Not Found
۵. تست نهایی
اگر:
Route تست Express باز میشه
خطای 404 ندارید
پیام Socket.IO دریافت میشه
یعنی WebSocket با موفقیت روی هاست اشتراکی شما راهاندازی شده 🎉
از اینجا به بعد میتونید چت آنلاین، نوتیفیکیشن لحظهای، پنل ادمین Real-time و حتی سیستم Broadcast لاراول رو پیادهسازی کنید.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
📄 فایل نهایی app.js
اگر همه مراحل پستهای قبلی رو انجام داده باشید، فایل نهایی میتونه چیزی شبیه نمونه زیر باشه:
بعد از ذخیره فایل:
اپلیکیشن رو Restart کنید.
آدرس زیر رو باز کنید:
اگر پیام:
نمایش داده شد یعنی هم Express و هم Socket.IO روی هاست اشتراکی شما با موفقیت در حال کار هستند.
💡 فراموش نکنید که مقدار
—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #JavaScript #Backend #Realtime #توسعه_وب
اگر همه مراحل پستهای قبلی رو انجام داده باشید، فایل نهایی میتونه چیزی شبیه نمونه زیر باشه:
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = new Server(server, {
cors: {
origin: '*',
},
path: '/testing/socket.io',
});
app.get('/testing/node-test', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Socket.IO Test</title>
</head>
<body>
<h2>Socket.IO Connection Test</h2>
<div id="status">
Connecting...
</div>
<script src="https://cdn.socket.io/4.8.1/socket.io.min.js"></script>
<script>
const socket = io({
path: '/testing/socket.io'
});
socket.on('connect', () => {
document.getElementById('status').innerHTML =
'✅ Connected Successfully';
});
socket.on('server-message', message => {
console.log(message);
document.getElementById('status').innerHTML =
'✅ ' + message;
});
socket.on('disconnect', () => {
document.getElementById('status').innerHTML =
'❌ Disconnected';
});
</script>
</body>
</html>
`);
});
io.on('connection', socket => {
console.log('New Client Connected');
socket.emit(
'server-message',
'Socket.IO connection successful'
);
socket.on('disconnect', () => {
console.log('Client Disconnected');
});
});
module.exports = server;بعد از ذخیره فایل:
اپلیکیشن رو Restart کنید.
آدرس زیر رو باز کنید:
https://yourdomain.com/testing/node-test
اگر پیام:
✅ Socket.IO connection successful
نمایش داده شد یعنی هم Express و هم Socket.IO روی هاست اشتراکی شما با موفقیت در حال کار هستند.
💡 فراموش نکنید که مقدار
/testing باید با Application URL که داخل cPanel ساختهاید یکسان باشد. اگر مثلاً اپلیکیشن را روی /node-app ساخته باشید باید تمام مسیرها را متناسب با آن تغییر دهید.—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #JavaScript #Backend #Realtime #توسعه_وب