Gipataas namo ang among Webogram nga pananglitan sa proxying pinaagi sa nginx

Hoy Habr!

Bag-ohay lang nakit-an nako ang akong kaugalingon sa usa ka kahimtang diin kinahanglan nga magtrabaho sa sulod sa usa ka network sa korporasyon nga adunay dili kompleto nga pag-access sa Internet ug, ingon nga imong matag-an gikan sa titulo, ang Telegram gibabagan niini. Sigurado ako nga kini nga kahimtang pamilyar sa kadaghanan.

Mahimo nako nga wala’y mga instant messenger, apan kini ang Telegram nga akong gikinahanglan alang sa trabaho. Dili posible nga i-install ang kliyente sa usa ka makina sa trabaho, ni posible nga mogamit usa ka personal nga laptop. Ang laing solusyon daw mao ang paggamit niini opisyal nga bersyon sa web, apan ingon sa imong matag-an, dili usab kini magamit. Gitangtang dayon nako ang kapilian sa pagpangita alang sa usa ka dili opisyal nga salamin (Naglaum ako alang sa klaro nga mga hinungdan).

Suwerte, ang Webogram usa ka open source nga proyekto kansang source code anaa sa github ang tagsulat niini (Kay daghang salamat kaniya!)
Ang pag-instalar ug paglansad mismo dili lisud, bisan pa, sa mga kondisyon sa operasyon sa sulod sa usa ka network nga adunay gibabagan nga pag-access sa mga server sa Telegram, labi ka nga mahigawad kaysa malampuson, tungod kay ang bersyon sa web nagpadala mga hangyo sa mga server sa Telegram gikan sa makina sa gumagamit.

Suwerte, kini usa ka medyo yano (apan dili kaayo klaro) nga pag-ayo. Gusto nakong pasidan-an ka nga dili ako ang tagsulat niini nga solusyon. Nakapangita ko niini sanga, nga naghisgot ug problema nga susama sa akoa. Solusyon nga gisugyot sa github user tecknojock, nakatabang kaayo kini kanako, bisan pa, sigurado ako nga makatabang kini sa uban, mao nga nakahukom ko nga isulat kini nga panudlo.

Ubos sa pagputol makit-an nimo ang sunod-sunod nga pag-setup sa imong salamin sa Webogram ug pag-setup sa pag-proxy sa mga hangyo niini sa mga server sa Telegram gamit ang nginx.

Isip usa ka pananglitan, gipili nako ang bag-ong na-install ug gi-update nga Ubuntu Server 18.04.3.

Pasidaan: Kini nga panudlo dili maglakip sa mga panudlo sa pag-set up sa usa ka domain sa nginx. Kinahanglan nimo kining buhaton sa imong kaugalingon. Gihunahuna sa tutorial nga na-configure na nimo ang usa ka domain nga adunay ssl, ug nga ang server mismo diin plano nimo nga i-configure kini adunay access sa mga server sa Telegram (sa bisan unsang paagi nga gusto nimo)

Ibutang nato nga ang ip niini nga server kay 10.23.0.3, ug ang domain name kay mywebogram.localhost

Pinasukad niini nga mga kombensyon, maghatag ako mga pananglitan sa mga pag-configure. Ayaw kalimti ang pagbag-o sa mga kantidad sa imong kaugalingon.

Busa magsugod kita:

Aron makadagan ang Webogram, kinahanglan namon ang mga nodej. Sa kasagaran, kung atong i-install kini gikan sa mga repositoryo sa Ubuntu, makuha nato ang nodejs version 8.x. Kinahanglan namon ang 12.x:

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

Gipili namo ang dapit diin magbase ang among Webogram.

Pananglitan, ibutang nato kini sa gamut sa direktoryo sa balay. Aron mahimo kini, i-clone ang opisyal nga repository sa among server:

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

Ang sunod nga lakang mao ang pag-instalar sa tanan nga mga dependency nga gikinahanglan sa pagpadagan sa aplikasyon:

cd webogram && npm install

Suwayan ta ug test run. Pagdalagan ang sugo:

npm start

Pagkahuman niana, gisulayan namon nga ablihan kini sa browser

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

Kung hangtod sa kini nga punto nahimo nimo ang tanan nga husto, ang panid sa pagtugot sa Webogram maablihan.

Karon kinahanglan namon nga i-configure ang aplikasyon nga modagan ingon usa ka serbisyo. Aron mahimo kini, maghimo kita usa ka file

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

ablihi kini sa bisan unsang editor ug ihatag kini sa mosunod nga panagway (isulod ang imong agianan paingon sa 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

Dayon among gipadagan ang mosunod nga mga sugo:

Pagpadapat sa mga pagbag-o

sudo systemctl daemon-reload

I-enable ang autorun:

sudo systemctl enable webogram.service

Atong sugdan ang serbisyo:

sudo systemctl start webogram.service

Human makompleto ang mga lakang, ang Webogram magpadayon nga magamit sa port 8000.

Tungod kay mag-set up kami og access sa among Webogram pinaagi sa nginx, among isira ang port 8000 alang sa mga hangyo gikan sa gawas.

Gigamit namo ang udf utility para niini (o bisan unsang pamaagi nga sayon ​​para nimo):

sudo ufw deny 8000

Kung nakahukom ka pa nga mogamit sa udf, apan kini gi-disable sa server, pagdugang daghang mga lagda (aron ang tanan dili mabungkag) ug i-enable ang udf:

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

Sunod, magsugod kita sa pagbag-o sa configuration sa nginx.

Sama sa akong gipasidan-an sa ibabaw, gituohan nga ang usa ka domain nga adunay ssl na-configure na sa imong server. Ihatag ra nako ang imong atensyon kung unsa ang kinahanglan nga idugang sa file sa pag-configure sa domain aron kini molihok sa husto:


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

Unsa ang among idugang sa nginx config:

  • Gibag-o namon ang lokasyon sa gamut, nga maghangyo sa proxy sa port 8000, diin gitubag ang Webogram
  • Among gitak-opan ang nahimutangan sa gamut gamit ang basic-auth. Kini usa ka puro nga simbolikong lakang aron isira ang among aplikasyon gikan sa mga prying mata ug mga bot. (Ug usab aron malikayan ang mga problema sa pag-block)
  • Usa ka hugpong sa mga lokasyon nga adunay proxy_path sa Telegram server mao gyud ang among mga endpoint diin among i-proxy ang among mga hangyo

Usab, maghimo kita og file /etc/nginx/passwd.htpasswd;aron ang nginx adunay butang nga susihon ang mga password sa gumagamit.

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

Gipataas namo ang among Webogram nga pananglitan sa proxying pinaagi sa nginx

I-restart ang nginx:

sudo systemctl restart nginx

Karon ang Webogram magamit ra sa mywebogram.localhost/app/index.html human ang pag-login ug password nga imong gihubit sa paghimo sa htpasswd nga sugo gisulod.

Adunay gamay nga nahabilin: maghimo kami gamay nga pagbag-o sa proyekto mismo.

Ablihi ang file sa usa ka editor ~/webogram/app/js/lib/mtproto.js

Ug dad-a ang sinugdanan niini sa mosunod nga porma:

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

Pagkahuman niini, kinahanglan nimo nga i-refresh ang panid sa aplikasyon sa browser.

Ablihi ang imong browser console ug tan-awa ang mga hangyo sa network sa aplikasyon. Kung ang tanan molihok ug ang mga hangyo sa XHR moadto sa imong server, nan ang tanan nahimo sa husto, ug ang Webogram karon giproxy pinaagi sa nginx.

Gipataas namo ang among Webogram nga pananglitan sa proxying pinaagi sa nginx

Nanghinaut ko nga kini nga panudlo mahimong mapuslanon sa uban gawas kanako.

Daghang salamat sa tanan nga nagbasa hangtod sa katapusan.

Kung adunay bisan kinsa nga adunay bisan unsang mga kalisud o nakahimo ako bisan unsang mga sayup, malipay ako nga motubag ug mosulay sa pagtabang kanimo sa mga komento o sa PM.

Source: www.habr.com

Idugang sa usa ka comment