Gure Webogram-en instantzia nginx bidez proxyarekin planteatzen dugu

Aupa Habr!

Duela gutxi sare korporatibo baten barruan lan egitea beharrezkoa zen egoera batean aurkitu nintzen, Interneterako sarbide osatu gabea eta, izenburutik igarri dezakezun bezala, Telegram bertan blokeatuta zegoen. Ziur nago askorentzat ezaguna dela egoera hau.

Berehalako mezularirik gabe egin dezaket, baina Telegram zen lanerako behar nuena. Ezin zen bezeroa laneko makina batean instalatu, ezta ordenagailu eramangarri pertsonal bat erabili ere. Badirudi beste irtenbide bat erabiltzea dela web bertsio ofiziala, baina asma dezakezunez, ez zegoen erabilgarri ere. Berehala ezabatzen dut ispilu ez-ofizial bat bilatzeko aukera (ageriko arrazoiengatik espero dut).

Zorionez, Webogram iturburu-kodea eskuragarri dagoen kode irekiko proiektu bat da GitHub bere egilea (horregatik eskerrik asko berari!)
Instalazioa eta abiaraztea bera ez da zaila, hala ere, Telegram zerbitzarietarako sarbidea blokeatuta dagoen sare baten barruan funtzionatzeko baldintzetan, arrakasta baino etsita egotea litekeena da, web bertsioak Telegram zerbitzarietara eskaerak bidaltzen baititu erabiltzailearen makinatik.

Zorionez, hau konponketa nahiko sinplea da (baina ez oso agerikoa). Konponbide honen egilea ez naizela ohartarazi nahi dizut. barruan aurkitzea lortu nuen adarra, nire antzeko arazo bat eztabaidatzen zuena. Github erabiltzaileak iradokitako irtenbidea tecknojock, asko lagundu zidan, hala ere, ziur nago beste norbaiti lagundu diezaiokeela, horregatik tutorial hau idaztea erabaki nuen.

Ebakiaren azpian zure Webogram ispiluaren pausoz pauso konfigurazioa eta bere eskaerak Telegram zerbitzarietara proxy nginx erabiliz konfiguratzea aurkituko duzu.

Adibide gisa, instalatu eta eguneratu berria den Ubuntu Server 18.04.3 aukeratu nuen.

Abisua: Tutorial honek ez ditu nginx-en domeinu bat konfiguratzeko argibideak jasoko. Zuk zeuk egin behar duzu hau. Tutorialak domeinu bat dagoeneko ssl-rekin konfiguratu duzula suposatzen du, eta konfiguratu nahi duzun zerbitzariak berak Telegram zerbitzarietarako sarbidea duela (nahi duzun moduan)

Demagun zerbitzari honen ip-a 10.23.0.3 dela eta domeinu-izena mywebogram.localhost dela.

Konbentzio horietan oinarrituta, konfigurazioen adibideak emango ditut. Ez ahaztu zure balioak aldatzea.

Beraz, has gaitezen:

Webogram exekutatzeko, nodejs behar dugu. Lehenespenez, Ubuntu biltegietatik instalatzen badugu, nodejs 8.x bertsioa lortuko dugu. 12.x behar dugu:

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

Gure Webograma oinarrituko den lekua aukeratzen dugu.

Adibidez, jar dezagun hasierako direktorioaren erroan. Horretarako, klonatu biltegi ofiziala gure zerbitzarian:

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

Hurrengo urratsa aplikazioa exekutatzeko beharrezkoak diren mendekotasun guztiak instalatzea da:

cd webogram && npm install

Proba dezagun proba bat. Exekutatu komandoa:

npm start

Horren ostean, arakatzailean irekitzen saiatzen gara

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

Orain arte dena behar bezala egin baduzu, Webogram baimen-orria irekiko da.

Orain aplikazioa zerbitzu gisa exekutatzeko konfiguratu behar dugu. Horretarako, sortu dezagun fitxategi bat

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

ireki ezazu edozein editoreetan eta eman itxura hau (sartu zure WorkDirectoryrako bidea)

[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

Ondoren, komando hauek exekutatuko ditugu:

Aldaketak aplikatzea

sudo systemctl daemon-reload

Gaitu autorun:

sudo systemctl enable webogram.service

Hasi gaitezen zerbitzua:

sudo systemctl start webogram.service

Urratsak amaitu ondoren, Webogram 8000 atakan egongo da erabilgarri.

Gure Webogramerako sarbidea nginx bidez konfiguratuko dugunez, 8000 ataka itxiko dugu kanpotik datozen eskaeretarako.

Udf utilitatea erabiltzen dugu horretarako (edo zuretzat komeni den edozein metodo):

sudo ufw deny 8000

Oraindik udf erabiltzea erabakitzen baduzu, baina zerbitzarian desgaituta badago, gehitu arau gehiago (dena apurtu ez dadin) eta gaitu udf:

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

Ondoren, has gaitezen nginx konfigurazioa aldatzen.

Goian ohartarazi dudan bezala, suposatzen da ssl duen domeinu bat dagoeneko konfiguratuta dagoela zure zerbitzarian. Domeinuaren konfigurazio fitxategiari behar bezala funtziona dezan gehitu behar denari bakarrik emango dizut arreta:


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

Zer gehitzen diogu nginx konfigurazioari:

  • Erro-kokapena aldatzen dugu, proxy-eskaerak 8000 atakan jasoko dituena, eta Webogramek erantzuten dio
  • Erroko kokapena ixten dugu basic-auth erabiliz. Hau urrats sinboliko hutsa da gure aplikazioa begi eta robotetatik ixteko. (Eta blokeatzeko arazoak saihesteko ere)
  • Telegram zerbitzarian proxy_path duten kokapen mordo bat gure amaierako puntuak dira, eta horien bidez gure eskaerak proxy egingo ditugu.

Gainera, sortu dezagun fitxategi bat /etc/nginx/passwd.htpasswd;beraz, nginx-ek erabiltzaileen pasahitzak egiaztatzeko zerbait izan dezan.

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

Gure Webogram-en instantzia nginx bidez proxyarekin planteatzen dugu

Berrabiarazi nginx:

sudo systemctl restart nginx

Orain Webogram helbidean bakarrik egongo da eskuragarri mywebogram.localhost/app/index.html htpasswd komandoa sortzean definitutako saio-hasiera eta pasahitza sartu ondoren.

Gutxi falta da: aldaketa txikiak egingo ditugu proiektuan bertan.

Ireki fitxategia editore batean ~/webogram/app/js/lib/mtproto.js

Eta ekarri bere hasiera forma honetara:

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

Horren ondoren, aplikazioaren orria freskatu behar duzu arakatzailean.

Ireki arakatzailearen kontsola eta begiratu aplikazioaren sareko eskaerak. Dena funtzionatzen badu eta XHR eskaerak zure zerbitzarira joaten badira, dena behar bezala egiten da eta Webogram orain nginx bidez proxy egiten da.

Gure Webogram-en instantzia nginx bidez proxyarekin planteatzen dugu

Espero dut tutorial hau niz gain beste norbaitentzat erabilgarria izatea.

Mila esker amaiera arte irakurri duzuen guztioi.

Norbaitek zailtasunik badu edo zehaztasunik egin badut, pozik erantzungo dizut eta iruzkinetan edo PM-n laguntzen saiatuko naiz.

Iturria: www.habr.com

Gehitu iruzkin berria