Manangana ny ohatra Webogram izahay miaraka amin'ny proxy amin'ny alàlan'ny nginx

Hey Habr!

Vao haingana aho no nahita ny tenako tao anatin'ny toe-javatra iray izay nilaina ny niasa tao anatin'ny tambajotran'orinasa izay tsy feno ny fidirana amin'ny Internet ary, araka ny azonao vinavina amin'ny lohateny, Telegram dia voasakana tao. Azoko antoka fa fantatry ny maro izany toe-javatra izany.

Afaka manao tsy misy iraka avy hatrany aho, fa Telegram no nilaiko tamin'ny asa. Tsy azo atao ny mametraka ny mpanjifa amin'ny milina fiasana, ary tsy azo atao koa ny mampiasa solosaina finday manokana. Vahaolana iray hafa toa ny fampiasana azy dikan-tranonkala ofisialy, saingy araka ny azonao eritreretina dia tsy nisy ihany koa. Avy hatrany aho dia manilika ny safidy hikaroka fitaratra tsy ofisialy (manantena aho fa misy antony mazava).

Soa ihany fa Webogram dia tetikasa open source izay misy ny code source github ny mpanoratra azy (izay isaorana be dia be ho azy!)
Ny fametrahana sy ny fandefasana ny tenany dia tsy sarotra, na izany aza, amin'ny toe-javatra miasa ao anatin'ny tambajotra misy fidirana amin'ireo mpizara Telegram voasakana, dia ho diso fanantenana kokoa ianao noho ny fahombiazana, satria ny dikan-tranonkala dia mandefa fangatahana amin'ny mpizara Telegram avy amin'ny masinin'ny mpampiasa.

Soa ihany, ity dia fanamboarana tsotra (fa tsy dia mazava loatra). Mampitandrina anareo aho fa tsy izaho no namorona ity vahaolana ity. Nahavita nahita izany aho SAMPANA, izay niresaka olana mitovy amin'ny ahy. Vahaolana natolotry ny mpampiasa github tecknojock, nanampy ahy betsaka izany, na izany aza, azoko antoka fa afaka manampy olon-kafa izany, ka nanapa-kevitra ny hanoratra ity lesona ity aho.

Eo ambanin'ny fanapahana dia ho hitanao ny fametrahana tsikelikely ny fitaratra Webogram anao sy ny fametrahana proxy ny fangatahany amin'ny mpizara Telegram mampiasa nginx.

Ohatra, nisafidy Ubuntu Server 18.04.3 vao tafapetraka sy nohavaozina aho.

fampitandremana: Ity lesona ity dia tsy hampiditra torolàlana momba ny fametrahana sehatra amin'ny nginx. Mila manao izany ianao. Ny lesona dia mihevitra fa efa nanamboatra sehatra misy ssl ianao, ary ny mpizara izay kasainao hamboarina azy dia afaka miditra amin'ny mpizara Telegram (amin'ny fomba rehetra tianao)

Aoka hatao hoe 10.23.0.3 ny ip an'ity mpizara ity, ary ny anaran'ny sehatra dia mywebogram.localhost

Mifototra amin'ireo fifanarahana ireo, hanome ohatra momba ny fanamafisana aho. Aza adino ny manova ny soatoavina ho anao.

Andao àry hanomboka:

Mba hampandehanana Webogram dia mila nodejs. Amin'ny alàlan'ny default, raha mametraka izany avy amin'ny tranokala Ubuntu isika dia hahazo nodejs version 8.x. Mila 12.x izahay:

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

Mifidy ny toerana hiorenan'ny Webogramy izahay.

Ohatra, andao apetraka ao amin'ny fototry ny lahatahiry an-trano. Mba hanaovana izany, clone ny tahiry ofisialy amin'ny mpizara:

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

Ny dingana manaraka dia ny fametrahana ny fiankinana rehetra ilaina amin'ny fampandehanana ny fampiharana:

cd webogram && npm install

Andeha isika hanandrana andrana. Alefaso ny baiko:

npm start

Aorian'izay dia miezaka manokatra izany amin'ny navigateur izahay

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

Raha toa ka vitanao araka ny tokony ho izy ny zava-drehetra, dia hisokatra ny pejy fanomezan-dàlana Webogram.

Amin'izao fotoana izao dia mila manitsy ny fampiharana isika mba hihazakazaka ho serivisy. Mba hanaovana izany, andao hamorona rakitra

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

sokafy amin'ny tonian-dahatsoratra rehetra ary omeo ity endrika manaraka ity (ampidiro ny lalanao mankany amin'ny 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

Avy eo dia manao ireto baiko manaraka ireto izahay:

Mampihatra ny fanovana

sudo systemctl daemon-reload

Alefaso ny autorun:

sudo systemctl enable webogram.service

Andao hanomboka ny serivisy:

sudo systemctl start webogram.service

Rehefa vita ny dingana dia mbola ho hita ao amin'ny seranan-tsambo 8000 ny Webogram.

Koa satria hametraka ny fidirana amin'ny Webogram amin'ny alàlan'ny nginx izahay, dia hanidy ny seranan-tsambo 8000 izahay ho an'ny fangatahana avy any ivelany.

Mampiasa ny udf utility izahay amin'izany (na fomba mety aminao):

sudo ufw deny 8000

Raha toa ka mbola manapa-kevitra ny hampiasa udf ianao, nefa kilemaina amin'ny mpizara, ampio fitsipika bebe kokoa (mba tsy hikorontana ny zava-drehetra) ary avelao ny udf:

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

Manaraka, andao hanomboka hanova ny konfigurasi nginx.

Araka ny efa nampitandremako etsy ambony dia heverina fa efa misy domaine misy ssl efa namboarina ao amin'ny servero. Hisarika ny sainao fotsiny amin'izay tokony hampidirina ao amin'ny fisie fandrindrana sehatra aho mba hahafahany miasa tsara:


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

Inona no ampianay amin'ny config nginx:

  • Ovainay ny toerana fakany, izay hangataka proxy amin'ny seranan-tsambo 8000, izay mamaly ny Webogram
  • Manakatona ny toerana misy ny faka amin'ny fampiasana basic-auth isika. Dingana an'ohatra tsotra izao hanakatona ny fampiharanay amin'ny maso sy bots. (Ary koa mba hisorohana ny olana amin'ny fanakanana)
  • Betsaka ny toerana misy proxy_path ao amin'ny lohamilina Telegram no tena faran'izay ahatongavantsika amin'ny fangatahanay

Andeha koa hamorona rakitra /etc/nginx/passwd.htpasswd;mba manana zavatra hijerena ny tenimiafina mpampiasa ny nginx.

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

Manangana ny ohatra Webogram izahay miaraka amin'ny proxy amin'ny alàlan'ny nginx

Avereno indray ny nginx:

sudo systemctl restart nginx

Amin'izao fotoana izao dia tsy misy afa-tsy amin'ny Webogram mywebogram.localhost/app/index.html aorian'ny fidirana sy ny tenimiafina izay nofaritanao tamin'ny famoronana ny baiko htpasswd dia ampidirina.

Kely sisa tavela: hanao fanovana kely amin'ny tetikasa mihitsy izahay.

Sokafy amin'ny tonian-dahatsoratra ny rakitra ~/webogram/app/js/lib/mtproto.js

Ary ento ny fiandohany amin'ny endrika manaraka:

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

Aorian'izany dia mila manavao ny pejy fampiharana amin'ny navigateur ianao.

Sokafy ny console browser-nao ary jereo ny fangatahan'ny tambajotran'ny fampiharana. Raha mandeha ny zava-drehetra ary mankany amin'ny mpizaranao ny fangatahana XHR, dia vita tsara ny zava-drehetra, ary ny Webogram dia alefa amin'ny alàlan'ny nginx.

Manangana ny ohatra Webogram izahay miaraka amin'ny proxy amin'ny alàlan'ny nginx

Manantena aho fa hahasoa olon-kafa ankoatra ahy ity fampianarana ity.

Misaotra betsaka ho an'izay mamaky hatramin'ny farany.

Raha misy manana fahasahiranana na misy tsy mety nataoko dia faly aho hamaly sy hiezaka hanampy anao amin'ny fanehoan-kevitra na amin'ny PM.

Source: www.habr.com

Add a comment