وصل شدن به اسپاتیفای با Node JS

توی این پست میخوام توضیح بدم که چطوری با یه سرور و ۱۴ خط کد نود جی اس یه پراکسی سرور بیاریم بالا و توی اسپاتیفای ازش استفاده کنیم، با ما باشید ???Photo by Hanny Naibaho on Unsplashتهیه سرورخوب اولین چیزی که لازم دارید یه سرور با سیستم عامل ترجیحا لینوکسه که از سایت های مختلفی که وی پی اس میفروشن میتونید بخرید، بعد از خرید بهتون یوزرنیم و پسورد میدن و میتونید به سرورتون ssh بزنید:ssh username@server_ip بعد از اینکه پسوردتون رو وارد کردین و به سرور وصل شدین لازمه که نود جی اس رو روی سرورتون نصب کنید، برای نصب نود جی اس راه حل همیشگی من استفاده از nvm هستش که اجازه میده ورژن های مختلف نود رو به راحتی نصب کنم و بینشون سوییچ کنم، نصب خودش هم خیلی ساده و راحته نصب nvm و node jscurl -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خروجیش یه چیزی شبیه عکس زیر میشه:pm2 listحالا با خیال راحت میتونیم کانکشن اس اس اچمون رو ببندیمexitاز این پراکسی سرور چجوری توی اسپاتیفای استفاده کنیم؟ (Mac OS, Linux, Windows)اپ اسپاتیفای رو باز کنید و از منوی بالا سمت راست به تنظیمات بریدبه پایین اسکرول میکنیم و show advanced settings رو میزنیم و دوباره به پایین اسکرول میکنیم تا به بخش proxy برسیمپراکسی تایپ رو روی http میزاریم و ip سرورمون و پورتی که وارد کردیم به علاوه یوزرنیم و پسورد رو وارد میکنیم سپس update proxy رو میزنیم اسپاتیفای ری استارت میشه و تامام!!! از گوش دادن به موسیقی مورد علاقمون لذت میبریم :)امیدوارم اولین پست من توی ویرگول براتون مفید بوده باشه سوالی اروری چیزی اگه دارین توی کامنت ها یا توییتر (bardiainjast) مطرح کنید حتما جواب میدم ?