مهندس نرم افزار خیلی دون پایه | @bardiarastin در توییتر | سلام ?!
وصل شدن به اسپاتیفای با Node JS
توی این پست میخوام توضیح بدم که چطوری با یه سرور و ۱۴ خط کد نود جی اس یه پراکسی سرور بیاریم بالا و توی اسپاتیفای ازش استفاده کنیم، با ما باشید ???

تهیه سرور
خوب اولین چیزی که لازم دارید یه سرور با سیستم عامل ترجیحا لینوکسه که از سایت های مختلفی که وی پی اس میفروشن میتونید بخرید، بعد از خرید بهتون یوزرنیم و پسورد میدن و میتونید به سرورتون ssh بزنید:
ssh username@server_ip بعد از اینکه پسوردتون رو وارد کردین و به سرور وصل شدین لازمه که نود جی اس رو روی سرورتون نصب کنید، برای نصب نود جی اس راه حل همیشگی من استفاده از nvm هستش که اجازه میده ورژن های مختلف نود رو به راحتی نصب کنم و بینشون سوییچ کنم، نصب خودش هم خیلی ساده و راحته
نصب nvm و node js
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bashآدرس گیتهابش اگه به مشکل برخوردین https://github.com/creationix/nvm
بعد از اینکه nvm رو نصب کردین میتونید با کامند زیر آخرین ورژن نود رو نصب کنید:
nvm install nodenvm use nodeوقتی نود جی اس نصب بشه با اجرا کردن کامند های زیر باید خروجی مشابهی بگیرین:
node -vv10.2.1npm -v5.6.0اگه تا اینجا بدون دردسر و ارور رسیدین تبریک ??????

شروع کار اصلی
با ساختن یه دایرکتوری (پوشه ?) شروع میکنیم توی ترمینال سرورتون کامند زیر رو بزنید:
mkdir proxy && cd proxyبعد باید با npm یه فایل package.json درست کنیم که بتونیم از کدهای آماده دیگران (پکیج ها) استفاده کنیم:
npm init رو که بزنید شروع میکنه یه سری سوال پرسیدن که میتونید اینتر رو نگه دارید که همشون مقدار پیش فرض در نظر گرفته بشن (روش تنبل ها ?) یا با حوصله به سوالاش جواب بدین:
package name: (test) proxyversion: (1.0.0) 0.0.0description: proxy server entry point: (index.js) main.jstest command: git repository: keywords: author: Bardia Rastinlicense: (ISC) MITحالا یه فایل main.js میسازیم که اصل کاری یعنی کدمون رو توش بنویسیم:
touch main.jsفایل رو با هر ادیتوری که راحت هستین باز کنید که بتونیم توش کد بزنیم من اینجا vim رو میگم:
vim main.jsحالا اصل کار کدمون:
const ProxyChain = require('proxy-chain');
const server = new ProxyChain.Server({
port: 8000,
verbose: false,
prepareRequestFunction: ({ request, username, password, hostname, port, isHttp }) => {
return {
requestAuthentication: username !== 'myusername' || password !== 'mypassword'
};
},
});
server.listen(() => {
console.log(`Proxy server is listening on port ${8000}`);
});
خوب کد بالا چیکار میکنه؟! ?
خط اول ما یه پکیج به نام proxy-chain رو ایمپورت میکنیم و در خط دوم یه instance جدید ازش میسازیم و به این صورت کانفیگش میکنیم که روی پورت دلخواه (اینجا ۸۰۰۰) و با یوزرنیم و پسوردی که میخوایم (خط ۷ام) اجرا بشه و در خط ۱۲ استارتش میکنیم ?
فایل رو سیو میکنیم و میبندیم ESC و سپس :wq یا :x (اگه تا حالا ویم استفاده نکردین اینجا نقطه خوبی برای اولین بار استفاده کردنش نیست چون واردش بشید خارج شدن ازش خیلی داستان داره برای بار اول)
پکیج proxy-chain رو که توی کدمون استفاده کردیم نصب میکنیم:
npm install proxy-chainبعدش میتونیم اسکریپتمون رو (main.js) با نود جی اس اجرا کنیم:
node main.jsمشکلی که وجود داره اینه که اگه شما ssh رو قطع کنید اسکریپت شما ام متوقف میشه و خوب نمیشه همیشه اس اس اچ زد که یه اسکریپتی در حال اجرا شدن باشه پس ctrl + c رو بزنید که نود جی اس متوقف بشه، اما راه حل؟
npm install -g pm2پکیج pm2 اینجا به کمکمون میاد که اجازه میده اسکریپت های مختلف رو توی بک گراند اجرا کنیم و با خیال راحت همیشه اجرا بمونن و کلی کارای دیگه، به صورت گلوبال نصبش میکنیم که همه جا بتونیم ازش استفاده کنیم، برای اینکه اسکریپت ما همیشه روی سرور اجرا بمونه کامند زیر رو اجرا میکنیم:
pm2 start main.js --name "proxy-server"بعد از اجرا کردن این کامند میتونیم با کامند زیر اسکریپت هایی که توی بک گراند در حال اجرا هستن رو ببینیم:
pm2 listخروجیش یه چیزی شبیه عکس زیر میشه:

حالا با خیال راحت میتونیم کانکشن اس اس اچمون رو ببندیم
exitاز این پراکسی سرور چجوری توی اسپاتیفای استفاده کنیم؟ (Mac OS, Linux, Windows)
اپ اسپاتیفای رو باز کنید و از منوی بالا سمت راست به تنظیمات برید

به پایین اسکرول میکنیم و show advanced settings رو میزنیم و دوباره به پایین اسکرول میکنیم تا به بخش proxy برسیم

پراکسی تایپ رو روی http میزاریم و ip سرورمون و پورتی که وارد کردیم به علاوه یوزرنیم و پسورد رو وارد میکنیم سپس update proxy رو میزنیم اسپاتیفای ری استارت میشه و تامام!!! از گوش دادن به موسیقی مورد علاقمون لذت میبریم :)

امیدوارم اولین پست من توی ویرگول براتون مفید بوده باشه سوالی اروری چیزی اگه دارین توی کامنت ها یا توییتر (bardiainjast) مطرح کنید حتما جواب میدم ?
مطلبی دیگر از این انتشارات
کدام ابزار وب برای شما مناسب هستند؟
مطلبی دیگر از این انتشارات
کال بک (callback) در جاوا اسکریپت
مطلبی دیگر از این انتشارات
محاسبه زمان خواندن یک مطلب در جاوا اسکریپت