Tõstame oma Webogrami eksemplari puhverserveri abil nginxi kaudu

Tere Habr!

Hiljuti leidsin end olukorrast, kus oli vaja töötada ettevõtte võrgu sees, millel oli puudulik juurdepääs Internetile ja nagu pealkirjast võib arvata, oli Telegram selles blokeeritud. Olen kindel, et see olukord on paljudele tuttav.

Ma saan ilma kiirsõnumiteta hakkama, kuid tööks vajasin just Telegrami. Töömasinale ei saanud klienti installida, samuti polnud võimalik kasutada isiklikku sülearvutit. Teine lahendus näib olevat selle kasutamine ametlik veebiversioon, kuid nagu võite arvata, polnud see ka saadaval. Kriipsun kohe maha mitteametliku peegli otsimise võimaluse (loodan, et arusaadavatel põhjustel).

Õnneks on Webogram avatud lähtekoodiga projekt, mille lähtekood on saadaval github selle autor (selle eest suur tänu talle!)
Installimine ja käivitamine iseenesest pole keeruline, kuid Telegrami serveritele blokeeritud juurdepääsuga võrgus töötamise tingimustes peate pigem pettuma kui edukaks, kuna veebiversioon saadab kasutaja masinast Telegrami serveritele päringuid.

Õnneks on see üsna lihtne (kuid mitte väga ilmne) parandus. Tahaksin hoiatada, et ma ei ole selle lahenduse autor. Mul õnnestus see sealt üles leida haru, kus arutati minuga sarnast probleemi. Githubi kasutaja soovitatud lahendus tecknojock, aitas see mind palju, kuid olen kindel, et see võib aidata kedagi teist, mistõttu otsustasin selle õpetuse kirjutada.

Lõike alt leiate oma Webogrammi peegli samm-sammult seadistamise ja selle päringute puhverserveri nginxi abil Telegrami serveritele.

Näitena valisin värskelt installitud ja uuendatud Ubuntu Serveri 18.04.3.

Hoiatus: See õpetus ei sisalda juhiseid domeeni seadistamiseks nginxis. Peate seda ise tegema. Õpetus eeldab, et olete juba ssl-iga domeeni konfigureerinud ja serveril endal, millel kavatsete seda konfigureerida, on juurdepääs Telegrami serveritele (mis tahes viisil, mis teile meeldib)

Oletame, et selle serveri IP on 10.23.0.3 ja domeeninimi on mywebogram.localhost

Nendele kokkulepetele tuginedes toon näiteid konfiguratsioonidest. Ärge unustage väärtusi enda omadeks muuta.

Alustame siis:

Webogrami käitamiseks vajame nodeji. Vaikimisi, kui installime selle Ubuntu hoidlatest, saame nodejs versiooni 8.x. Vajame 12.x:

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

Valime koha, kus meie Webogramm asub.

Näiteks asetame selle kodukataloogi juure. Selleks kloonige ametlik hoidla meie serverisse:

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

Järgmine samm on installida kõik rakenduse käitamiseks vajalikud sõltuvused.

cd webogram && npm install

Proovime proovisõitu. Käivitage käsk:

npm start

Pärast seda proovime seda brauseris avada

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

Kui olete seni kõik õigesti teinud, avaneb Webogrami autoriseerimisleht.

Nüüd peame konfigureerima rakenduse teenusena töötama. Selleks loome faili

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

avage see mis tahes redaktoris ja andke sellele järgmine välimus (sisestage oma tee WorkDirectorysse)

[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

Seejärel käivitame järgmised käsud:

Muudatuste rakendamine

sudo systemctl daemon-reload

Luba automaatkäivitus:

sudo systemctl enable webogram.service

Alustame teenusega:

sudo systemctl start webogram.service

Pärast toimingute sooritamist on Webogram jätkuvalt saadaval pordis 8000.

Kuna loome juurdepääsu oma Webogrammile nginxi kaudu, sulgeme väljastpoolt tulevate päringute jaoks pordi 8000.

Kasutame selleks utiliiti udf (või mis tahes teile sobivat meetodit):

sudo ufw deny 8000

Kui otsustate siiski kasutada udf-i, kuid see on serveris keelatud, lisage rohkem reegleid (et kõik ei laguneks) ja lubage udf:

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

Järgmisena alustame nginxi konfiguratsiooni muutmist.

Nagu eespool hoiatasin, eeldatakse, et ssl-iga domeen on teie serveris juba konfigureeritud. Juhin teie tähelepanu ainult sellele, mida tuleb domeeni konfiguratsioonifailile lisada, et see korralikult töötaks:


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;
  }
}

Mida me nginxi konfiguratsioonile lisame:

  • Muudame juurasukohta, mis suunab puhverserveri päringud pordile 8000, millele Webogram vastab
  • Suleme juurasukoha, kasutades basic-auth. See on puhtalt sümboolne samm meie rakenduse sulgemiseks uudishimulike pilkude ja robotite eest. (Ja ka blokeerimisega seotud probleemide vältimiseks)
  • Hunnik puhverserveri asukohti Telegrami serveris on täpselt meie lõpp-punktid, mille kaudu me oma taotlusi puhverserverime

Samuti loome faili /etc/nginx/passwd.htpasswd;et nginxil oleks millegagi kasutajate paroole kontrollida.

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

Tõstame oma Webogrami eksemplari puhverserveri abil nginxi kaudu

Taaskäivitage nginx:

sudo systemctl restart nginx

Nüüd on Webogram saadaval ainult aadressil mywebogram.localhost/app/index.html pärast sisselogimise ja parooli sisestamist, mille määrasite käsu htpasswd loomisel.

Jäänud on vähe: teeme projektis endas väikesed muudatused.

Avage fail redaktoris ~/webogram/app/js/lib/mtproto.js

Ja viige selle algus järgmisele kujule:

/*!
 * 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
      }
...
 

Pärast seda peate brauseris rakenduse lehte värskendama.

Avage brauseri konsool ja vaadake rakenduse võrgupäringuid. Kui kõik töötab ja XHR-i päringud lähevad teie serverisse, siis tehakse kõik õigesti ja Webogram on nüüd puhverserver nginxi kaudu.

Tõstame oma Webogrami eksemplari puhverserveri abil nginxi kaudu

Loodan, et see õpetus on kasulik ka kellelegi teisele peale minu.

Suur tänu kõigile, kes lõpuni lugesid.

Kui kellelgi on raskusi või tegin ebatäpsusi, siis vastan meeleldi ja proovin teid aidata kommentaarides või PM-is.

Allikas: www.habr.com

Lisa kommentaar