Äau Habr!
Nesen es nokļuvu situÄcijÄ, kad bija jÄstrÄdÄ korporatÄ«vajÄ tÄ«klÄ ar nepilnÄ«gu piekļuvi internetam, un, kÄ jÅ«s varat nojaust no nosaukuma, Telegram tajÄ tika bloÄ·Äta. Esmu pÄrliecinÄts, ka Ŕī situÄcija daudziem ir pazÄ«stama.
Es varu iztikt bez tÅ«lÄ«tÄjiem kurjeriem, bet tÄ bija Telegram, kas man bija vajadzÄ«ga darbam. Klientu nebija iespÄjams instalÄt darba maŔīnÄ, kÄ arÄ« nebija iespÄjams izmantot personÄ«go portatÄ«vo datoru. Å Ä·iet, ka vÄl viens risinÄjums ir to izmantot
Par laimi Webogram ir atvÄrtÄ pirmkoda projekts, kura pirmkods ir pieejams
Pati instalÄÅ”ana un palaiÅ”ana nav grÅ«ta, tomÄr darbÄ«bas apstÄkļos tÄ«klÄ ar bloÄ·Ätu piekļuvi Telegram serveriem, visticamÄk, bÅ«siet vÄ«luÅ”ies nekÄ veiksmÄ«gi, jo tÄ«mekļa versija no lietotÄja maŔīnas nosÅ«ta pieprasÄ«jumus Telegram serveriem.
Par laimi, tas ir diezgan vienkÄrÅ”s (bet ne ļoti acÄ«mredzams) labojums. Es vÄlos jÅ«s brÄ«dinÄt, ka es neesmu Ŕī risinÄjuma autors. Man izdevÄs to atrast
Zem izgriezuma jÅ«s atradÄ«siet soli pa solim Webogram spoguļa iestatÄ«Å”anu un tÄ pieprasÄ«jumu starpniekservera iestatÄ«Å”anu Telegram serveriem, izmantojot nginx.
KÄ piemÄru es izvÄlÄjos tikko instalÄtu un atjauninÄtu Ubuntu Server 18.04.3.
BrÄ«dinÄjums: Å ajÄ apmÄcÄ«bÄ nav ietverti norÄdÄ«jumi par domÄna iestatÄ«Å”anu programmÄ nginx. Jums tas jÄdara paÅ”am. ApmÄcÄ«ba pieÅem, ka jÅ«s jau esat konfigurÄjis domÄnu ar ssl un ka serverim, kurÄ plÄnojat to konfigurÄt, ir piekļuve Telegram serveriem (jebkÄdÄ veidÄ, kÄ vÄlaties).
PieÅemsim, ka Ŕī servera IP ir 10.23.0.3 un domÄna nosaukums ir mywebogram.localhost
Pamatojoties uz Ŕīm konvencijÄm, es sniegÅ”u konfigurÄciju piemÄrus. Neaizmirstiet mainÄ«t vÄrtÄ«bas uz savÄm.
TÄpÄc sÄciet darbu:
Lai palaistu Webogram, mums ir nepiecieÅ”ami mezgli. PÄc noklusÄjuma, ja mÄs to instalÄjam no Ubuntu krÄtuvÄm, mÄs iegÅ«sim nodejs versiju 8.x. Mums ir nepiecieÅ”ams 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
MÄs izvÄlamies vietu, kur atradÄ«sies mÅ«su Webogramma.
PiemÄram, ievietosim to mÄjas direktorijas saknÄ. Lai to izdarÄ«tu, klonÄjiet oficiÄlo repozitoriju uz mÅ«su serveri:
cd ~ && git clone https://github.com/zhukov/webogram.git
NÄkamais solis ir instalÄt visas lietojumprogrammas palaiÅ”anai nepiecieÅ”amÄs atkarÄ«bas:
cd webogram && npm install
MÄÄ£inÄsim veikt testa braucienu. Palaidiet komandu:
npm start
PÄc tam mÄs mÄÄ£inÄm to atvÄrt pÄrlÅ«kprogrammÄ
http://10.23.0.3:8000/app/index.html
Ja lÄ«dz Å”im brÄ«dim esat visu izdarÄ«jis pareizi, tiks atvÄrta Webogram autorizÄcijas lapa.
Tagad mums ir jÄkonfigurÄ lietojumprogramma, lai tÄ darbotos kÄ pakalpojums. Lai to izdarÄ«tu, izveidosim failu
sudo touch /lib/systemd/system/webogram.service
atveriet to jebkurÄ redaktorÄ un pieŔķiriet tam Å”Ädu izskatu (ievadiet ceļu uz 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Äc tam mÄs izpildÄm Å”Ädas komandas:
IzmaiÅu piemÄroÅ”ana
sudo systemctl daemon-reload
IespÄjot automÄtisko palaiÅ”anu:
sudo systemctl enable webogram.service
SÄksim pakalpojumu:
sudo systemctl start webogram.service
PÄc darbÄ«bu veikÅ”anas Webogram joprojÄm bÅ«s pieejama portÄ 8000.
TÄ kÄ mÄs iestatÄ«sim piekļuvi mÅ«su Webogrammai, izmantojot nginx, mÄs slÄgsim 8000. portu, lai saÅemtu pieprasÄ«jumus no Ärpuses.
Å im nolÅ«kam mÄs izmantojam udf utilÄ«tu (vai jebkuru jums Ärtu metodi):
sudo ufw deny 8000
Ja joprojÄm nolemjat izmantot udf, bet tas ir atspÄjots serverÄ«, pievienojiet papildu noteikumus (lai viss nesabruktu) un iespÄjojiet udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
TÄlÄk sÄksim mainÄ«t nginx konfigurÄciju.
KÄ jau brÄ«dinÄju iepriekÅ”, tiek pieÅemts, ka jÅ«su serverÄ« jau ir konfigurÄts domÄns ar ssl. Es pievÄrsÄ«Å”u jÅ«su uzmanÄ«bu tikai tam, kas bÅ«s jÄpievieno domÄna konfigurÄcijas failam, lai tas darbotos pareizi:
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;
}
}
Ko mÄs pievienojam nginx konfigurÄcijai:
- MÄs mainÄm saknes atraÅ”anÄs vietu, kas nosÅ«tÄ«s starpniekservera pieprasÄ«jumus uz portu 8000, uz kuru Webogram atbild
- MÄs aizveram saknes atraÅ”anÄs vietu, izmantojot pamata autentifikÄciju. Å is ir tikai simbolisks solis, lai aizvÄrtu mÅ«su lietojumprogrammu no ziÅkÄrÄ«go acÄ«m un robotprogrammatÅ«ras. (Un arÄ« lai izvairÄ«tos no problÄmÄm ar bloÄ·ÄÅ”anu)
- Virkne atraÅ”anÄs vietu ar starpniekservera_ceļu Telegram serverÄ« ir tieÅ”i mÅ«su galapunkti, caur kuriem mÄs veicam savus pieprasÄ«jumus.
TÄpat izveidosim failu /etc/nginx/passwd.htpasswd;
lai nginx bÅ«tu ar ko pÄrbaudÄ«t lietotÄju paroles.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
RestartÄjiet nginx:
sudo systemctl restart nginx
Tagad Webogram būs pieejama tikai plkst
Palicis maz: veiksim nelielas izmaiÅas paÅ”Ä projektÄ.
Atveriet failu redaktorÄ ~/webogram/app/js/lib/mtproto.js
Un izveidojiet tÄ sÄkumu Å”ÄdÄ formÄ:
/*!
* 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Äc tam pÄrlÅ«kprogrammÄ ir jÄatsvaidzina lietojumprogrammas lapa.
Atveriet pÄrlÅ«kprogrammas konsoli un apskatiet lietojumprogrammas tÄ«kla pieprasÄ«jumus. Ja viss darbojas un XHR pieprasÄ«jumi tiek nosÅ«tÄ«ti uz jÅ«su serveri, tad viss tiek darÄ«ts pareizi, un Webogram tagad ir starpniekserveris, izmantojot nginx.
Ceru, ka Ŕī apmÄcÄ«ba noderÄs vÄl kÄdam, izÅemot mani.
Liels paldies visiem, kas izlasÄ«ja lÄ«dz beigÄm.
Ja kÄdam ir kÄdas grÅ«tÄ«bas vai pieļÄvu kÄdas neprecizitÄtes, labprÄt atbildÄÅ”u un mÄÄ£inÄÅ”u palÄ«dzÄt komentÄros vai PM.
Avots: www.habr.com