Tunainua mfano wetu wa Webogram kwa kutumia seva mbadala kupitia nginx

Habari Habr!

Hivi majuzi nilijikuta katika hali ambayo ilikuwa ni lazima kufanya kazi ndani ya mtandao wa ushirika na ufikiaji usio kamili wa Mtandao na, kama unavyoweza kudhani kutoka kwa kichwa, Telegraph ilizuiwa ndani yake. Nina hakika kuwa hali hii inajulikana kwa wengi.

Ninaweza kufanya bila wajumbe wa papo hapo, lakini ilikuwa Telegramu ambayo nilihitaji kwa kazi. Haikuwezekana kufunga mteja kwenye mashine ya kazi, wala haikuwezekana kutumia kompyuta ya kibinafsi. Suluhisho lingine inaonekana kuwa kuitumia toleo rasmi la wavuti, lakini kama unavyoweza kukisia, haikupatikana pia. Mara moja ninavuka chaguo la kutafuta kioo kisicho rasmi (natumai kwa sababu dhahiri).

Kwa bahati nzuri, Webogram ni mradi wa chanzo huria ambao msimbo wake wa chanzo unapatikana github mwandishi wake (Ambayo shukrani nyingi kwake!)
Ufungaji na uzinduzi yenyewe sio ngumu, hata hivyo, katika hali ya uendeshaji ndani ya mtandao na ufikiaji uliozuiwa kwa seva za Telegraph, utakuwa na uwezekano mkubwa wa kukata tamaa kuliko kufanikiwa, kwani toleo la wavuti hutuma maombi kwa seva za Telegraph kutoka kwa mashine ya mtumiaji.

Kwa bahati nzuri, hii ni suluhisho rahisi (lakini sio dhahiri sana). Ningependa kukuonya kuwa mimi sio mwandishi wa suluhisho hili. Nilifanikiwa kuipata ndani tawi, ambayo ilijadili tatizo sawa na langu. Suluhisho lililopendekezwa na mtumiaji wa github tecknojock, ilinisaidia sana, hata hivyo, nina hakika kwamba inaweza kusaidia mtu mwingine, kwa hiyo niliamua kuandika mafunzo haya.

Chini ya kata hiyo utapata usanidi wa hatua kwa hatua wa kioo chako cha Webogram na usanidi wa kuwasilisha maombi yake kwa seva za Telegraph kwa kutumia nginx.

Kama mfano, nilichagua Ubuntu Server 18.04.3 iliyosanikishwa upya na kusasishwa.

Onyo: Mafunzo haya hayatajumuisha maagizo ya kusanidi kikoa katika nginx. Unahitaji kufanya hivi mwenyewe. Mafunzo yanachukulia kuwa tayari umesanidi kikoa na ssl, na kwamba seva yenyewe ambayo unapanga kusanidi ina ufikiaji wa seva za Telegraph (kwa njia yoyote unayopenda)

Hebu tuchukulie kuwa ip ya seva hii ni 10.23.0.3, na jina la kikoa ni mywebogram.localhost

Kulingana na mikataba hii, nitatoa mifano ya usanidi. Usisahau kubadilisha maadili kuwa yako mwenyewe.

Basi hebu tuanze:

Ili kuendesha Webogram, tunahitaji nodejs. Kwa chaguo-msingi, ikiwa tutaisakinisha kutoka kwa hazina za Ubuntu, tutapata nodejs toleo la 8.x. Tunahitaji 12.x:

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

Tunachagua mahali ambapo Webogram yetu itakuwa msingi.

Kwa mfano, wacha tuiweke kwenye mzizi wa saraka ya nyumbani. Ili kufanya hivyo, unganisha hazina rasmi kwa seva yetu:

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

Hatua inayofuata ni kusanikisha utegemezi wote unaohitajika kuendesha programu:

cd webogram && npm install

Wacha tujaribu kukimbia kwa jaribio. Endesha amri:

npm start

Baada ya hayo, tunajaribu kuifungua kwenye kivinjari

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

Ikiwa hadi wakati huu umefanya kila kitu kwa usahihi, ukurasa wa idhini ya Webogram utafunguliwa.

Sasa tunahitaji kusanidi programu ili kuendesha kama huduma. Ili kufanya hivyo, hebu tuunda faili

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

ifungue katika kihariri chochote na uipe mwonekano ufuatao (ingiza njia yako ya 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

Kisha tunaendesha amri zifuatazo:

Utekelezaji wa mabadiliko

sudo systemctl daemon-reload

Washa autorun:

sudo systemctl enable webogram.service

Wacha tuanze huduma:

sudo systemctl start webogram.service

Baada ya kukamilisha hatua, Webogram itaendelea kupatikana kwenye bandari 8000.

Kwa kuwa tutaweka mipangilio ya kufikia Webogram yetu kupitia nginx, tutafunga port 8000 kwa maombi kutoka nje.

Tunatumia matumizi ya udf kwa hili (au njia yoyote inayofaa kwako):

sudo ufw deny 8000

Iwapo bado utaamua kutumia udf, lakini imezimwa kwenye seva, ongeza sheria zaidi (ili kila kitu kisipunguke) na uwashe udf:

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

Ifuatayo, wacha tuanze kubadilisha usanidi wa nginx.

Kama nilivyoonya hapo juu, inadhaniwa kuwa kikoa kilicho na ssl tayari kimesanidiwa kwenye seva yako. Nitavutia tu kile kitakachohitaji kuongezwa kwenye faili ya usanidi wa kikoa ili ifanye kazi kwa usahihi:


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

Tunachoongeza kwenye usanidi wa nginx:

  • Tunabadilisha eneo la msingi, ambalo litatuma maombi ya seva mbadala kwa port 8000, ambayo Webogram hujibu
  • Tunafunga eneo la mizizi kwa kutumia msingi-auth. Hii ni hatua ya kiishara ya kufunga programu yetu kutoka kwa macho na roboti. (Na pia kuzuia shida na kuzuia)
  • Maeneo mengi yaliyo na proxy_path kwenye seva ya Telegramu ndiyo miisho yetu hasa ambayo tutawakilisha maombi yetu.

Pia, wacha tuunde faili /etc/nginx/passwd.htpasswd;ili nginx iwe na kitu cha kuangalia nywila za mtumiaji.

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

Tunainua mfano wetu wa Webogram kwa kutumia seva mbadala kupitia nginx

Anzisha tena nginx:

sudo systemctl restart nginx

Sasa Webogram itapatikana tu kwa mywebogram.localhost/app/index.html baada ya kuingia na nenosiri ulilofafanua wakati wa kuunda amri ya htpasswd imeingizwa.

Kuna kidogo kushoto: tutafanya mabadiliko madogo kwa mradi yenyewe.

Fungua faili katika kihariri ~/webogram/app/js/lib/mtproto.js

Na kuleta mwanzo wake kwa fomu ifuatayo:

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

Baada ya hayo, unahitaji kusasisha ukurasa wa programu kwenye kivinjari.

Fungua koni ya kivinjari chako na uangalie maombi ya mtandao ya programu. Ikiwa kila kitu kitafanya kazi na maombi ya XHR yanaenda kwa seva yako, basi kila kitu kinafanywa kwa usahihi, na Webogram sasa imeundwa kupitia nginx.

Tunainua mfano wetu wa Webogram kwa kutumia seva mbadala kupitia nginx

Natumai kuwa mafunzo haya yatakuwa na manufaa kwa mtu mwingine kando yangu.

Asante sana kwa wote waliosoma hadi mwisho.

Ikiwa mtu yeyote ana shida yoyote au nilifanya makosa yoyote, nitafurahi kujibu na kujaribu kukusaidia katika maoni au katika PM.

Chanzo: mapenzi.com

Kuongeza maoni