Aħna ngħollu l-istanza tal-Webogram tagħna bi proxy permezz ta 'nginx

Ħej Habr!

Riċentement sibt ruħi f'sitwazzjoni li fiha kien meħtieġ li taħdem ġewwa netwerk korporattiv b'aċċess mhux komplut għall-Internet u, kif tistgħu taħsbu mit-titlu, Telegram kien imblukkat fih. Jiena ċert li din is-sitwazzjoni hija familjari għal ħafna.

Kapaċi nagħmel mingħajr messaġġiera instantanja, iżda kien Telegram li kelli bżonn għax-xogħol. Ma kienx possibbli li jiġi installat il-klijent fuq magna tax-xogħol, u lanqas ma kien possibbli li tuża laptop personali. Soluzzjoni oħra tidher li hija li tużaha verżjoni uffiċjali tal-web, iżda kif tistgħu taħsbu, ma kinitx disponibbli wkoll. Immedjatament inħassar l-għażla li nfittex mera mhux uffiċjali (nittama għal raġunijiet ovvji).

Fortunatament, Webogram huwa proġett ta 'sors miftuħ li l-kodiċi tas-sors tiegħu huwa disponibbli fih GitHub l-awtur tagħha (Għalih ħafna grazzi lilu!)
L-installazzjoni u t-tnedija nnifisha mhix diffiċli, madankollu, f'kundizzjonijiet ta 'tħaddim f'netwerk b'aċċess imblukkat għal servers ta' Telegram, tkun aktar probabbli li tkun diżappuntat milli tirnexxi, peress li l-verżjoni tal-web tibgħat talbiet lil servers ta 'Telegram mill-magna tal-utent.

Fortunatament, din hija soluzzjoni pjuttost sempliċi (iżda mhux ovvja ħafna). Nixtieq inwisskom li m'iniex l-awtur ta' din is-soluzzjoni. Irnexxieli nsibha ġewwa fergħa, li ddiskutiet problema simili għal tiegħi. Soluzzjoni ssuġġerita mill-utent github teknojock, għenitni ħafna, madankollu, jien ċert li jista 'jgħin lil xi ħadd ieħor, għalhekk iddeċidejt li nikteb dan it-tutorja.

Taħt il-qatgħa ssib setup pass pass tal-mera tal-Webogram tiegħek u s-setup tal-prokurazzjoni tat-talbiet tagħha lil servers Telegram bl-użu ta 'nginx.

Bħala eżempju, għażilt Ubuntu Server 18.04.3 li għadu kif ġie installat u aġġornat.

Twissija: Dan it-tutorja mhux se jinkludi struzzjonijiet dwar it-twaqqif ta 'dominju f'nginx. Għandek bżonn tagħmel dan lilek innifsek. It-tutorja jassumi li diġà kkonfigurajt dominju b'ssl, u li s-server innifsu li fuqu qed tippjana li tikkonfigurah għandu aċċess għas-servers tat-Telegram (bi kwalunkwe mod li tixtieq)

Ejja nassumu li l-ip ta' dan is-server huwa 10.23.0.3, u l-isem tad-dominju huwa mywebogram.localhost

Ibbażat fuq dawn il-konvenzjonijiet, se nagħti eżempji ta 'konfigurazzjonijiet. Tinsiex tibdel il-valuri għal tiegħek.

Mela ejja nibdew:

Biex tmexxi Webogram, għandna bżonn nodejs. B'mod awtomatiku, jekk ninstallawha mir-repożitorji ta 'Ubuntu, se nġibu nodejs verżjoni 8.x. Għandna bżonn 12.x:

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

Aħna nagħżlu l-post fejn se jkun ibbażat il-Webogram tagħna.

Per eżempju, ejja poġġiha fl-għerq tad-direttorju tad-dar. Biex tagħmel dan, kklona r-repożitorju uffiċjali fuq is-server tagħna:

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

Il-pass li jmiss huwa li tinstalla d-dipendenzi kollha meħtieġa biex titħaddem l-applikazzjoni:

cd webogram && npm install

Ejja nippruvaw test run. Mexxi l-kmand:

npm start

Wara dan, nippruvaw niftħuha fil-browser

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

Jekk sa dan il-punt għamilt kollox b'mod korrett, tinfetaħ il-paġna tal-awtorizzazzjoni tal-Webogram.

Issa rridu nikkonfiguraw l-applikazzjoni biex taħdem bħala servizz. Biex tagħmel dan, ejja noħolqu fajl

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

iftaħ fi kwalunkwe editur u agħtiha d-dehra li ġejja (daħħal it-triq tiegħek għal 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

Imbagħad inħaddmu l-kmandi li ġejjin:

L-applikazzjoni tal-bidliet

sudo systemctl daemon-reload

Ippermetti awtorun:

sudo systemctl enable webogram.service

Ejja nibdew is-servizz:

sudo systemctl start webogram.service

Wara li tlesti l-passi, Webogram se jkompli jkun disponibbli fuq il-port 8000.

Peress li se nkunu qed inwaqqfu aċċess għall-Webogram tagħna permezz ta 'nginx, se nagħlqu l-port 8000 għal talbiet minn barra.

Aħna nużaw l-utilità udf għal dan (jew kwalunkwe metodu konvenjenti għalik):

sudo ufw deny 8000

Fil-każ li xorta tiddeċiedi li tuża l-udf, iżda hija diżattivata fuq is-server, żid aktar regoli (sabiex kollox ma jinfirex) u ppermetti l-udf:

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

Sussegwentement, ejja nibdew nibdlu l-konfigurazzjoni nginx.

Kif wissajt hawn fuq, huwa preżunt li dominju b'ssl huwa diġà kkonfigurat fuq is-server tiegħek. Se niġbed l-attenzjoni tiegħek biss għal dak li jkun jeħtieġ li jiżdied mal-fajl tal-konfigurazzjoni tad-dominju biex dan jaħdem b'mod korrett:


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

Dak li nżidu mal-konfigurazzjoni nginx:

  • Aħna nibdlu l-post ta 'l-għerq, li se jitlob prokura lill-port 8000, li fuqu Webogram jirrispondi
  • Aħna nagħlqu l-post ta 'l-għerq billi tuża basic-auth. Dan huwa pass purament simboliku biex nagħlqu l-applikazzjoni tagħna minn għajnejn u bots. (U wkoll biex tevita problemi bl-imblukkar)
  • Mazz ta 'postijiet bi proxy_path fuq is-server tat-Telegram huma eżattament l-endpoints tagħna li permezz tagħhom aħna nipprokuraw it-talbiet tagħna

Ukoll, ejja noħolqu fajl /etc/nginx/passwd.htpasswd;sabiex nginx ikollu xi ħaġa biex jiċċekkja l-passwords tal-utent.

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

Aħna ngħollu l-istanza tal-Webogram tagħna bi proxy permezz ta 'nginx

Ibda mill-ġdid nginx:

sudo systemctl restart nginx

Issa Webogram se jkun disponibbli biss fuq mywebogram.localhost/app/index.html wara li ddaħħlu l-login u l-password li ddefinijt meta ħoloq il-kmand htpasswd.

Ftit fadal: se nagħmlu bidliet żgħar fil-proġett innifsu.

Iftaħ il-fajl f'editur ~/webogram/app/js/lib/mtproto.js

U ġib il-bidu tagħha għall-forma li ġejja:

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

Wara dan, jeħtieġ li jġedded il-paġna tal-applikazzjoni fil-browser.

Iftaħ il-console tal-browser tiegħek u ħares lejn it-talbiet tan-netwerk tal-applikazzjoni. Jekk kollox jaħdem u t-talbiet XHR imorru fuq is-server tiegħek, allura kollox isir b'mod korrett, u Webogram issa huwa proxy permezz ta 'nginx.

Aħna ngħollu l-istanza tal-Webogram tagħna bi proxy permezz ta 'nginx

Nittama li dan it-tutorja jkun utli għal xi ħadd ieħor minbarra lili.

Grazzi ħafna lil kull min qara sal-aħħar.

Jekk xi ħadd ikollu xi diffikultajiet jew għamilt xi ineżattezzi, inkun kuntent inwieġeb u nipprova ngħinkom fil-kummenti jew fil-PM.

Sors: www.habr.com

Żid kumment