Waxaan kor u qaadeynaa tusaale ahaan Webogramka annaga oo adeegsanayna wakiil ka ah nginx

Haye Habr!

Dhawaan waxaan isku arkay xaalad ay lagama maarmaan tahay in laga shaqeeyo gudaha shabakad shirkadeed oo aan dhamaystirnayn isticmaalka internetka iyo, sida aad ka qiyaasi karto cinwaanka, Telegram waa la xiray. Waxaan hubaa in xaaladdan ay dad badan yaqaaniin.

Waan samayn karaa la'aanteed fariimaha degdega ah, laakiin waxay ahayd Telegram kii aan shaqada ugu baahnaa. Suurtagal ma ahayn in lagu rakibo macmiilka mashiinka shaqada, sidoo kale suurtagal ma ahayn in la isticmaalo laptop-ka gaarka ah. Xalka kale wuxuu u muuqdaa inuu yahay in la isticmaalo version webka rasmiga ah, laakiin sida aad qiyaasi karto, sidoo kale lama heli karin. Waxaan isla markiiba ka gudbay ikhtiyaarka raadinta muraayad aan rasmi ahayn (waxaan rajeynayaa sababo muuqda).

Nasiib wanaag, Webogram waa mashruuc il furan oo koodka isha laga heli karo github qoraageeda (Taas oo ay dad badan u mahadcelinayaan!)
Rakibaadda iyo bilaabista lafteedu ma aha mid adag, si kastaba ha noqotee, xaaladaha hawlgalka gudaha shabakad leh marin u helka adeegayaasha Telegram, waxaad u badan tahay inaad ka niyad jabto guusha, maadaama nooca webka uu codsiyo u diro server-yada Telegram mashiinka isticmaalaha.

Nasiib wanaag, tani waa hab fudud oo fudud (laakiin aan aad u muuqan) hagaajin. Waxaan jeclaan lahaa inaan kaaga digayo inaanan ahayn qoraaga xalkan. Waxaan ku guuleystey inaan ka helo laan, kaas oo ka hadlay dhibaato la mid ah midayda. Xalka waxaa soo jeediyay isticmaalaha github tecknojock, aad bay ii caawisay, si kastaba ha ahaatee, waxaan hubaa inay qof kale caawin karto, markaa waxaan go'aansaday inaan qoro casharkan.

Goynta hoosteeda waxaad ka heli doontaa habayn tillaabo-tallaabo ah oo ah muraayadaada Webogram iyo habaynta codsigeeda server-yada Telegram adoo isticmaalaya nginx.

Tusaale ahaan, waxaan doortay Ubuntu Server 18.04.3 cusub oo la rakibay oo la cusboonaysiiyay.

Digniin: Tababarkan kuma jiri doono tilmaamaha ku saabsan samaynta domain gudaha nginx. Waxaad u baahan tahay inaad tan sameyso. Casharku wuxuu u qaadanayaa inaad mar hore u habaysay domain leh ssl, iyo in server-ka laftiisa aad qorsheynayso inaad ku habayso uu galo server-yada Telegram (sida aad rabto)

Aynu ka soo qaadno in ip-gu seererkani yahay 10.23.0.3, magaca domain-kuna waa mywebogram.localhost

Iyada oo ku saleysan heshiisyadan, waxaan ku siin doonaa tusaalayaal qaabeynta. Ha iloobin inaad u bedesho qiyamka adiga.

Haddaba aan bilowno:

Si loo socodsiiyo Webogram, waxaan u baahanahay nodejs. Sida caadiga ah, haddii aan ka soo dejino kaydka Ubuntu, waxaan heli doonaa nodejs nooca 8.x. Waxaan u baahanahay 12.x:

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

Waxaan dooranaa meesha uu ku saleysan yahay Webogram-kayaga.

Tusaale ahaan, aan dhigno xididka hagaha guriga. Si tan loo sameeyo, xidho kaydka rasmiga ah ee server-keena:

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

Tallaabada xigta waa in la rakibo dhammaan ku tiirsanaanta loo baahan yahay si loo socodsiiyo arjiga:

cd webogram && npm install

Aynu isku dayno orod tijaabo ah. Ku socodsii amarka:

npm start

Taas ka dib, waxaan isku dayeynaa inaan ku furno browserka

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

Haddii ilaa heerkan aad wax walba si sax ah u samaysay, bogga oggolaanshaha Webgram ayaa furmi doona.

Hadda waxaan u baahanahay inaan habaynno arjiga si uu adeeg ahaan ugu shaqeeyo. Si tan loo sameeyo, aan abuurno fayl

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

ku fur tifaftire kasta oo sii muuqaalkan soo socda (geli jidkaaga 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

Markaa waxaanu wadnaa amarada soo socda:

Codsashada isbeddellada

sudo systemctl daemon-reload

Daar autorun

sudo systemctl enable webogram.service

Aan bilowno adeega:

sudo systemctl start webogram.service

Ka dib marka la dhammeeyo tillaabooyinka, Webogram wuxuu sii wadi doonaa inuu ku sii jiro dekedda 8000.

Mar haddii aan dejin doono gelitaanka Webogram-kayaga iyada oo la adeegsanayo nginx, waxaanu xidhi doonaa dekedda 8000 codsiyada dibadda.

Waxaan u isticmaalnaa utility udf tan (ama hab kasta oo adiga kugu habboon):

sudo ufw deny 8000

Haddii aad weli go'aansato inaad isticmaasho udf, laakiin uu naafada ka yahay server-ka, ku dar shuruuc badan (si aanay wax walba u burburin) oo awood udf:

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

Marka xigta, aan bilowno beddelka qaabeynta nginx.

Sidaan kor uga digay, waxaa loo malaynayaa in domain leh ssl uu horayba ugu habeeyey serverkaaga. Kaliya waxaan ku soo jeedin doonaa dareenkaaga waxa u baahan doona in lagu daro faylka qaabeynta domainka si uu si sax ah ugu shaqeeyo:


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

Waxa aan ku darno nginx config:

  • Waxaan bedelnaa goobta xididka, kaas oo codsan doona codsiyada wakiilka dekedda 8000, kaas oo Webogram uu ka jawaabo
  • Waxaan xireynaa goobta xididka anagoo adeegsanayna auth aasaasiga ah. Tani waa tillaabo calaamad ah oo kaliya oo lagu xirayo codsigeena indhaha iyo bots-yada. (iyo sidoo kale si looga fogaado dhibaatooyinka xannibista)
  • Meelo badan oo leh proxy_path oo ku yaal server-ka Telegram-ka ayaa ah meesha ugu dambeysa ee aan ku matali doonno codsiyadayada

Sidoo kale, aynu abuurno fayl /etc/nginx/passwd.htpasswd;si ay nginx u hesho wax lagu hubiyo erayga sirta ah ee isticmaalaha.

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

Waxaan kor u qaadeynaa tusaale ahaan Webogramka annaga oo adeegsanayna wakiil ka ah nginx

Dib u bilow nginx:

sudo systemctl restart nginx

Hadda Webogram waxa kaliya oo laga heli karaa mywebogram.localhost/app/index.html Kadib galitaanka iyo erayga sirta ah ee aad qeexday markii aad abuuraysay amarka htpasswd ayaa la galaa.

Wax yar ayaa hadhay: waxaanu ku samayn doonaa isbedel yar mashruuca laftiisa.

Ku fur faylka tafatiraha ~/webogram/app/js/lib/mtproto.js

Bilawgeedana u keen qaabkan soo socda:

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

Taas ka dib, waxaad u baahan tahay inaad dib u cusbooneysiiso bogga codsiga ee browserka.

Fur console kaaga oo eeg codsiyada shabakada codsiga. Haddii wax walba ay shaqeeyaan oo codsiyada XHR ay aadaan server-kaaga, markaa wax walba si sax ah ayaa loo sameeyaa, iyo Webogram hadda waa proxied via nginx.

Waxaan kor u qaadeynaa tusaale ahaan Webogramka annaga oo adeegsanayna wakiil ka ah nginx

Waxaan rajaynayaa in casharkan uu anfici doono qof kale oo aan aniga ahayn.

Aad iyo aad ayaa loogu mahad naqayaa qof kasta oo akhriya ilaa dhamaadka.

Haddii qof uu qabo wax dhib ah ama aan sameeyo wax khalad ah, waan ku farxi doonaa inaan ka jawaabo oo isku dayo inaan kaa caawiyo faallooyinka ama PM.

Source: www.habr.com

Add a comment