नगीनेक्स के माध्यम से अपने वेबोग्राम उदाहरण को उठाएं

हेलो, हेब्र!

मैं हाल ही में एक ऐसी स्थिति में आया, जिसमें इंटरनेट तक अपूर्ण पहुंच के साथ एक कॉर्पोरेट नेटवर्क के अंदर काम करना आवश्यक था और जैसा कि आप हेडलाइन से अनुमान लगा सकते हैं, टेलीग्राम इसमें अवरुद्ध था। मुझे यकीन है कि यह स्थिति बहुतों से परिचित है।

मैं दूतों के बिना कर सकता हूं, हालांकि, यह टेलीग्राम था जिसे मुझे काम करने की आवश्यकता थी। क्लाइंट को काम करने वाली मशीन पर स्थापित करना संभव नहीं था, न ही व्यक्तिगत लैपटॉप का उपयोग करना। एक अन्य समाधान इसके आधिकारिक वेब संस्करण का उपयोग करने के लिए प्रतीत होता है , लेकिन जैसा कि आप अनुमान लगा सकते हैं, यह भी अनुपलब्ध था। मैं तुरंत अनौपचारिक दर्पण की खोज के साथ विकल्प को हटा देता हूं (मुझे स्पष्ट कारणों की उम्मीद है)।

सौभाग्य से, Webogram एक ओपन सोर्स प्रोजेक्ट है, जिनमें से स्रोत कोड पर उपलब्ध है GitHubइसका लेखक (जिसके लिए उसके लिए
बहुत धन्यवाद!) स्थापना और लॉन्च स्वयं एक बड़ी बात नहीं है, हालांकि, टेलीग्राम सर्वरों के लिए अवरुद्ध पहुंच के साथ नेटवर्क के अंदर परिचालन स्थितियों के तहत, आप अधिक संभावना से निराश होंगे, क्योंकि वेब संस्करण के लिए अनुरोध भेजता है उपयोगकर्ता की मशीन से टेलीग्राम सर्वर।

सौभाग्य से, यह ठीक करने के लिए काफी सरल (लेकिन बहुत स्पष्ट नहीं) है। मैं आपको चेतावनी देना चाहता हूं कि मैं इस समाधान का लेखक नहीं हूं। मैं इसे एक धागे में खोजने में कामयाब रहा, जिसमें मेरी जैसी ही समस्या पर चर्चा हुई। उपयोगकर्ता github tecknojock द्वारा सुझाए गए समाधान ने मुझे बहुत मदद की, हालांकि, मुझे यकीन है कि यह किसी और की मदद कर सकता है, इसलिए मैंने इस ट्यूटोरियल को लिखने का फैसला किया।

बिल्ली के नीचे आपको अपने वेबोग्राम मिरर का एक चरण-दर-चरण कॉन्फ़िगरेशन और उसके अनुरोधों की प्रॉक्सी सेटिंग्स मिल जाएंगी, जो कि निगनेक्स का उपयोग कर टेलीग्राम सर्वरों को भेजेंगे।

एक उदाहरण के रूप में, मैंने उबंटू सर्वर 18.04.3 को अभी स्थापित और अपडेट किया है।

नोट: इस ट्यूटोरियल के भीतर नगीने में एक डोमेन स्थापित करने के लिए कोई निर्देश नहीं होगा। यह स्वतंत्र रूप से किया जाना चाहिए। ट्यूटोरियल मानता है कि आपने पहले से ही ssl के साथ एक डोमेन कॉन्फ़िगर किया है, साथ ही जिस सर्वर पर आप कॉन्फ़िगर करने की योजना बनाते हैं, उसके पास टेलीग्राम सर्वर तक पहुंच है (किसी भी तरह से आपको पसंद है)

मान लें कि इस सर्वर का आईपी 10.23.0.3 है, और डोमेन नाम mywebogram है। लोकलहोस्ट

इन सम्मेलनों के आधार पर, मैं विन्यास के उदाहरण दूंगा। मूल्यों को अपने आप में बदलने के लिए मत भूलना।

तो

यहाँ हम चलते हैं : वेबोग्राम चलाने के लिए, हमें नोडज की आवश्यकता है। डिफ़ॉल्ट रूप से, यदि आप इसे Ubuntu रिपॉजिटरी से इंस्टॉल करते हैं, तो हमें नोडज वर्जन 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 को बंद कर देंगे।

हम इसके लिए यूडीएफ उपयोगिता (या आपके लिए सुविधाजनक कोई भी विधि) का उपयोग करते हैं:

sudo ufw deny 8000

यदि आप अभी भी udf का उपयोग करने का निर्णय लेते हैं, लेकिन यह सर्वर पर बंद हो जाता है - और नियम जोड़ें (ताकि सब कुछ अलग न हो जाए) और udf चालू करें:

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

अगला, चलो nginx कॉन्फ़िगरेशन को बदलते हैं।

जैसा कि मैंने ऊपर चेतावनी दी है - यह माना जाता है कि ssl वाला डोमेन आपके सर्वर पर पहले से ही कॉन्फ़िगर है। मैं केवल इस तथ्य पर आपका ध्यान आकर्षित करूंगा कि सही संचालन के लिए डोमेन के कॉन्फ़िगरेशन फ़ाइल में जोड़ना आवश्यक होगा:


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 config में क्या जोड़ते हैं:

  • हम रूट स्थान को बदलते हैं, जो 8000 पोर्ट को प्रॉक्सी रिक्वेस्ट करेगा, जिसका वेबोग्राम जवाब देता है
  • मूल स्थान के साथ मूल स्थान बंद करें। यह हमारे आंखों और बॉट्स से हमारे आवेदन को बंद करने के लिए एक विशुद्ध रूप से प्रतीकात्मक कदम है। (और यह भी कि ताले की कोई समस्या नहीं थी)
  • Telegram सर्वर पर प्रॉक्सी_पथ के साथ स्थान का ढेर हमारे समापन बिंदु हैं जिसके माध्यम से हम अपने अनुरोधों को प्रॉक्सी करेंगे

इसके अलावा, एक फ़ाइल बनाएं /etc/nginx/passwd.htpasswd;ताकि nginx के पास उपयोगकर्ता पासवर्ड की तुलना करने के लिए कुछ हो।

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

छवि

फिर से शुरू करें:

sudo systemctl restart nginx

अब Webpass 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 <igor.beatle@gmail.com>
 * 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
      }
...
 

उसके बाद, आपको ब्राउज़र में एप्लिकेशन के साथ पृष्ठ को रीफ्रेश करना होगा।

ब्राउज़र कंसोल खोलें और एप्लिकेशन के नेटवर्क अनुरोध देखें। यदि सब कुछ काम करता है, और एक्सएचआर अनुरोध आपके सर्वर पर जाते हैं, तो सब कुछ सही ढंग से किया जाता है, और वेबोग्राम अब नग्नेक्स के माध्यम से अनुमानित है।



मुझे उम्मीद है कि यह ट्यूटोरियल मेरे अलावा किसी और के लिए उपयोगी होगा।

अंत तक पढ़ने वाले सभी को बहुत-बहुत धन्यवाद।

यदि किसी को कोई कठिनाई है या मैंने कुछ गलतियाँ की हैं - तो मुझे जवाब देने और टिप्पणियों या पीएम में आपकी मदद करने की खुशी होगी।

Source: https://habr.com/ru/post/undefined/


All Articles