Tere Habr!
Hiljuti leidsin end olukorrast, kus oli vaja töötada ettevõtte võrgu sees, millel oli puudulik juurdepääs Internetile ja nagu pealkirjast võib arvata, oli Telegram selles blokeeritud. Olen kindel, et see olukord on paljudele tuttav.
Ma saan ilma kiirsõnumiteta hakkama, kuid tööks vajasin just Telegrami. Töömasinale ei saanud klienti installida, samuti polnud võimalik kasutada isiklikku sülearvutit. Teine lahendus näib olevat selle kasutamine
Õnneks on Webogram avatud lähtekoodiga projekt, mille lähtekood on saadaval
Installimine ja käivitamine iseenesest pole keeruline, kuid Telegrami serveritele blokeeritud juurdepääsuga võrgus töötamise tingimustes peate pigem pettuma kui edukaks, kuna veebiversioon saadab kasutaja masinast Telegrami serveritele päringuid.
Õnneks on see üsna lihtne (kuid mitte väga ilmne) parandus. Tahaksin hoiatada, et ma ei ole selle lahenduse autor. Mul õnnestus see sealt üles leida
Lõike alt leiate oma Webogrammi peegli samm-sammult seadistamise ja selle päringute puhverserveri nginxi abil Telegrami serveritele.
Näitena valisin värskelt installitud ja uuendatud Ubuntu Serveri 18.04.3.
Hoiatus: See õpetus ei sisalda juhiseid domeeni seadistamiseks nginxis. Peate seda ise tegema. Õpetus eeldab, et olete juba ssl-iga domeeni konfigureerinud ja serveril endal, millel kavatsete seda konfigureerida, on juurdepääs Telegrami serveritele (mis tahes viisil, mis teile meeldib)
Oletame, et selle serveri IP on 10.23.0.3 ja domeeninimi on mywebogram.localhost
Nendele kokkulepetele tuginedes toon näiteid konfiguratsioonidest. Ärge unustage väärtusi enda omadeks muuta.
Alustame siis:
Webogrami käitamiseks vajame nodeji. Vaikimisi, kui installime selle Ubuntu hoidlatest, saame nodejs versiooni 8.x. Vajame 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Valime koha, kus meie Webogramm asub.
Näiteks asetame selle kodukataloogi juure. Selleks kloonige ametlik hoidla meie serverisse:
cd ~ && git clone https://github.com/zhukov/webogram.git
Järgmine samm on installida kõik rakenduse käitamiseks vajalikud sõltuvused.
cd webogram && npm install
Proovime proovisõitu. Käivitage käsk:
npm start
Pärast seda proovime seda brauseris avada
http://10.23.0.3:8000/app/index.html
Kui olete seni kõik õigesti teinud, avaneb Webogrami autoriseerimisleht.
Nüüd peame konfigureerima rakenduse teenusena töötama. Selleks loome faili
sudo touch /lib/systemd/system/webogram.service
avage see mis tahes redaktoris ja andke sellele järgmine välimus (sisestage oma tee WorkDirectorysse)
[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
Seejärel käivitame järgmised käsud:
Muudatuste rakendamine
sudo systemctl daemon-reload
Luba automaatkäivitus:
sudo systemctl enable webogram.service
Alustame teenusega:
sudo systemctl start webogram.service
Pärast toimingute sooritamist on Webogram jätkuvalt saadaval pordis 8000.
Kuna loome juurdepääsu oma Webogrammile nginxi kaudu, sulgeme väljastpoolt tulevate päringute jaoks pordi 8000.
Kasutame selleks utiliiti udf (või mis tahes teile sobivat meetodit):
sudo ufw deny 8000
Kui otsustate siiski kasutada udf-i, kuid see on serveris keelatud, lisage rohkem reegleid (et kõik ei laguneks) ja lubage udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Järgmisena alustame nginxi konfiguratsiooni muutmist.
Nagu eespool hoiatasin, eeldatakse, et ssl-iga domeen on teie serveris juba konfigureeritud. Juhin teie tähelepanu ainult sellele, mida tuleb domeeni konfiguratsioonifailile lisada, et see korralikult töötaks:
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;
}
}
Mida me nginxi konfiguratsioonile lisame:
- Muudame juurasukohta, mis suunab puhverserveri päringud pordile 8000, millele Webogram vastab
- Suleme juurasukoha, kasutades basic-auth. See on puhtalt sümboolne samm meie rakenduse sulgemiseks uudishimulike pilkude ja robotite eest. (Ja ka blokeerimisega seotud probleemide vältimiseks)
- Hunnik puhverserveri asukohti Telegrami serveris on täpselt meie lõpp-punktid, mille kaudu me oma taotlusi puhverserverime
Samuti loome faili /etc/nginx/passwd.htpasswd;
et nginxil oleks millegagi kasutajate paroole kontrollida.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Taaskäivitage nginx:
sudo systemctl restart nginx
Nüüd on Webogram saadaval ainult aadressil
Jäänud on vähe: teeme projektis endas väikesed muudatused.
Avage fail redaktoris ~/webogram/app/js/lib/mtproto.js
Ja viige selle algus järgmisele kujule:
/*!
* 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
}
...
Pärast seda peate brauseris rakenduse lehte värskendama.
Avage brauseri konsool ja vaadake rakenduse võrgupäringuid. Kui kõik töötab ja XHR-i päringud lähevad teie serverisse, siis tehakse kõik õigesti ja Webogram on nüüd puhverserver nginxi kaudu.
Loodan, et see õpetus on kasulik ka kellelegi teisele peale minu.
Suur tänu kõigile, kes lõpuni lugesid.
Kui kellelgi on raskusi või tegin ebatäpsusi, siis vastan meeleldi ja proovin teid aidata kommentaarides või PM-is.
Allikas: www.habr.com