Ardaímid ár sampla Webogram le seachfhreastalaí trí nginx

Hey Habr!

Le déanaí fuair mé mé féin i gcás ina raibh sé riachtanach oibriú taobh istigh de líonra corparáideach le rochtain neamhiomlán ar an Idirlíon agus, mar is féidir leat buille faoi thuairim ón teideal, cuireadh bac ar Telegram ann. Tá mé cinnte go bhfuil an scéal seo eolach ag go leor.

Is féidir liom a dhéanamh gan teachtairí meandracha, ach ba é Telegram a bhí ag teastáil uaim don obair. Níorbh fhéidir an cliant a shuiteáil ar mheaisín oibre, ná níorbh fhéidir ríomhaire glúine pearsanta a úsáid. Is cosúil gur réiteach eile é a úsáid web leagan oifigiúil, ach mar is féidir leat buille faoi thuairim, ní raibh sé ar fáil freisin. Déanaim trasna láithreach ar an rogha cuardach a dhéanamh ar scáthán neamhoifigiúil (tá súil agam ar chúiseanna soiléire).

Ar ámharaí an tsaoil, is tionscadal foinse oscailte é Webogram a bhfuil a cód foinse ar fáil i github a údar (a bhuíochas sin dó!)
Níl an tsuiteáil agus an seoladh féin deacair, áfach, i gcoinníollacha oibriúcháin laistigh de líonra le rochtain bhac ar fhreastalaithe Telegram, is mó an seans go mbeidh díomá ort ná mar a éireoidh leat, ós rud é go seolann an leagan gréasáin iarratais chuig freastalaithe Telegram ó mheaisín an úsáideora.

Ar ámharaí an tsaoil, is réiteach simplí go leor é seo (ach níl sé an-soiléir). Ba mhaith liom rabhadh a thabhairt duit nach mise údar an réitigh seo. D’éirigh liom é a fháil i géaga, a phléigh fadhb cosúil le mianach. Réiteach molta ag úsáideoir github tecknojock, chabhraigh sé go mór liom, áfach, táim cinnte gur féidir leis cabhrú le duine eile, agus mar sin chinn mé an teagasc seo a scríobh.

Faoi bhun an ghearrtha gheobhaidh tú socrú céim ar chéim de do scáthán Webogram agus socrú seachfhreastalaí a chuid iarrataí ar fhreastalaithe Telegram ag baint úsáide as nginx.

Mar shampla, roghnaigh mé Freastalaí Ubuntu 18.04.3 a bhí nua-shuiteáilte agus nuashonraithe.

Rabhadh: Ní chuimseoidh an teagasc seo treoracha maidir le fearann ​​a bhunú i nginx. Ní mór duit é seo a dhéanamh tú féin. Glacann an rang teagaisc leis go bhfuil fearann ​​le ssl cumraithe agat cheana féin, agus go bhfuil rochtain ag an bhfreastalaí féin ar a bhfuil sé beartaithe agat é a chumrú ar na freastalaithe Telegram (ar aon chaoi is mian leat)

Glacaimid leis gurb é 10.23.0.3 IP an fhreastalaí seo, agus is é mywebogram.localhost an t-ainm fearainn

Bunaithe ar na coinbhinsiúin seo, tabharfaidh mé samplaí de chumraíochtaí. Ná déan dearmad na luachanna a athrú chuig do chuid féin.

Mar sin, déanaimis tús:

Chun Webogram a rith, ní mór dúinn nódejs. De réir réamhshocraithe, má shuiteáilimid é ó stórtha Ubuntu, gheobhaidh muid nodejs leagan 8.x. Teastaíonn 12.x uainn:

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

Roghnaímid an áit a mbeidh ár Webogram bunaithe.

Mar shampla, cuirimis é i bhfréamh an eolaire baile. Chun seo a dhéanamh, clónaigh an stór oifigiúil chuig ár bhfreastalaí:

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

Is é an chéad chéim eile na spleáchais go léir a theastaíonn chun an feidhmchlár a rith a shuiteáil:

cd webogram && npm install

Déanaimis triail as rith tástála. Rith an t-ordú:

npm start

Tar éis sin, déanaimid iarracht é a oscailt sa bhrabhsálaí

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

Más rud é go dtí seo go bhfuil gach rud déanta agat i gceart, osclófar leathanach údaraithe Webogram.

Anois ní mór dúinn an feidhmchlár a chumrú le rith mar sheirbhís. Chun seo a dhéanamh, déanaimis comhad a chruthú

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

oscail in eagarthóir ar bith é agus tabhair an chuma seo a leanas air (cuir isteach do chosán chuig 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

Ansin rithimid na horduithe seo a leanas:

Na hathruithe a chur i bhfeidhm

sudo systemctl daemon-reload

Cumasaigh uathrun:

sudo systemctl enable webogram.service

Cuirimis tús leis an tseirbhís:

sudo systemctl start webogram.service

Tar éis na céimeanna a chríochnú, beidh Webogram fós ar fáil ar phort 8000.

Ós rud é go mbeidh rochtain ar ár Webogram á bhunú againn trí nginx, dúnfaimid port 8000 le haghaidh iarratais ón taobh amuigh.

Bainimid úsáid as an áirgiúlacht udf chuige seo (nó aon mhodh atá áisiúil duit):

sudo ufw deny 8000

I gcás go gcinnfidh tú fós udf a úsáid, ach go bhfuil sé díchumasaithe ar an bhfreastalaí, cuir tuilleadh rialacha leis (ionas nach dtiteann gach rud as a chéile) agus cumasaigh udf:

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

Ar aghaidh, déanaimis tosú ag athrú cumraíocht nginx.

Mar a thug mé rabhadh thuas, glactar leis go bhfuil fearann ​​​​le ssl cumraithe cheana féin ar do fhreastalaí. Ní tharraingeoidh mé d’aird ach ar an méid a chaithfear a chur leis an gcomhad cumraíochta fearainn le go n-oibreoidh sé i gceart:


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

An méid a chuirimid le cumraíocht nginx:

  • Athróimid an suíomh fréimhe, a dhéanfaidh iarratais seachfhreastalaí chuig port 8000, ar a bhfreagraíonn Webogram
  • Dúnann muid an suíomh fréimhe ag baint úsáide as basic-auth. Is céim siombalach amháin é seo chun ár bhfeidhmchlár a dhúnadh ó shúile prying agus róbónna. (Agus freisin chun fadhbanna le blocáil a sheachaint)
  • Is iad roinnt suíomhanna le seachfhreastalaí ar an bhfreastalaí Telegram go díreach ár gcríochphointí trína ndéanfaimid ár n-iarrataí a sheachfhreastalaí

Chomh maith leis sin, déanaimis comhad a chruthú /etc/nginx/passwd.htpasswd;ionas go mbeidh rud éigin ag nginx chun pasfhocail úsáideora a sheiceáil leis.

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

Ardaímid ár sampla Webogram le seachfhreastalaí trí nginx

Atosaigh nginx:

sudo systemctl restart nginx

Anois ní bheidh Webogram ar fáil ach ag mywebogram.localhost/app/index.html tar éis an logáil isteach agus an focal faire a shainigh tú agus an t-ordú htpasswd á chruthú agat.

Níl mórán fágtha: déanfaimid athruithe beaga ar an tionscadal féin.

Oscail an comhad i eagarthóir ~/webogram/app/js/lib/mtproto.js

Agus tabhair a thús don fhoirm seo 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
      }
...
 

Tar éis seo, ní mór duit leathanach an iarratais sa bhrabhsálaí a athnuachan.

Oscail do chonsól brabhsálaí agus féach ar iarratais líonra an fheidhmchláir. Má oibríonn gach rud agus go dtéann iarratais XHR chuig do fhreastalaí, déantar gach rud i gceart, agus cuirtear Webogram anois trí nginx.

Ardaímid ár sampla Webogram le seachfhreastalaí trí nginx

Tá súil agam go mbeidh an rang teagaisc seo úsáideach do dhuine eile seachas dom.

Míle buíochas do gach éinne a léigh go dtí an deireadh.

Má tá aon deacrachtaí ag duine ar bith nó má rinne mé aon mhíchruinneas, beidh mé sásta freagra a thabhairt agus iarracht a dhéanamh cabhrú leat sna tuairimí nó sa PM.

Foinse: will.com

Add a comment