Hoʻokiʻekiʻe mākou i kā mākou hiʻohiʻona Webogram me ka proxying ma o nginx

E Habr!

I kēia manawa ua ʻike wau iaʻu iho i kahi kūlana e pono ai e hana i loko o kahi ʻoihana hui me ka loaʻa ʻole o ka pūnaewele a, e like me kāu e koho ai mai ke poʻo inoa, ua pāpā ʻia ʻo Telegram. Manaʻo wau ua kamaʻāina kēia kūlana i nā mea he nui.

Hiki iaʻu ke hana me ka ʻole o nā ʻelele koke, akā ʻo Telegram kaʻu e pono ai no ka hana. ʻAʻole hiki ke hoʻokomo i ka mea kūʻai aku ma kahi mīkini hana, ʻaʻole hiki ke hoʻohana i kahi kamepiula pilikino. ʻO kahi hopena ʻē aʻe e like me ka hoʻohana ʻana mana pūnaewele mana, akā hiki iā ʻoe ke koho, ʻaʻole i loaʻa. Hoʻopau koke wau i ke koho o ka ʻimi ʻana i kahi aniani ʻike ʻole (manaʻolana wau no nā kumu maopopo).

ʻO ka mea pōmaikaʻi, ʻo Webogram kahi papahana open source nona ka code kumu i loaʻa i loko github kona mea kākau (No ka mea, mahalo nui iā ia!)
ʻAʻole paʻakikī ka hoʻonohonoho ʻana a me ka hoʻokuʻu ʻana iā ia iho, akā naʻe, i nā kūlana o ka hana i loko o kahi pūnaewele me ka hoʻopaʻa ʻia ʻana i nā kikowaena Telegram, e hoʻohoka ʻia ʻoe ma mua o ka kūleʻa, no ka mea e hoʻouna ana ka mana pūnaewele i nā noi i nā kikowaena Telegram mai ka mīkini o ka mea hoʻohana.

К счастью, это довольно просто (но не очень очевидно) исправить. Хочу предупредить, что я не являются автором данного решения. Мне удалось найти его в lālā, i kūkākūkā i kahi pilikia e like me kaʻu. Hoʻoholo ʻia e ka mea hoʻohana github hoʻopaʻapaʻa, ua kōkua nui ia iaʻu, akā naʻe, maopopo iaʻu hiki ke kōkua i kekahi, no laila ua hoʻoholo wau e kākau i kēia kumu aʻo.

Ma lalo o ka ʻoki e ʻike ai ʻoe i ka hoʻonohonoho ʻana i kēlā me kēia ʻanuʻu o kāu aniani Webogram a me ka hoʻonohonoho ʻana o ke koho ʻana i kāna mau noi i nā kikowaena Telegram e hoʻohana ana i ka nginx.

Ma keʻano he laʻana, ua koho wau i kahi Ubuntu Server 18.04.3 hou i hoʻokomo hou ʻia.

Pākuʻi: ʻAʻole kēia aʻoaʻo e hoʻokomo i nā ʻōlelo aʻoaʻo no ka hoʻonohonoho ʻana i kahi kikowaena ma nginx. Pono ʻoe e hana iā ʻoe iho. Manaʻo ke kumu aʻo ua hoʻonohonoho mua ʻoe i kahi kikowaena me ssl, a ʻo ka server ponoʻī āu e hoʻolālā ai e hoʻonohonoho iā ia ke komo i nā kikowaena Telegram (ma nā ʻano āu e makemake ai)

E manaʻo kākou he 10.23.0.3 ka ip o kēia kikowaena, a ʻo ka inoa inoa ʻo mywebogram.localhost.

Ma muli o kēia mau kuʻikahi, e hāʻawi wau i nā hiʻohiʻona o nā hoʻonohonoho. Mai poina e hoʻololi i nā waiwai iā ʻoe iho.

No laila e hoʻomaka kākou:

No ka holo ʻana i ka Webogram, pono mākou i nā nodejs. Ma ka maʻamau, inā mākou e hoʻokomo iā ia mai nā waihona waihona ʻo Ubuntu, e loaʻa iā mākou nodejs version 8.x. Pono mākou i 12.x:

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

Koho mākou i kahi e hoʻokumu ʻia ai kā mākou Webogram.

No ka laʻana, e hoʻokomo i ke kumu o ka papa kuhikuhi home. No ka hana ʻana i kēia, clone i ka waihona kūhelu i kā mākou kikowaena:

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

ʻO ka hana aʻe e hoʻokomo i nā hilinaʻi āpau e pono ai e holo i ka noi:

cd webogram && npm install

E ho'āʻo kākou i ka holo hoʻāʻo. Holo i ke kauoha:

npm start

Ma hope o kēlā, ho'āʻo mākou e wehe iā ia ma ka polokalamu kele pūnaewele

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

Inā a hiki i kēia manawa ua hana pololei ʻoe i nā mea āpau, e wehe ʻia ka ʻaoʻao mana Webogram.

I kēia manawa pono mākou e hoʻonohonoho i ka noi e holo ma ke ʻano he lawelawe. No ka hana ʻana i kēia, e hana kāua i kahi faila

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

wehe ia i loko o kekahi mea hoʻoponopono a hāʻawi iā ia i kēia hiʻohiʻona (e komo i kou ala i 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

A laila holo mākou i kēia mau kauoha:

Ke noi nei i nā hoʻololi

sudo systemctl daemon-reload

Hoʻā i ka autorun:

sudo systemctl enable webogram.service

E hoʻomaka kākou i ka lawelawe:

sudo systemctl start webogram.service

Ma hope o ka hoʻopau ʻana i nā ʻanuʻu, e hoʻomau ʻia ka Webogram ma ke awa 8000.

No ka mea e hoʻonohonoho mākou i ke komo i kā mākou Webogram ma o nginx, e pani mākou i ke awa 8000 no nā noi mai waho.

Hoʻohana mākou i ka pono udf no kēia (a i ʻole kekahi ala kūpono iā ʻoe):

sudo ufw deny 8000

Inā hoʻoholo ʻoe e hoʻohana i ka udf, akā ua pio ia ma ka server, e hoʻohui i nā lula hou (i ʻole nā ​​​​mea āpau e hāʻule) a hiki iā udf:

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

A laila, e hoʻomaka kākou e hoʻololi i ka hoʻonohonoho nginx.

E like me kaʻu i ʻōlelo ai ma luna, ua manaʻo ʻia ua hoʻonohonoho ʻia kahi kikowaena me ssl ma kāu kikowaena. E huki wale aku au i kou noonoo i ka mea e pono ai ke hoohui ia i ka waihona hoonohonoho domain e hana pono ai:


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

ʻO ka mea a mākou e hoʻohui ai i ka config nginx:

  • Hoʻololi mākou i ka wahi kumu, kahi e noi ai i nā mea koho i ke awa 8000, kahi e pane ai ʻo Webogram
  • Hoʻopau mākou i ka wahi kumu me ka hoʻohana kumu-auth. He hana hōʻailona maʻemaʻe kēia e pani i kā mākou noi mai ka prying eyes a me nā bots. (A no ka pale ʻana i nā pilikia me ka pale ʻana)
  • ʻO kahi pūʻulu o nā wahi me proxy_path ma ke kikowaena Telegram ʻo ia kā mākou mau hopena e hoʻololi ai mākou i kā mākou noi.

Eia kekahi, e hana kākou i faila /etc/nginx/passwd.htpasswd;i loaʻa i ka nginx kahi mea e nānā ai i nā ʻōlelo huna mea hoʻohana.

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

Hoʻokiʻekiʻe mākou i kā mākou hiʻohiʻona Webogram me ka proxying ma o nginx

Hoʻomaka hou i ka nginx:

sudo systemctl restart nginx

I kēia manawa e loaʻa wale ka Webogram ma mywebogram.localhost/app/index.html ma hope o ke komo ʻana a me ka ʻōlelo huna āu i wehewehe ai i ka hana ʻana i ke kauoha htpasswd.

He liʻiliʻi nā mea i koe: e hana mākou i nā hoʻololi liʻiliʻi i ka papahana ponoʻī.

E wehe i ka faila ma kahi hoʻoponopono ~/webogram/app/js/lib/mtproto.js

A lawe mai i kona hoʻomaka ʻana i kēia ʻano:

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

Ma hope o kēia, pono ʻoe e hōʻano hou i ka palapala noi ma ka polokalamu kele pūnaewele.

E wehe i kāu polokalamu kele pūnaewele a nānā i nā noi pūnaewele o ka polokalamu. Inā hana nā mea a pau a hele nā ​​noi XHR i kāu kikowaena, a laila ua hana pololei nā mea āpau, a ua hoʻopili ʻia ʻo Webogram ma o nginx.

Hoʻokiʻekiʻe mākou i kā mākou hiʻohiʻona Webogram me ka proxying ma o nginx

Manaʻo wau e pono kēia kumu aʻo i kekahi ʻē aʻe ma waho oʻu.

Mahalo nui i ka poʻe a pau i heluhelu a hiki i ka hopena.

Inā pilikia kekahi a i ʻole au i hana hewa, e hauʻoli wau e pane a hoʻāʻo e kōkua iā ʻoe ma nā ʻōlelo a i ʻole PM.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka