Hoi Habr!
Koartlyn fûn ik mysels yn in situaasje wêryn it nedich wie om te wurkjen yn in bedriuwsnetwurk mei ûnfolsleine tagong ta it ynternet en, lykas jo kinne riede út 'e titel, Telegram waard dêryn blokkearre. Ik bin der wis fan dat dizze situaasje is bekend foar in protte.
Ik kin sûnder instant messengers dwaan, mar it wie Telegram dat ik nedich wie foar wurk. It wie net mooglik om de kliïnt op in wurkmasine te ynstallearjen, en it wie ek net mooglik om in persoanlike laptop te brûken. In oare oplossing liket te wêzen om it te brûken
Gelokkich is Webogram in iepen boarne-projekt wêrfan de boarnekoade beskikber is yn
De ynstallaasje en lansearring sels is net dreech, lykwols, yn betingsten fan operaasje binnen in netwurk mei blokkearre tagong ta Telegram-tsjinners, sille jo mear kâns wêze om teloarsteld te wêzen as suksesfol, om't de webferzje oanfragen stjoert nei Telegram-tsjinners fan 'e masine fan' e brûker.
Gelokkich is dit in frij ienfâldige (mar net heul dúdlik) fix. Ik wol jo warskôgje dat ik net de skriuwer bin fan dizze oplossing. Ik slagge it te finen yn
Under de besuniging fine jo stap-foar-stap opset fan jo Webogram-spegel en opset fan proxying fan har fersiken nei Telegram-tsjinners mei nginx.
As foarbyld keas ik in nij ynstalleare en bywurke Ubuntu Server 18.04.3.
Warskôging: Dizze tutorial sil gjin ynstruksjes befetsje oer it ynstellen fan in domein yn nginx. Jo moatte dit sels dwaan. De tutorial giet derfan út dat jo al in domein konfigureare hawwe mei ssl, en dat de server sels wêrop jo fan plan binne it te konfigurearjen tagong hat ta de Telegram-tsjinners (op elke manier dy't jo wolle)
Litte wy oannimme dat de ip fan dizze tsjinner 10.23.0.3 is, en de domeinnamme is mywebogram.localhost
Op grûn fan dizze konvinsjes sil ik foarbylden fan konfiguraasjes jaan. Ferjit net de wearden te feroarjen nei jo eigen.
Dat litte wy begjinne:
Om Webogram út te fieren, hawwe wy nodejs nedich. Standert, as wy it ynstallearje fanút de Ubuntu-repositories, krije wy nodejs ferzje 8.x. Wy moatte 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Wy kieze it plak wêr't ús Webogram basearre sil wêze.
Litte wy it bygelyks yn 'e root fan' e thúsmap pleatse. Om dit te dwaan, klonje it offisjele repository nei ús server:
cd ~ && git clone https://github.com/zhukov/webogram.git
De folgjende stap is om alle ôfhinklikens te ynstallearjen dy't nedich binne om de applikaasje út te fieren:
cd webogram && npm install
Litte wy in proefrit besykje. Run it kommando:
npm start
Dêrnei besykje wy it te iepenjen yn 'e browser
http://10.23.0.3:8000/app/index.html
As jo oant dit punt alles goed dien hawwe, sil de webogram-autorisaasjeside iepenje.
No moatte wy de applikaasje konfigurearje om as tsjinst te rinnen. Om dit te dwaan, litte wy in bestân oanmeitsje
sudo touch /lib/systemd/system/webogram.service
iepenje it yn elke bewurker en jou it it folgjende uterlik (fier jo paad yn nei 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
Dan rinne wy de folgjende kommando's út:
It tapassen fan de feroarings
sudo systemctl daemon-reload
Autorun ynskeakelje:
sudo systemctl enable webogram.service
Litte wy de tsjinst begjinne:
sudo systemctl start webogram.service
Nei it foltôgjen fan de stappen sil Webogram fierder te krijen wêze op poarte 8000.
Om't wy tagong sille ynstelle foar ús Webogram fia nginx, sille wy poarte 8000 slute foar oanfragen fan bûten.
Wy brûke hjirfoar it udf-hulpprogramma (as elke metoade dy't jo handich is):
sudo ufw deny 8000
As jo noch beslute om udf te brûken, mar it is útskeakele op 'e tsjinner, foegje mear regels ta (dat alles net útinoar falt) en aktivearje udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Litte wy dan de nginx-konfiguraasje begjinne te feroarjen.
Lykas ik hjirboppe warskôge, wurdt oannommen dat in domein mei ssl al konfigurearre is op jo tsjinner. Ik sil jo oandacht allinich lûke op wat jo moatte wurde tafoege oan it domeinkonfiguraasjebestân om it goed te wurkjen:
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;
}
}
Wat wy tafoegje oan de nginx-konfiguraasje:
- Wy feroarje de root-lokaasje, dy't proxy-fersiken sil nei poarte 8000, wêrop Webogram reagearret
- Wy slute de root-lokaasje mei basic-auth. Dit is in suver symboalyske stap om ús applikaasje te sluten fan nijsgjirrige eagen en bots. (En ek om problemen mei blokkearjen te foarkommen)
- In boskje lokaasjes mei proxy_path op 'e Telegram-tsjinner binne krekt ús einpunten wêrmei't wy ús oanfragen sille proxy
Litte wy ek in bestân oanmeitsje /etc/nginx/passwd.htpasswd;
sadat nginx wat hat om brûkerswachtwurden te kontrolearjen.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
nginx opnij starte:
sudo systemctl restart nginx
No sil Webogram allinich beskikber wêze by
Der bliuwt net folle oer: wy meitsje lytse feroarings yn it projekt sels.
Iepenje de triem yn in bewurker ~/webogram/app/js/lib/mtproto.js
En bring it begjin oan 'e folgjende foarm:
/*!
* 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
}
...
Hjirnei moatte jo de applikaasjeside yn 'e browser ferfarskje.
Iepenje jo blêderkonsole en besjoch de netwurkoanfragen fan 'e applikaasje. As alles wurket en XHR-oanfragen nei jo server gean, dan wurdt alles goed dien, en Webogram wurdt no proxied fia nginx.
Ik hoopje dat dizze tutorial nuttich sil wêze foar immen oars neist my.
Tige tank oan elkenien dy't lêzen oant it ein.
As immen swierrichheden hat of ik haw ûnkrektiviteiten makke, sil ik graach antwurdzje en besykje jo te helpen yn 'e opmerkingen of yn PM.
Boarne: www.habr.com