Em mînaka xweya Webogram bi proxykirinê bi riya nginx bilind dikin

Hey Habr!

Di van demên dawî de min xwe di rewşek de dît ku hewce bû ku di hundurê torgilokek pargîdanî de bi gihîştina netemamî ya Înternetê bixebitim û, wekî ku hûn ji sernavê texmîn dikin, Telegram tê de hate asteng kirin. Ez bawer im ku ev rewş ji bo gelek kesan nas e.

Ez dikarim bêyî qasidên tavilê bikim, lê ji bo xebatê ew Telegram bû. Ne mimkun bû ku xerîdar li ser makîneyek kar were saz kirin, ne jî ne gengaz bû ku meriv laptopek kesane bikar bîne. Çareyek din xuya dike ku ew bikar bînin guhertoya malpera fermî, lê wek ku hûn dikarin texmîn bikin, ew jî tune bû. Ez tavilê vebijarka lêgerîna neynek nefermî derbas dikim (Ez ji ber sedemên diyar hêvî dikim).

Xwezî, Webogram projeyek çavkaniyek vekirî ye ku koda çavkaniyê tê de heye github nivîskarê wê (Ji bo ku gelek spas ji wî re!)
Sazkirin û destpêkirina xwe ne dijwar e, di heman demê de, di şert û mercên xebitandinê de di nav torgilokek bi gihandina astengkirî ya serverên Telegram de, hûn ê bêtir ji serfiraziyê bêhêvî bibin, ji ber ku guhertoya webê ji makîneya bikarhêner daxwazan ji serverên Telegram re dişîne.

Xwezî, ev rastkirinek pir hêsan (lê ne pir eşkere) ye. Ez dixwazim we hişyar bikim ku ez ne nivîskarê vê çareseriyê me. Min karî wê tê de bibînim liq, ku pirsgirêkek mîna ya min nîqaş kir. Çareserî ji hêla bikarhênerê github ve hatî pêşniyar kirin tecknojock, wê pir alîkariya min kir, lêbelê, ez bawer im ku ew dikare alîkariya kesek din bike, ji ber vê yekê min biryar da ku ez vê tutoriyê binivîsim.

Li jêr qutkirinê hûn ê gav-bi-gav sazkirina neynika Webogram-a xwe û sazkirina proxykirina daxwazên wê ji serverên Telegram re bi karanîna nginx bibînin.

Wek mînak, min Servera Ubuntu 18.04.3 ya nû hatî saz kirin û nûvekirî hilbijart.

Şaş Ev tutorial dê rêwerzên li ser sazkirina domainek di nginx de negire. Pêdivî ye ku hûn bi xwe vê yekê bikin. Tutorial texmîn dike ku we berê domainek bi ssl vesaz kiriye, û servera ku hûn plan dikin ku wê mîheng bikin bi xwe bigihîje serverên Telegram (bi her awayê ku hûn dixwazin)

Ka em bifikirin ku ip-ya vê serverê 10.23.0.3 e, û navê domainê mywebogram.localhost e.

Li ser bingeha van peymanan, ez ê nimûneyên mîhengan bidim. Ji bîr nekin ku nirxan li gorî xwe biguhezînin.

Ji bila dest bi dest pê dike:

Ji bo xebitandina Webogram, em hewceyê nodejs in. Bi xwerû, ger em wê ji depoyên Ubuntu saz bikin, em ê guhertoya 8.x nodejs bistînin. Em hewceyê 12.x:

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

Em cîhê ku dê Webograma me lê be hildibijêrin.

Mînakî, em wê di koka pelrêça malê de bi cîh bikin. Ji bo vê yekê, depoya fermî li servera me klon bikin:

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

Pêngava paşîn ev e ku hûn hemî girêdanên ku ji bo xebitandina serîlêdanê hewce ne saz bikin:

cd webogram && npm install

Ka em ceribandinek ceribandinê biceribînin. Ferman bimeşîne:

npm start

Piştî wê, em hewl didin ku wê di gerokê de vekin

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

Ger heya vê gavê we her tişt rast kiribe, dê rûpela destûrnameya Webogram vebe.

Naha divê em serîlêdanê mîheng bikin ku wekî karûbar were xebitandin. Ji bo vê yekê, bila pelê çêbikin

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

wê di her edîtorê de vekin û xuyangê jêrîn bidin wê (rêya xwe têkevin 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

Dûv re em fermanên jêrîn dimeşînin:

Serlêdana guhertinan

sudo systemctl daemon-reload

Autoun çalak bike:

sudo systemctl enable webogram.service

Ka em xizmetê dest pê bikin:

sudo systemctl start webogram.service

Piştî qedandina gavan, Webogram dê li porta 8000-ê peyda bibe.

Ji ber ku em ê bi nginx ve gihîştina Webogram-a xwe saz bikin, em ê porta 8000-ê ji bo daxwazên ji derve bigirin.

Em ji bo vê yekê karûbar udf bikar tînin (an jî rêbazek ji bo we rehet):

sudo ufw deny 8000

Ger hûn hîn jî biryar bidin ku hûn udf-ê bikar bînin, lê ew li ser serverê neçalak e, qaîdeyên din lê zêde bikin (da ku her tişt ji hev nekeve) û udf çalak bikin:

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

Dûv re, em dest bi guheztina veavakirina nginx bikin.

Wekî ku min li jor hişyar kir, tê texmîn kirin ku domainek bi ssl jixwe li ser servera we hatî mîheng kirin. Ez ê tenê bala we bikişînim ser tiştê ku dê hewce bike ku li pelê veavakirina domainê were zêdekirin da ku ew rast bixebite:


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

Tiştê ku em li konfigurasyona nginx zêde dikin:

  • Em cîhê root diguhezînin, ku dê ji porta 8000 re proxy bike, ku Webogram bersivê dide
  • Em bi karanîna bingehîn-auth cîhê root digirin. Ev pêngavek bi tenê sembolîk e ku em serlêdana me ji çavên çav û botan bigire. (Û her weha ji bo ku pirsgirêkên astengkirinê dûr bixin)
  • Komek cîhên bi proxy_path li ser servera Telegram-ê tam xalên dawiya me ne ku tê de em ê daxwazên xwe proxy bikin.

Di heman demê de, bila pelek çêbikin /etc/nginx/passwd.htpasswd;da ku nginx tiştek heye ku şîfreyên bikarhêner pê re kontrol bike.

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

Em mînaka xweya Webogram bi proxykirinê bi riya nginx bilind dikin

Nginx ji nû ve bidin destpêkirin:

sudo systemctl restart nginx

Niha Webogram dê tenê li ser peyda bibe mywebogram.localhost/app/index.html piştî têketin û şîfreya ku we dema çêkirina fermana htpasswd diyar kiriye têkevin.

Kêm maye: em ê guhertinên piçûk li projeyê bixwe bikin.

Pelê di edîtorê de vekin ~/webogram/app/js/lib/mtproto.js

Û destpêka wê bi forma jêrîn bînin:

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

Piştî vê yekê, hûn hewce ne ku rûpela serîlêdanê di gerokê de nûve bikin.

Konsolê geroka xwe vekin û li daxwazên torê yên serîlêdanê binêrin. Ger her tişt kar dike û daxwazên XHR diçin servera we, wê hingê her tişt rast tê kirin, û Webogram naha bi riya nginx ve tête kirin.

Em mînaka xweya Webogram bi proxykirinê bi riya nginx bilind dikin

Ez hêvî dikim ku ev tutorial ji bilî min ji kesek din re kêrhatî be.

Gelek spas ji bo her kesê ku heya dawiyê xwend.

Ger kesek dijwariyek hebe an min xeletiyek çêkir, ez ê kêfxweş bibim ku bersiv bidim û hewl bidim ku di şîroveyan an di PM-ê de alîkariya we bikim.

Source: www.habr.com

Add a comment