Urang ngangkat conto Webogram kami kalayan proxying via nginx

Héy Habr!

Anyar-anyar ieu kuring mendakan diri dina kaayaan anu peryogi damel di jero jaringan perusahaan kalayan aksés anu teu lengkep ka Internét sareng, sakumaha anjeun tiasa nebak tina judulna, Telegram diblokir di jerona. Kuring yakin yén kaayaan ieu wawuh ka loba.

Abdi tiasa ngalakukeun tanpa utusan instan, tapi éta Telegram anu kuring diperyogikeun pikeun digawé. Teu mungkin pikeun masang klien dina mesin kerja, sareng henteu tiasa nganggo laptop pribadi. Solusi anu sanés sigana nganggo éta Vérsi wéb resmi, tapi anjeun tiasa nebak, éta ogé henteu sayogi. Kuring langsung nyebrang pilihan milarian eunteung anu teu resmi (Kuring ngarepkeun alesan anu jelas).

Kabeneran, Webogram mangrupikeun proyék open source anu kode sumberna sayogi github panulis na (Kanggo nu loba hatur nuhun ka anjeunna!)
Pamasangan sareng peluncuran sorangan henteu sesah, tapi dina kaayaan operasi dina jaringan anu diblokir aksés ka server Telegram, anjeun bakal langkung kuciwa tibatan suksés, sabab versi wéb ngirimkeun pamundut ka server Telegram tina mesin pangguna.

Kabeneran, ieu mangrupikeun perbaikan anu saderhana (tapi henteu atra pisan). Abdi hoyong ngingetkeun yén kuring sanés panulis solusi ieu. Kuring junun manggihan eta di dahan, nu ngabahas masalah nu sarupa jeung kuring. Solusi anu disarankeun ku pangguna github tecknojock, éta mantuan kuring pisan, kumaha oge, kuring yakin yén éta bisa mantuan batur, jadi kuring mutuskeun nulis tutorial ieu.

Handapeun cut anjeun bakal manggihan hambalan-demi-hambalan setup eunteung Webogram anjeun sarta setelan proxying requests na ka server Telegram ngagunakeun nginx.

Salaku conto, kuring milih Ubuntu Server 18.04.3 anu nembe dipasang sareng diropéa.

Perhatosan: Tutorial ieu moal ngalebetkeun petunjuk pikeun nyetél domain di nginx. Anjeun kedah ngalakukeun ieu sorangan. Tutorial nganggap yén anjeun parantos ngonpigurasi domain sareng ssl, sareng yén server sorangan dimana anjeun badé ngonpigurasikeun éta ngagaduhan aksés ka server Telegram (kumaha waé anu anjeun pikahoyong)

Hayu urang nganggap yén ip server ieu 10.23.0.3, sareng nami domainna nyaéta mywebogram.localhost

Dumasar konvénsi ieu, kuring bakal masihan conto konfigurasi. Tong hilap ngarobih niléy ka anjeun nyalira.

Janten hayu urang ngamimitian:

Pikeun ngajalankeun Webogram, urang peryogi nodejs. Sacara standar, lamun urang masang eta ti repositories Ubuntu, urang bakal meunang nodejs versi 8.x. Urang peryogi 12.x:

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

Urang milih tempat dimana Webogram urang bakal dumasar.

Contona, hayu urang nempatkeun eta dina akar diréktori imah. Jang ngalampahkeun ieu, clone gudang resmi ka server kami:

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

Lengkah saterusna nyaéta masang sadaya katergantungan anu diperyogikeun pikeun ngajalankeun aplikasi:

cd webogram && npm install

Hayu urang cobaan test run. Jalankeun paréntah:

npm start

Saatos éta, urang nyobian muka éta dina browser

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

Upami dugi ka titik ieu anjeun parantos ngalaksanakeun sadayana leres, halaman otorisasi Webogram bakal dibuka.

Ayeuna urang kedah ngonpigurasikeun aplikasi pikeun ngajalankeun salaku jasa. Jang ngalampahkeun ieu, hayu urang nyieun file

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

buka dina éditor naon waé sareng pasihan tampilan ieu (asupkeun jalur anjeun ka 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

Teras we ngajalankeun paréntah di handap ieu:

Nerapkeun parobahan

sudo systemctl daemon-reload

Aktipkeun autorun:

sudo systemctl enable webogram.service

Hayu urang ngamimitian jasa:

sudo systemctl start webogram.service

Saatos réngsé léngkah-léngkah, Webogram bakal terus sayogi dina port 8000.

Kusabab urang bakal nyetél aksés ka Webogram urang via nginx, urang bakal nutup port 8000 pikeun requests ti luar.

Pikeun ieu kami nganggo utilitas udf (atanapi metode naon waé anu cocog pikeun anjeun):

sudo ufw deny 8000

Upami anjeun masih mutuskeun pikeun ngagunakeun udf, tapi éta ditumpurkeun dina server, tambahkeun deui aturan (supaya sadayana henteu rusak) sareng aktipkeun udf:

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

Salajengna, hayu urang ngamimitian ngarobah konfigurasi nginx.

Salaku I warned luhur, eta dianggap yén domain kalawan SSL geus ngonpigurasi dina server Anjeun. Kuring ngan ukur bakal narik perhatian anjeun kana naon anu kedah ditambihan kana file konfigurasi domain supados tiasa dianggo leres:


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

Naon anu urang tambahkeun kana konfigurasi nginx:

  • Urang ngarobah lokasi root, nu bakal requests proxy ka port 8000, on nu Webogram responds
  • Urang nutup lokasi root ngagunakeun basic-auth. Ieu mangrupikeun léngkah anu murni simbolis pikeun nutup aplikasi kami tina prying panon sareng bot. (Sareng ogé pikeun ngahindarkeun masalah sareng blokiran)
  • Seueur lokasi sareng proxy_path dina server Telegram mangrupikeun titik tungtung kami anu kami bakal ngajantenkeun pamundut kami

Ogé, hayu urang nyieun file /etc/nginx/passwd.htpasswd;ku kituna nginx boga hal pikeun pariksa sandi pamaké kalawan.

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

Urang ngangkat conto Webogram kami kalayan proxying via nginx

Balikan deui nginx:

sudo systemctl restart nginx

Ayeuna Webogram ngan bakal sadia di mywebogram.localhost/app/index.html saatos login sareng kecap akses anu anjeun tangtukeun nalika nyiptakeun paréntah htpasswd diasupkeun.

Aya sakedik anu tinggaleun: urang bakal ngalakukeun parobihan leutik kana proyék éta sorangan.

Buka file dina editor ~/webogram/app/js/lib/mtproto.js

Jeung mawa mimiti na kana formulir handap:

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

Saatos ieu, anjeun kedah nga-refresh halaman aplikasi dina browser.

Buka konsol browser anjeun sareng tingali pamundut jaringan aplikasi. Lamun sagalana jalan na requests XHR buka server anjeun, lajeng sagalana geus rengse neuleu, sarta Webogram ayeuna proxied via nginx.

Urang ngangkat conto Webogram kami kalayan proxying via nginx

Abdi ngarepkeun tutorial ieu tiasa mangpaat pikeun batur salian ti kuring.

Hatur nuhun ka sadayana anu maca dugi ka akhir.

Upami aya anu ngagaduhan kasulitan atanapi kuring ngalakukeun kasalahan, kuring bakal resep ngajawab sareng nyobian ngabantosan anjeun dina koméntar atanapi PM.

sumber: www.habr.com

Tambahkeun komentar