KĂ€ivitame oma Webogrami instantsi nginx-i kaudu.

Tere, Habr!

Hiljuti sattusin olukorda, kus tuli töötada ettevĂ”tte sisevĂ”rgus, millel oli piiratud juurdepÀÀs internetile, ja nagu te pealkirjast vĂ”ite aru saada — Telegram oli seal blokeeritud. Olen kindel, et see olukord on paljudele tuttav.

Ma suudan kĂŒll hakkama saada ilma sĂ”numirakendusteta, kuid just Telegram oli mul töö tegemiseks vajalik. Kliente tööarvutisse installida ei saanud, samuti ka isiklikku sĂŒlearvutit kasutada ei olnud vĂ”imalik. Veel ĂŒhe lahendusena tundus mĂ”eldav kasutada ametlikku veebiversiooni, kuid nagu te vĂ”ite arvata — see oli samuti kĂ€ttesaamatu. Alternatiivina mitteametliku peegli otsimine jĂ€i kohe vĂ€listamisele (loodan, et ilmselgetel pĂ”hjustel).

Õnneks on Webogram avatud lĂ€htekoodiga projekt, mille lĂ€htekood on kĂ€tte saadav github tema autorilt (suur tĂ€nu talle!)
Ise installimine ja kÀivitamine ei ole keeruline, kuid kui kasutate seda blokeeritud juurdepÀÀsuga Telegrami serveritele, siis pigem ootab teid pettumus kui edu, kuna veebiversioon saadab pÀringud Telegrami serveritele kasutaja masina kaudu.

Õnneks on see ĂŒsna lihtne (kuid mitte vĂ€ga ilmne) parandada. Tahan hoiatada, et ma ei ole selle lahenduse autor. Leidsin selle teemast, kus arutati probleemiga, mis oli sarnane minu omale. Lahendus, mille pakkus kasutaja github tecknojock, aitas mind vĂ€ga, kuid olen kindel, et see vĂ”ib kasu tuua ka kellelegi teisele, seetĂ”ttu otsustasin selle juhendi kirjutada.

Allpool ootab teid samm-sammuline juhend oma Webogrami peegli seadistamiseks ning selle pÀringute edastamiseks Telegrami serveritesse nginx'i abil.

NÀiteks valisin Àsja paigaldatud ja uuendatud Ubuntu Server 18.04.3.

TÀhtis: Selles juhendis ei ole juhiseid domeeni seadistamiseks nginx'is. See tuleb ise teha. Juhend eeldab, et teil on juba domeen koos ssl-iga seadistatud ning ka server, millel seadistust plaanitakse, pÀÀseb Telegrami serveritesse (kuidas iganes teile sobib).

Oletame, et selle serveri IP-aadress on 10.23.0.3, ning domeeninimi on mywebogram.localhost.

Tuginedes nendele tingimustele, toon esile konfiguratsioonide nĂ€ited. Ärge unustage muuta vÀÀrtusi oma omadeks.

Nii et, alustame:

Webogram'i kÀivitamiseks on meil vaja nodejs-i. Ubuntu repositooriumidest installimisel saame vaikimisi nodejs versiooni 8.x. Me vajame versiooni 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 Webogram asub.

NĂ€iteks paigutame selle kodukausta juure. Selleks kloonime ametliku repositooriumi oma serverisse:

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

JÀrgmine samm on installida kÔik sÔltuvused, mis on rakenduse kÀivitamiseks vajalikud:

cd webogram && npm install

Proovime teha testkÀivituse. KÀivitage jÀrgmine kÀsk:

npm start

PĂ€rast seda proovime avada brauseris

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

Kui olete selle hetkeks kÔik Ôigesti teinud, avaneb teiega Webogrami autoriseerimise leht.

NĂŒĂŒd peame seadistama rakenduse kĂ€itmise teenusena. Selleks loome faili

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

ava see mis tahes tekstiredaktoris ja anna sellele jÀrgmine vÀlimus (sisesta oma tee WorkDirectory-ni)

[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

PÀrast seda kÀivitage jÀrgmised kÀsud:

Rakendame muudatused

sudo systemctl daemon-reload

LĂŒlitame autostardi sisse:

sudo systemctl enable webogram.service

KĂ€ivitame teenuse:

sudo systemctl start webogram.service

PÀrast tehtud toiminguid on Webogram endiselt juurdepÀÀsetav pordil 8000.

Kuna seadistame meie Webogrami juurde pÀÀsu lÀbi nginx'i, sulgeme pordi 8000 vÀliste pÀringute jaoks.

Kasutame selleks utiliiti udf (vÔi mÔnda teile sobivat meetodit):

sudo ufw deny 8000

Juhul, kui otsustate kasutada udf'i, kuid see on serveris vĂ€lja lĂŒlitatud, lisame veel reegleid (et kĂ”ik ei puruneks) ja lĂŒlitame udf'i sisse:

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

JĂ€rgmisena liigume nginx'i konfiguratsiooni muutmise juurde.

Nagu ma eelnevalt hoiatasin, eeldatakse, et teie serveris on juba domeen SSL-iga seadistatud. JÀtan teile vaid meelde, et peate lisama domeeni konfiguratsioonifaili, 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 nginx konfi juurde lisame:

  • Muudame juurseisu, mis edastab pĂ€ringud porti 8000, millele Webogram vastab.
  • Sulgeme juurseisu basic-authiga. See on puhtalt sĂŒmboolne samm, et kaitsta meie rakendust vÔÔraste silmade ja botide eest. (Ning et vĂ€ltida blokeerimisi.)
  • Koputame segu koos proxy_pathiga Telegrami serveritesse — need on just meie lĂ”pp-punktid, mille kaudu me oma pĂ€ringud edastame.

Samuti loome faili /etc/nginx/passwd.htpasswd;, et nginx-il oleks millegi jÀrgi vÔrrelda kasutajate paroole.

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

KĂ€ivitame oma Webogrami instantsi nginx-i kaudu.

KĂ€ivitame nginx uuesti:

sudo systemctl restart nginx

NĂŒĂŒd on Webogram saadaval ainult aadressil mywebogram.localhost/app/index.html pĂ€rast seda, kui olete sisestanud kasutajanime ja parooli, mille te mÀÀrasite htpasswd kĂ€su loomisel.

JÀÀnud on veel vÀikesed muudatused projekti endasse.

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

ja muutke selle algust jÀrgmise nÀo jÀrgi:

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

PÀrast seda tuleb vÀrskendada rakenduse lehte brauseris.

Avage brauseri konsool ja vaadake rakenduse vĂ”rgu pĂ€ringuid. Kui kĂ”ik töötab ja XHR pĂ€ringud lĂ€hevad teie serverisse — siis on kĂ”ik Ă”igesti tehtud ja Webogram on nĂŒĂŒd nginx kaudu proxy.

KĂ€ivitame oma Webogrami instantsi nginx-i kaudu.

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

Suur tÀnu kÔigile, kes selle lÔpuni lugesid.

Kui kellelgi on raskusi vĂ”i ma olen teinud mingeid vigu — vastan hea meelega ja pĂŒĂŒan aidata kommentaarides vĂ”i isiklikult.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster