Bidh sinn a’ togail ar eisimpleir Webogram le neach-ionaid tro nginx

Hi Habr!

O chionn ghoirid lorg mi mi fhìn ann an suidheachadh far an robh e riatanach a bhith ag obair taobh a-staigh lìonra corporra le ruigsinneachd neo-choileanta air an eadar-lìn agus, mar a shaoileadh tu bhon tiotal, chaidh Telegram a bhacadh ann. Tha mi cinnteach gu bheil an suidheachadh seo eòlach air mòran.

Is urrainn dhomh a dhèanamh às aonais teachdairean sa bhad, ach b’ e Telegram a bha a dhìth orm airson obair. Cha robh e comasach an neach-dèiligidh a chuir a-steach air inneal-obrach, agus cha robh e comasach laptop pearsanta a chleachdadh. Tha e coltach gur e fuasgladh eile a bhith ga chleachdadh làrach-lìn oifigeil version, ach mar a shaoileadh tu, cha robh e ri fhaighinn cuideachd. Bidh mi a 'dol thairis air an roghainn a bhith a' lorg sgàthan neo-oifigeil (tha mi an dòchas airson adhbharan follaiseach).

Gu fortanach, is e pròiseact le còd fosgailte a th’ ann an Webogram aig a bheil còd stòr ri fhaighinn ann an GitHub an t-ùghdar aige (Airson mòran taing dha!)
Chan eil an stàladh agus an cur air bhog fhèin duilich, ge-tà, ann an suidheachaidhean obrach taobh a-staigh lìonra le ruigsinneachd dùinte air frithealaichean Telegram, bidh thu nas dualtaiche a bhith tàmailteach na soirbheachail, leis gu bheil an dreach lìn a’ cur iarrtasan gu frithealaichean Telegram bho inneal an neach-cleachdaidh.

Gu fortanach, is e fuasgladh gu math sìmplidh a tha seo (ach chan eil e gu math follaiseach). Bu mhath leam rabhadh a thoirt dhut nach e mise ùghdar an fhuasglaidh seo. Chaidh agam air a lorg a-staigh meur, a bheachdaich air duilgheadas coltach riumsa. Fuasgladh air a mholadh le neach-cleachdaidh github tecknojock, chuidich e mi gu mòr, ge-tà, tha mi cinnteach gun cuidich e cuideigin eile, agus mar sin chuir mi romhpa an oideachadh seo a sgrìobhadh.

Fon gearradh gheibh thu suidheachadh ceum air cheum den sgàthan Webogram agad agus suidheachadh neach-ionaid a bhith a’ cur an cuid iarrtasan gu frithealaichean Telegram a’ cleachdadh nginx.

Mar eisimpleir, thagh mi Ubuntu Server 18.04.3 a chaidh a chuir a-steach às ùr agus ùrachadh.

Rabhadh: Cha bhith an oideachadh seo a’ toirt a-steach stiùireadh mu bhith a’ stèidheachadh àrainn ann an nginx. Feumaidh tu seo a dhèanamh leat fhèin. Tha an oideachadh a’ gabhail ris gu bheil thu mu thràth air àrainn a rèiteachadh le ssl, agus gu bheil cothrom aig an fhrithealaiche fhèin air a bheil thu an dùil a rèiteachadh air na frithealaichean Telegram (ann an dòigh sam bith a thogras tu)

Gabhaidh sinn ris gur e ip an fhrithealaiche seo 10.23.0.3, agus is e mywebogram.localhost an t-ainm fearainn

Stèidhichte air na gnàthasan sin, bheir mi eisimpleirean de rèiteachaidhean. Na dì-chuimhnich na luachan atharrachadh gu do chuid fhèin.

Mar sin, tòisichidh sinn:

Gus Webogram a ruith, feumaidh sinn nodejs. Gu gnàthach, ma stàlaicheas sinn e bho stòran Ubuntu, gheibh sinn nodejs dreach 8.x. Feumaidh sinn 12.x:

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

Bidh sinn a’ taghadh an àite far am bi ar Webogram stèidhichte.

Mar eisimpleir, leig dhuinn a chuir ann am freumh an eòlaire dachaigh. Gus seo a dhèanamh, clone an stòr oifigeil don t-seirbheisiche againn:

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

Is e an ath cheum na h-eisimeileachd gu lèir a stàladh gus an tagradh a ruith:

cd webogram && npm install

Feuch sinn ruith deuchainn. Ruith an òrdugh:

npm start

Às deidh sin, feuchaidh sinn ri fhosgladh sa bhrobhsair

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

Ma tha thu air a h-uile càil a dhèanamh ceart gu ruige seo, fosglaidh duilleag cead Webogram.

A-nis feumaidh sinn an aplacaid a rèiteachadh gus a ruith mar sheirbheis. Gus seo a dhèanamh, cruthaichidh sinn faidhle

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

fosgail e ann an deasaiche sam bith agus thoir an sealladh a leanas dha (cuir a-steach do shlighe gu 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

An uairsin ruithidh sinn na h-òrdughan a leanas:

A 'cur an gnìomh atharrachaidhean

sudo systemctl daemon-reload

Dèan comas air autorun:

sudo systemctl enable webogram.service

Feuch an tòisich sinn air an t-seirbheis:

sudo systemctl start webogram.service

Às deidh na ceumannan a chrìochnachadh, bidh Webogram fhathast ri fhaighinn air port 8000.

Leis gum bi sinn a’ stèidheachadh ruigsinneachd don Webogram againn tro nginx, dùinidh sinn port 8000 airson iarrtasan bhon taobh a-muigh.

Bidh sinn a’ cleachdadh goireas udf airson seo (no dòigh sam bith a tha iomchaidh dhut):

sudo ufw deny 8000

Ma cho-dhùnas tu fhathast udf a chleachdadh, ach gu bheil e ciorramach air an fhrithealaiche, cuir barrachd riaghailtean ris (gus nach tuit a h-uile càil às a chèile) agus leig le udf:

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

An ath rud, tòisichidh sinn ag atharrachadh rèiteachadh nginx.

Mar a thug mi rabhadh gu h-àrd, thathas a’ gabhail ris gu bheil àrainn le ssl air a rèiteachadh mu thràth air an t-seirbheisiche agad. Cha bhith mi a’ tarraing d’ aire ach gu na dh’ fheumar a chur ris an fhaidhle rèiteachaidh fearainn gus an obraich e gu ceart:


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

Na chuireas sinn ris an config nginx:

  • Bidh sinn ag atharrachadh an àite freumh, a nì iarrtasan neach-ionaid gu port 8000, air am freagair Webogram
  • Bidh sinn a’ dùnadh an àite freumh a’ cleachdadh basic-auth. Is e ceum samhlachail a tha seo gus an tagradh againn a dhùnadh bho shùilean eagallach agus bho bhotan. (Agus cuideachd gus duilgheadasan le bacadh a sheachnadh)
  • Tha dòrlach de dh’ àiteachan le proxy_path air frithealaiche Telegram dìreach mar na puingean crìochnachaidh againn tro am bi sinn a’ cur ar n-iarrtasan an aghaidh

Cuideachd, cruthaichidh sinn faidhle /etc/nginx/passwd.htpasswd;gus am bi rudeigin aig nginx airson faclan-faire luchd-cleachdaidh a sgrùdadh.

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

Bidh sinn a’ togail ar eisimpleir Webogram le neach-ionaid tro nginx

Ath-thòisich nginx:

sudo systemctl restart nginx

A-nis cha bhi Webogram ri fhaighinn ach aig mywebogram.localhost/app/index.html às deidh an logadh a-steach agus am facal-faire a mhìnich thu nuair a chruthaich thu an àithne htpasswd a chuir a-steach.

Chan eil mòran air fhàgail: nì sinn atharrachaidhean beaga air a’ phròiseact fhèin.

Fosgail am faidhle ann an deasaiche ~/webogram/app/js/lib/mtproto.js

Agus thoir a thoiseach don fhoirm a leanas:

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

Às deidh seo, feumaidh tu duilleag an tagraidh sa bhrobhsair ùrachadh.

Fosgail tòcan do bhrobhsair agus thoir sùil air iarrtasan lìonra an aplacaid. Ma dh’ obraicheas a h-uile càil agus gu bheil iarrtasan XHR a’ dol chun t-seirbheisiche agad, thèid a h-uile càil a dhèanamh ceart, agus tha Webogram a-nis air a chuir a-steach tro nginx.

Bidh sinn a’ togail ar eisimpleir Webogram le neach-ionaid tro nginx

Tha mi an dòchas gum bi an oideachadh seo feumail do chuideigin eile a bharrachd orm.

Mòran taing dhan a h-uile duine a leugh gu deireadh.

Ma tha duilgheadas sam bith aig duine no ma rinn mi mearachd sam bith, bidh mi toilichte freagairt agus feuchainn ri do chuideachadh anns na beachdan no ann am PM.

Source: www.habr.com

Cuir beachd ann