Мо намунаи Webogram-и худро бо прокси тавассути nginx мебардорем

Эй Ҳабр!

Ба наздикӣ ман худро дар вазъияте пайдо кардам, ки дар дохили як шабакаи корпоративӣ бо дастрасии нопурра ба Интернет кор кардан лозим буд ва тавре ки шумо аз сарлавҳа тахмин мекунед, Telegram дар он баста шудааст. Боварй дорам, ки ин вазъият ба бисёриҳо шинос аст.

Ман бе мессенҷерҳои фаврӣ кор карда метавонам, аммо барои кор ман Telegram лозим буд. Мизочро ба дастгохи корй монтаж кардан, ноутбуки шахсиро истифода бурдан мумкин набуд. Ба назар чунин мерасад, ки ҳалли дигар ин истифодаи он аст версияи расмии веб, аммо тавре ки шумо тахмин карда метавонед, он низ дастнорас буд. Ман фавран варианти ҷустуҷӯи оинаи ғайрирасмӣ (бо сабабҳои маълум умедворам) хат мекашам.

Хушбахтона, Webogram як лоиҳаи кушодаасос аст, ки рамзи сарчашмааш дар он дастрас аст Гитуб муаллифи он (Барои ин ба ӯ ташаккури зиёд!)
Худи насб ва ба кор андохтан душвор нест, аммо дар шароити кор дар дохили шабакае, ки дастрасии баста ба серверҳои Telegram аст, шумо эҳтимол бештар аз муваффақ шудан ноумед мешавед, зеро версияи веб дархостҳоро ба серверҳои Telegram аз мошини корбар мефиристад.

Хушбахтона, ин як ислоҳи хеле содда (вале на он қадар равшан) аст. Мехоҳам шуморо огоҳ кунам, ки ман муаллифи ин қарор нестам. Ман тавонистам онро дарёбам филиал, ки проблемам ба ман монандро мухокима кард. Ҳалли аз ҷониби корбари github пешниҳодшуда текноҷок, он ба ман хеле кӯмак кард, аммо ман боварӣ дорам, ки он метавонад ба ягон каси дигар кӯмак кунад, бинобар ин ман тасмим гирифтам, ки ин дастурро нависам.

Дар поёни буриш шумо қадам ба қадам насб кардани оинаи Webogram ва насби прокси-серверии дархостҳои онро ба серверҳои Telegram бо истифода аз nginx хоҳед ёфт.

Ҳамчун мисол, ман сервери Ubuntu 18.04.3-и нав насбшуда ва навшударо интихоб кардам.

Огоҳӣ: Ин дастур дастурҳоро оид ба таъсиси домен дар nginx дар бар намегирад. Шумо бояд ин корро худатон кунед. Дастурамал тахмин мекунад, ки шумо аллакай доменро бо ssl танзим кардаед ва худи сервере, ки шумо онро танзим кардан мехоҳед, ба серверҳои Telegram дастрасӣ дорад (бо ҳар роҳе, ки шумо мехоҳед)

Фарз мекунем, ки IP-и ин сервер 10.23.0.3 ва номи домени mywebogram.localhost аст.

Дар асоси ин конвенсияҳо ман мисолҳои конфигуратсияҳо хоҳам дод. Фаромӯш накунед, ки арзишҳоро ба худатон иваз кунед.

Биёед, одат кунем:

Барои иҷро кардани Webogram ба мо nodejs лозим аст. Бо нобаёнӣ, агар мо онро аз анбори Ubuntu насб кунем, мо версияи 8.x nodejs-ро мегирем. Ба мо 12.x лозим аст:

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

Мо ҷойеро интихоб мекунем, ки дар он Webogram мо асос меёбад.

Масалан, биёед онро дар решаи директорияи хонагӣ ҷойгир кунем. Барои ин кор, анбори расмиро ба сервери мо клон кунед:

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

Қадами навбатӣ насб кардани ҳама вобастагӣ барои иҷро кардани барнома мебошад:

cd webogram && npm install

Биёед кӯшиш кунем, ки озмоишро иҷро кунем. Фармонро иҷро кунед:

npm start

Баъд аз ин, мо кӯшиш мекунем, ки онро дар браузер кушоем

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

Агар то ин лаҳза шумо ҳама чизро дуруст анҷом дода бошед, саҳифаи иҷозати Webogram кушода мешавад.

Ҳоло ба мо лозим аст, ки барномаро ҳамчун хидмат кор кунад. Барои ин, биёед файл эҷод кунем

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

онро дар ягон муҳаррир кушоед ва ба он намуди зерин диҳед (роҳи худро ба 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

Сипас, мо фармонҳои зеринро иҷро мекунем:

Татбиқи тағйирот

sudo systemctl daemon-reload

Фаъолсозии худкор:

sudo systemctl enable webogram.service

Биёед хидматро оғоз кунем:

sudo systemctl start webogram.service

Пас аз анҷоми қадамҳо, Webogram дар бандари 8000 дастрас хоҳад буд.

Азбаски мо дастрасӣ ба Webogram-и худро тавассути nginx танзим мекунем, мо порти 8000-ро барои дархостҳо аз берун мепӯшем.

Барои ин мо утилитаи udf-ро истифода мебарем (ё ягон усули барои шумо қулай):

sudo ufw deny 8000

Агар шумо то ҳол тасмим гиред, ки udf-ро истифода баред, аммо он дар сервер ғайрифаъол аст, қоидаҳои бештар илова кунед (то ҳама чиз аз ҳам наафтад) ва udf-ро фаъол созед:

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

Минбаъд, биёед тағир додани конфигуратсияи nginx-ро оғоз кунем.

Тавре ки ман дар боло ҳушдор додам, тахмин карда мешавад, ки домен бо ssl аллакай дар сервери шумо танзим шудааст. Ман таваҷҷӯҳи шуморо танҳо ба он ҷалб мекунам, ки барои дуруст кор кардани он ба файли конфигуратсияи домен чӣ илова кардан лозим аст:


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

Он чизе ки мо ба конфигуратсияи nginx илова мекунем:

  • Мо макони решаро тағир медиҳем, ки дархостҳои проксиро ба порти 8000, ки Webogram ба он посух медиҳад, иваз мекунад
  • Мо ҷойгиршавии решаро бо истифодаи basic-auth мепӯшем. Ин як қадами сирф рамзӣ барои бастани замимаи мо аз чашмони бегона ва ботҳо мебошад. (Ва инчунин барои пешгирӣ кардани мушкилот бо басташавӣ)
  • Як қатор маконҳо бо proxy_path дар сервери Telegram маҳз нуқтаи ниҳоии мо мебошанд, ки тавассути онҳо мо дархостҳои худро прокси-сервер мекунем

Инчунин, биёед файл эҷод кунем /etc/nginx/passwd.htpasswd;то ки nginx чизе дошта бошад, ки паролҳои корбарро бо он тафтиш кунад.

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

Мо намунаи Webogram-и худро бо прокси тавассути nginx мебардорем

Nginx-ро аз нав оғоз кунед:

sudo systemctl restart nginx

Ҳоло Webogram танҳо дар он дастрас хоҳад буд mywebogram.localhost/app/index.html пас аз ворид кардани логин ва парол, ки шумо ҳангоми сохтани фармони htpasswd муайян кардаед.

Каме мондааст: мо ба худи лоиха тагйироти хурде ворид мекунем.

Файлро дар муҳаррир кушоед ~/webogram/app/js/lib/mtproto.js

Ва ибтидои онро ба шакли зерин биёред:

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

Пас аз ин, шумо бояд саҳифаи барномаро дар браузер навсозӣ кунед.

Консоли браузери худро кушоед ва ба дархостҳои шабакавии барнома нигаред. Агар ҳама чиз кор кунад ва дархостҳои XHR ба сервери шумо ворид шаванд, ҳама чиз дуруст анҷом дода мешавад ва Webogram ҳоло тавассути nginx прокси карда мешавад.

Мо намунаи Webogram-и худро бо прокси тавассути nginx мебардорем

Умедворам, ки ин дастур ба ғайр аз ман ба ягон каси дигар муфид хоҳад буд.

Ташаккури зиёд ба ҳамаи онҳое, ки то охир хонданд.

Агар касе душворӣ дошта бошад ё ман ягон хатогие дошта бошам, ман бо омодагӣ ҷавоб медиҳам ва кӯшиш мекунам, ки дар шарҳҳо ё PM ба шумо кӯмак расонам.

Манбаъ: will.com

Илова Эзоҳ