ہم اپنی ویبوگرام مثال کو nginx کے ذریعے پراکسینگ کے ساتھ بڑھاتے ہیں۔

ارے حبر!

حال ہی میں میں نے اپنے آپ کو ایک ایسی صورتحال میں پایا جس میں انٹرنیٹ تک نامکمل رسائی کے ساتھ کارپوریٹ نیٹ ورک کے اندر کام کرنا ضروری تھا اور جیسا کہ آپ عنوان سے اندازہ لگا سکتے ہیں، ٹیلیگرام اس میں بلاک تھا۔ مجھے یقین ہے کہ یہ صورتحال بہت سے لوگوں کو معلوم ہے۔

میں فوری میسنجر کے بغیر کر سکتا ہوں، لیکن یہ ٹیلیگرام تھا جس کی مجھے کام کے لیے ضرورت تھی۔ کلائنٹ کو ورک مشین پر انسٹال کرنا ممکن نہیں تھا اور نہ ہی ذاتی لیپ ٹاپ استعمال کرنا ممکن تھا۔ ایسا لگتا ہے کہ ایک اور حل اسے استعمال کرنا ہے۔ سرکاری ویب ورژن، لیکن جیسا کہ آپ اندازہ لگا سکتے ہیں، یہ بھی دستیاب نہیں تھا۔ میں فوری طور پر غیر سرکاری آئینے کی تلاش کے آپشن کو عبور کرتا ہوں (مجھے واضح وجوہات کی بنا پر امید ہے)۔

خوش قسمتی سے، ویبگرام ایک اوپن سورس پروجیکٹ ہے جس کا سورس کوڈ دستیاب ہے۔ گاٹہوب اس کے مصنف (جس کے لیے ان کا بہت شکریہ!)
انسٹالیشن اور لانچ بذات خود مشکل نہیں ہے، تاہم، ٹیلیگرام سرورز تک بلاک رسائی والے نیٹ ورک کے اندر آپریشن کے حالات میں، آپ کو کامیابی سے زیادہ مایوسی کا سامنا کرنا پڑے گا، کیونکہ ویب ورژن صارف کی مشین سے ٹیلیگرام سرورز کو درخواستیں بھیجتا ہے۔

خوش قسمتی سے، یہ کافی آسان ہے (لیکن بہت واضح نہیں) ٹھیک ہے. میں آپ کو متنبہ کرنا چاہوں گا کہ میں اس حل کا مصنف نہیں ہوں۔ میں اسے تلاش کرنے میں کامیاب ہوگیا۔ شاخ، جس نے میرے جیسے مسئلے پر تبادلہ خیال کیا۔ گیتوب صارف کے ذریعہ تجویز کردہ حل ٹیکنوجکاس نے میری بہت مدد کی، تاہم، مجھے یقین ہے کہ یہ کسی اور کی مدد کر سکتا ہے، اس لیے میں نے یہ ٹیوٹوریل لکھنے کا فیصلہ کیا۔

کٹ کے نیچے آپ کو اپنے ویبوگرام مرر کا مرحلہ وار سیٹ اپ اور nginx کا استعمال کرتے ہوئے ٹیلیگرام سرورز کو اس کی درخواستوں کو پراکسی کرنے کا سیٹ اپ ملے گا۔

مثال کے طور پر، میں نے ایک تازہ انسٹال اور اپ ڈیٹ شدہ اوبنٹو سرور 18.04.3 کا انتخاب کیا۔

انتباہ: اس ٹیوٹوریل میں nginx میں ڈومین ترتیب دینے کی ہدایات شامل نہیں ہوں گی۔ آپ کو یہ کام خود کرنے کی ضرورت ہے۔ ٹیوٹوریل یہ مانتا ہے کہ آپ نے پہلے ہی ssl کے ساتھ ایک ڈومین کنفیگر کر لیا ہے، اور یہ کہ جس سرور پر آپ اسے کنفیگر کرنے کا ارادہ رکھتے ہیں اسے ٹیلیگرام سرورز تک رسائی حاصل ہے (جس طرح سے آپ چاہیں)

آئیے فرض کریں کہ اس سرور کا آئی پی 10.23.0.3 ہے، اور ڈومین کا نام mywebogram.localhost ہے۔

ان کنونشنز کی بنیاد پر، میں کنفیگریشنز کی مثالیں دوں گا۔ اپنی اقدار کو تبدیل کرنا نہ بھولیں۔

تو چلو شروع ہو چکا ہے:

ویبگرام کو چلانے کے لیے، ہمیں نوڈجز کی ضرورت ہے۔ پہلے سے طے شدہ طور پر، اگر ہم اسے Ubuntu کے ذخیروں سے انسٹال کرتے ہیں، تو ہمیں nodejs ورژن 8.x ملے گا۔ ہمیں 12.x کی ضرورت ہے:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - 
sudo apt update && sudo apt -y install nodejs

ہم اس جگہ کا انتخاب کرتے ہیں جہاں ہمارا ویبگرام مبنی ہوگا۔

مثال کے طور پر، آئیے اسے ہوم ڈائریکٹری کے روٹ میں رکھیں۔ ایسا کرنے کے لیے، ہمارے سرور پر آفیشل ریپوزٹری کو کلون کریں:

cd ~ && git clone https://github.com/zhukov/webogram.git

اگلا مرحلہ ایپلیکیشن چلانے کے لیے درکار تمام انحصار کو انسٹال کرنا ہے۔

cd webogram && npm install

آئیے ایک ٹیسٹ رن کرنے کی کوشش کریں۔ کمانڈ چلائیں:

npm start

اس کے بعد، ہم اسے براؤزر میں کھولنے کی کوشش کرتے ہیں۔

 http://10.23.0.3:8000/app/index.html

اگر اس وقت تک آپ نے سب کچھ صحیح طریقے سے کیا ہے، تو ویبگرام کی اجازت کا صفحہ کھل جائے گا۔

اب ہمیں سروس کے طور پر چلانے کے لیے ایپلیکیشن کو کنفیگر کرنے کی ضرورت ہے۔ ایسا کرنے کے لیے، آئیے ایک فائل بناتے ہیں۔

sudo touch /lib/systemd/system/webogram.service

اسے کسی بھی ایڈیٹر میں کھولیں اور اسے درج ذیل شکل دیں (WorkDirectory میں اپنا راستہ داخل کریں)

[Unit]
Description=Webogram mirror
[Service]
WorkingDirectory=/home/tg/webogram
ExecStart=/usr/bin/npm start
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

پھر ہم درج ذیل کمانڈز چلاتے ہیں۔

تبدیلیوں کا اطلاق

sudo systemctl daemon-reload

آٹورن کو فعال کریں:

sudo systemctl enable webogram.service

آئیے سروس شروع کریں:

sudo systemctl start webogram.service

مراحل کو مکمل کرنے کے بعد، ویبگرام پورٹ 8000 پر دستیاب رہے گا۔

چونکہ ہم nginx کے ذریعے اپنے ویبوگرام تک رسائی قائم کریں گے، اس لیے ہم باہر سے آنے والی درخواستوں کے لیے پورٹ 8000 بند کر دیں گے۔

ہم اس کے لیے udf یوٹیلیٹی استعمال کرتے ہیں (یا آپ کے لیے کوئی آسان طریقہ):

sudo ufw deny 8000

اگر آپ اب بھی udf استعمال کرنے کا فیصلہ کرتے ہیں، لیکن یہ سرور پر غیر فعال ہے، تو مزید قواعد شامل کریں (تاکہ سب کچھ ٹوٹ نہ جائے) اور udf کو فعال کریں:

sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

اگلا، آئیے nginx کنفیگریشن کو تبدیل کرنا شروع کرتے ہیں۔

جیسا کہ میں نے اوپر خبردار کیا ہے، یہ فرض کیا جاتا ہے کہ آپ کے سرور پر ایس ایس ایل والا ڈومین پہلے سے ہی کنفیگر ہے۔ میں آپ کی توجہ صرف اس طرف مبذول کراؤں گا کہ ڈومین کنفیگریشن فائل کو صحیح طریقے سے کام کرنے کے لیے اس میں کیا شامل کرنے کی ضرورت ہوگی:


server {
...
  location ^~ /pluto/apiw1/ {
    proxy_pass https://pluto.web.telegram.org/apiw1/;
  }
  location ^~ /venus/apiw1/ {
    proxy_pass https://venus.web.telegram.org/apiw1/;
  }
  location ^~ /aurora/apiw1/ {
    proxy_pass https://aurora.web.telegram.org/apiw1/;
  }
  location ^~ /vesta/apiw1/ {
    proxy_pass https://vesta.web.telegram.org/apiw1/;
  }
  location ^~ /flora/apiw1/ {
    proxy_pass https://flora.web.telegram.org/apiw1/;
  }
  location ^~ /pluto-1/apiw1/ {
    proxy_pass https://pluto-1.web.telegram.org/apiw1/;
  }
  location ^~ /venus-1/apiw1/ {
    proxy_pass https://venus-1.web.telegram.org/apiw1/;
  }
  location ^~ /aurora-1/apiw1/ {
    proxy_pass https://aurora-1.web.telegram.org/apiw1/;
  }
  location ^~ /vesta-1/apiw1/ {
    proxy_pass https://vesta-1.web.telegram.org/apiw1/;
  }
  location ^~ /flora-1/apiw1/ {
    proxy_pass https://flora-1.web.telegram.org/apiw1/;
  }
  location ^~ /DC1/ {
    proxy_pass http://149.154.175.10:80/;
  }
  location ^~ /DC2/ {
    proxy_pass http://149.154.167.40:80/;
  }
  location ^~ /DC3/ {
    proxy_pass http://149.154.175.117:80/;
  }
  location ^~ /DC4/ {
    proxy_pass http://149.154.175.50:80/;
  }
  location ^~ /DC5/ {
    proxy_pass http://149.154.167.51:80/;
  }
  location ^~ /DC6/ {
    proxy_pass http://149.154.175.100:80/;
  }
  location ^~ /DC7/ {
    proxy_pass http://149.154.167.91:80/;
  }
  location ^~ /DC8/ {
    proxy_pass http://149.154.171.5:80/;
  }
 location / {
    auth_basic "tg";
    auth_basic_user_file /etc/nginx/passwd.htpasswd;
    proxy_pass http://localhost:8000/;
    proxy_read_timeout 90s;
    proxy_connect_timeout 90s;
    proxy_send_timeout 90s;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

ہم nginx ترتیب میں کیا شامل کرتے ہیں:

  • ہم روٹ لوکیشن کو تبدیل کرتے ہیں، جو پورٹ 8000 پر پراکسی کی درخواست کرے گا، جس پر ویبگرام جواب دیتا ہے۔
  • ہم بنیادی تصنیف کا استعمال کرتے ہوئے جڑ کی جگہ کو بند کرتے ہیں۔ یہ ہماری ایپلیکیشن کو آنکھوں اور بوٹس سے بند کرنے کے لیے خالصتاً علامتی قدم ہے۔ (اور بلاک کرنے کے مسائل سے بچنے کے لیے بھی)
  • ٹیلیگرام سرور پر proxy_path والے مقامات کا ایک گروپ بالکل ہمارے اختتامی نقطہ ہیں جن کے ذریعے ہم اپنی درخواستوں کو پراکسی کریں گے۔

اس کے علاوہ، آئیے ایک فائل بنائیں /etc/nginx/passwd.htpasswd;تاکہ nginx کے پاس صارف کے پاس ورڈ چیک کرنے کے لیے کچھ ہو۔

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg

ہم اپنی ویبوگرام مثال کو nginx کے ذریعے پراکسینگ کے ساتھ بڑھاتے ہیں۔

nginx کو دوبارہ شروع کریں:

sudo systemctl restart nginx

اب ویبگرام صرف پر دستیاب ہوگا۔ mywebogram.localhost/app/index.html لاگ ان اور پاس ورڈ کے بعد جو آپ نے htpasswd کمانڈ بناتے وقت وضاحت کی تھی۔

تھوڑا سا بچا ہے: ہم خود پروجیکٹ میں چھوٹی تبدیلیاں کریں گے۔

فائل کو ایڈیٹر میں کھولیں۔ ~/webogram/app/js/lib/mtproto.js

اور اس کی شروعات کو درج ذیل شکل میں لائیں:

/*!
 * Webogram v0.7.0 - messaging web application for MTProto
 * https://github.com/zhukov/webogram
 * Copyright (C) 2014 Igor Zhukov <[email protected]>
 * https://github.com/zhukov/webogram/blob/master/LICENSE
 */

angular.module('izhukov.mtproto', ['izhukov.utils'])

  .factory('MtpDcConfigurator', function () {
    var sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora']

    var dcOptions = Config.Modes.test
      ? [
        {id: 1, host: 'mywebogram.localhost/DC1',  port: 80},
        {id: 2, host: 'mywebogram.localhost/DC2',  port: 80},
        {id: 3, host: 'mywebogram.localhost/DC3', port: 80}
      ]
      : [
        {id: 1, host: 'mywebogram.localhost/DC4',  port: 80},
        {id: 2, host: 'mywebogram.localhost/DC5',  port: 80},
        {id: 3, host: 'mywebogram.localhost/DC6', port: 80},
        {id: 4, host: 'mywebogram.localhost/DC7',  port: 80},
        {id: 5, host: 'mywebogram.localhost/DC8',   port: 80}
      ]

    var chosenServers = {}

    function chooseServer (dcID, upload) {
      if (chosenServers[dcID] === undefined) {
        var chosenServer = false,
          i, dcOption

        if (Config.Modes.ssl || !Config.Modes.http) {
          var subdomain = sslSubdomains[dcID - 1] + (upload ? '-1' : '')
          var path = Config.Modes.test ? 'apiw_test1' : '/apiw1/'
          chosenServer = 'https://mywebogram.localhost/' + subdomain + path
          return chosenServer
        }
       for (i = 0; i < dcOptions.length; i++) {
          dcOption = dcOptions[i]
          if (dcOption.id == dcID) {
            chosenServer = 'http://' + dcOption.host + '/apiw1'
            break
          }
        }
        chosenServers[dcID] = chosenServer
      }
...
 

اس کے بعد، آپ کو براؤزر میں ایپلیکیشن پیج کو ریفریش کرنا ہوگا۔

اپنا براؤزر کنسول کھولیں اور ایپلیکیشن کی نیٹ ورک کی درخواستوں کو دیکھیں۔ اگر سب کچھ کام کرتا ہے اور XHR کی درخواستیں آپ کے سرور پر جاتی ہیں، تو سب کچھ صحیح طریقے سے کیا جاتا ہے، اور ویبگرام اب nginx کے ذریعے پراکسی ہو جاتا ہے۔

ہم اپنی ویبوگرام مثال کو nginx کے ذریعے پراکسینگ کے ساتھ بڑھاتے ہیں۔

مجھے امید ہے کہ یہ ٹیوٹوریل میرے علاوہ کسی اور کے لیے بھی کارآمد ثابت ہوگا۔

آخر تک پڑھنے والے سب کا بہت شکریہ۔

اگر کسی کو کوئی دشواری ہے یا میں نے کوئی غلطی کی ہے تو مجھے جواب دینے میں خوشی ہوگی اور تبصرے میں یا پی ایم میں آپ کی مدد کرنے کی کوشش کروں گا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں