Tere, Habr!
Hiljuti sattusin olukorda, kus pidin töötama ettevĂ”tte sisevĂ”rgus, millel oli piiratud juurdepÀÀs internetile, ja nagu vĂ”ite pealkirjast arvata â Telegram oli seal blokeeritud. Olen kindel, et see olukord on paljudele tuttav.
Ma saan kĂŒll ilma sĂ”numirakendusteta hakkama, kuid just Telegram oli töö jaoks vajalik. Klientide installimine tööarvutisse ei olnud vĂ”imalik, ka isikliku sĂŒlearvuti kasutamine ei tulnud kĂ”ne allagi. Ăhe lahendusena paistab olevat kasutada selle , kuid nagu vĂ”ite arvata â see ei olnud samuti ligipÀÀsetav. MÀÀramatute peeglite otsimine ma jĂ€tan kohe vĂ€lja (loodan et ilmsete pĂ”hjuste tĂ”ttu).
Ănneks on Webogram avatud lĂ€htekoodiga projekt, mille lĂ€htekood on k ĐŽĐŸŃŃŃĐżĐ”Đœ kĂ€esoleva autori poolt (suur tĂ€nu talle!)
Iseseisev installimine ja kÀivitamine ei ole keeruline, kuid tingimustes, kus juurdepÀÀs Telegrami serveritele on blokeeritud, on teil pigem pettumus kui edu, kuna veebiversioon saadab kasutaja seadme kaudu pÀringuid Telegrami serveritele.
Ănneks on seda ĂŒsna lihtne (kuigi mitte eriti ilmselge) parandada. Tahaksin hoiatada, et ma ei ole selle lahenduse autor. Leidsin selle , kus arutati probleemi, mis oli sarnane minule. Lahendus, mille pakkus githubi kasutaja , aitas mind vĂ€ga, kuid olen kindel, et see vĂ”ib abiks olla ka kellelegi teisele, seetĂ”ttu otsustasin kirjutada selle juhendi.
Nii et allpool leiate samm-sammult juhendi Webogrami peegli seadistamiseks ja selle pÀringute proksieerimiseks Telegrami serveritele nginx'i kasutades.
NĂ€iteks valisin just installitud ja uuendatud Ubuntu Server 18.04.3.
TÀhelepanu: KÀesolev juhend ei sisalda juhiseid domeeni seadistamise kohta nginx'is. See tuleb ise teha. Juhend eeldab, et teil on juba seadistatud domeen koos SSL-iga ja samuti, et server, millel kavatsete seadistada, on ligipÀÀs Telegrami serveritele (mille iganes viiside kaudu soovite).
Oletame, et selle serveri IP on 10.23.0.3 ja domeeninimi mywebogram.localhost.
VĂ”ttes neid tingimusi arvesse, toon vĂ€lja konfiguratsioonide nĂ€ited. Ăra unusta muuta vÀÀrtusi oma omadeks.
Nii et alapeatĂŒkk:
Webogram'i kÀivitamiseks vajame nodejs'i. Kui installida see Ubuntu hoidlatest, saame nodejs versiooni 8.x. Me vajame versiooni 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejsValime koha, kus meie Webogram tegutseb.
NĂ€iteks, paigutame selle oma kodu katalooge. Selleks kloonime ametliku hoidla oma serverisse:
cd ~ && git clone https://github.com/zhukov/webogram.gitJ seuraavaks peab installima kÔik sÔltuvused, mis on vajalikud rakenduse kÀivitamiseks:
cd webogram && npm installProovime teha katse kÀivitamise. KÀivitage kÀsk:
npm startPĂ€rast seda proovime avada brauseris
http://10.23.0.3:8000/app/index.htmlKui olete kÔik Ôigesti teinud, avaneb teile Webogram'i sisselogimise leht.
NĂŒĂŒd peame seadistama rakenduse kĂ€ivitamise teenusena. Selleks loome faili
sudo touch /lib/systemd/system/webogram.serviceavatakse see mis tahes redaktoris ja antakse jÀrgmine vÀlimus (sisestage oma Path to 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
PÀrast seda tÀidame jÀrgmised kÀsud:
Rakendame muudatused
sudo systemctl daemon-reloadLĂŒlitame automaatse kĂ€ivitamise sisse:
sudo systemctl enable webogram.serviceKĂ€ivitame teenuse:
sudo systemctl start webogram.servicePÀrast tehtud toiminguid jÀÀb Webogram kÀttesaadavaks port 8000.
Kuna me seadistame juurdepÀÀsu meie Webogramile nginx'i kaudu, sulgeme port 8000 vÀliste pÀringute jaoks.
Kasutame selleks utiliiti udf (vÔi mÔnda mugavat viisi):
sudo ufw deny 8000Juhul, kui siiski otsustasite kasutada udf'i, kuid see on serveris vĂ€lja lĂŒlitatud â lisame veel reeglid (et kĂ”ik ei kokku kukuks) ja lĂŒlitame udf'i sisse:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enableEdasi, alustame nginx'i konfiguratsiooni muutmist.
Kuidas ma juba varem hoiatasin â eeldatakse, et teie serveris on juba domeen sĂ€tetega ssl. Tuletan meelde, et peate konfigureerimisse lisama domeenifaili, et kĂ”ik 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 lisame nginx-konfiguratsiooni:
- Muudame juurlocation'i, mis suunab pÀringud porti 8000, millele Webogram vastab.
- Juurlocation sulgeme basic-auth'iga. See on sĂŒmboolne samm, et kaitsta meie rakendust vÔÔraste silmade ja botide eest. (Samuti, et ei tekiks probleeme blokeerimisega.)
- Palju location'e, kus on proxy_path Telegrami serveritele - need ongi meie lÔpp-punktid, kust me suuname oma pÀringud.
Samuti loome faili /etc/nginx/passwd.htpasswd;, et nginx-il oleks millega kasutaja paroolide kontrollimist teha.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg 
TaaskÀivita nginx:
sudo systemctl restart nginxNĂŒĂŒd on Webogram saadaval ainult aadressil pĂ€rast seda, kui on sisestatud kasutajanimi ja parool, mille mÀÀrasid htpasswd'i kĂ€su loomisel.
JÀÀnud on vaid veidi: teeme projekti vÀheseid muudatusi.
Ava redigeerijas fail ~/webogram/app/js/lib/mtproto.js
Ja kohanda selle algus jÀrgmisele kujule:
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>
* 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 on vajalik uuendada rakenduse lehte brauseris.
Ava brauseri konsol ja vaata rakenduse vĂ”rgu pĂ€ringuid. Kui kĂ”ik töötab ja XHR pĂ€ringud suunatakse sinu serverisse - tĂ€hendab, et kĂ”ik on Ă”igesti seadistatud ja Webogram on nĂŒĂŒd nginx'i kaudu suunatud.

Loodan, et see Ôpetus on kasulik veel kellelegi peale minu.
Suur tÀnu kÔigile, kes lÔpuni lugesid.
Kui kellelgi on raskusi vĂ”i olen teinud mĂ”ningaid ebatĂ€psusi â vastan hea meelega ja pĂŒĂŒan teid aidata kommentaarides vĂ”i privaatmessage'is.
Allikas: habr.com
