Përshëndetje, Habr!
Pak kohe isha nĂ« njĂ« situatĂ« ku ishte e nevojshme tĂ« punoja brenda njĂ« rrjeti korporativ me akses tĂ« pjesshĂ«m nĂ« internet dhe siç mund ta imagjinoni nga titulli â Telegram ishte i bllokuar. Jam i sigurt qĂ« kjo situatĂ« Ă«shtĂ« e njohur pĂ«r shumĂ«.
UnĂ« mund tĂ« jetoj pa mesazherĂ«t, megjithatĂ«, pikĂ«risht Telegrami mĂ« nevojitej pĂ«r punĂ«. Instalimi i klientit nĂ« makinĂ«n e punĂ«s nuk ishte i mundur, as pĂ«rdorimi i laptopit personal. NjĂ« zgjidhje tjetĂ«r duket se Ă«shtĂ« pĂ«rdorimi i saj , por siç mund ta imagjinoni â ai gjithashtu ishte i paarritshĂ«m. Opsioni pĂ«r tĂ« gjetur njĂ« pasqyrĂ« jozyrtare e pĂ«rjashtoj menjĂ«herĂ« (shpresoj pĂ«r arsye tĂ« qarta).
Fatmirësisht, Webogram është një projekt opensource, kodi burimor i të cilit është i disponueshëm në autorin e tij (Për këtë i falënderoj shumë!)
Instalimi dhe fillimi nuk paraqet ndonjë vështirësi, megjithatë, në kushtet e përdorimit brenda një rrjeti me akses të bllokuar në serverët e Telegram-it, më shumë do ta shihni veten të zhgënjyer sesa të suksesshëm, pasi versioni në internet dërgon kërkesa në serverët e Telegram-it nga makina e përdoruesit.
Fatmirësisht, është mjaft e thjeshtë (por jo shumë e dukshme) ta rregulloni këtë. Dua të paralajmëroj se nuk jam autori i kësaj zgjidhjeje. Më rezultoi se e kam gjetur atë në , ku u diskutua një problem i ngjashëm me të mimin. Zgjidhja që ofroi përdoruesi i github , më ndihmoi shumë, megjithatë, jam i sigurt se mund ta ndihmojë edhe ndokënd tjetër, prandaj vendosa të shkruaj këtë udhëzues.
Pas katit do të gjeni një konfigurim hap pas hapi të pasqyrës tuaj Webogram dhe konfigurimin e ndërmjetësimit të kërkesave të saj deri në serverët e Telegram me përdorimin e nginx.
Si një shembull, zgjodha një Ubuntu Server 18.04.3 të sapo instaluar dhe të përditësuar.
Kujdes: Në këtë udhëzues nuk do të ketë instruksione për konfigurimin e domain-it në nginx. Kjo duhet ta bëni vetë. Udhëzuesi parashikon se ju tashmë keni vendosur një domain me ssl, si dhe serverin ku do të bëhet konfigurimi, ka akses në serverët e Telegram (me çdo mënyrë që ju pëlqen)
Supozoni se IP-ja e këtij serveri është 10.23.0.3, dhe emri i domain-it është mywebogram.localhost
Duke u bazuar në këto kushte, do të jap shembuj konfiguracionesh. Mos harroni të ndryshoni vlerat me të tuajat.
Pra, le të fillojmë:
PĂ«r tĂ« запŃŃĐșа Webogram, na nevojitet nodejs. Nga ana e parazgjedhjes, nĂ«se e instalojmĂ« atĂ« nga depozitĂ« Ubuntu - do tĂ« marim nodejs version 8.x. Ne na nevojitet version 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejsZgjedhim vendin ku do të bazohet Webogrami ynë.
Për shembull - do ta vendosim në rrënjën e drejtorisë shtëpiake. Për këtë, do të klonojmë depozitën zyrtare në serverin tonë:
cd ~ && git clone https://github.com/zhukov/webogram.gitHapi tjetër është të instalojmë të gjitha varësitë e nevojshme për të drejtuar aplikacionin:
cd webogram && npm installDo të përpiqemi të kryejmë një testim të hapjes. Ekzekutoni komandën:
npm startPasi të bëni këtë, provoni të hapni në shfletues
http://10.23.0.3:8000/app/index.htmlNëse deri në këto momente keni bërë gjithçka siç duhet - do t'ju hapet faqa e autentikimit të Webogram.
Tani na nevojitet të konfigurojmë nisjen e aplikacionit si një shërbim. Për këtë, do të krijojmë një skedar
sudo touch /lib/systemd/system/webogram.servicedo ta hapim atë në ndonjë redaktor dhe do t'i japim pamjen e mëposhtme (shkruani rrugën tuaj deri në 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
Pasi të kryeni këtë, ekzekutoni komandat e mëposhtme:
Për aplikimin e ndryshimeve
sudo systemctl daemon-reloadAktivizojmë nisjen automatike:
sudo systemctl enable webogram.serviceNisni shërbimin:
sudo systemctl start webogram.servicePas veprimeve të kryera, Webogram do të vazhdojë të jetë i aksesueshëm në portin 8000.
Duke marrë parasysh se do të konfigurojmë aksesin në Webogramin tonë përmes nginx - do të mbyllim portin 8000 për kërkesat nga jashtë.
Përdorim për këtë utilitarin udf (ose çdo mënyrë tjetër që ju përshtatet):
sudo ufw deny 8000Në rast se vendosni ende të përdorni udf, por ai është i çaktivizuar në server - shtoni disa rregulla të tjera (që gjithçka të mos prishet) dhe aktivizoni udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enableMë pas, do të nisim ndryshimin e konfiguracionit të nginx.
Siç e paralajmërova më lart - supozohet se në serverin tuaj është e konfiguruar një domain me ssl. Do t'ju tërheq vëmendjen vetëm se do të nevojitet të shtoni në skedarin e konfigurimit të domenit për funksionimin e duhur:
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;
}
}
ĂfarĂ« po shtojmĂ« nĂ« konfigurimin e nginx:
- Ndryshojmë lokacionin kryesor, i cili do të proksirojë kërkesat në portin 8000, për të cilin përgjigjet Webogram.
- Lokacioni kryesor e mbyllim me basic-auth. Ky është një hap simbolik, për të mbrojtur aplikacionin tonë nga shikuesit e huaj dhe robotët. (Gjithashtu, për të shmangur probleme me bllokimet)
- NjĂ« sĂ«rĂ« lokacionesh me proxy_path nĂ« serverat e Telegram â kĂ«to janĂ« pikĂ«risht endpointet tona, pĂ«rmes tĂ« cilave do tĂ« proksirojmĂ« kĂ«rkesat tona.
Po ashtu, do të krijojmë një skedë /etc/nginx/passwd.htpasswd;, në mënyrë që nginx të ketë me çfarë të verifikojë fjalëkalimet e përdoruesve.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg 
Rikthejmë nginx-in:
sudo systemctl restart nginxTani Webogram do të jetë i aksesueshëm vetëm në adresën pas përfundimit të identifikimit me emrin e përdoruesit dhe fjalëkalimin që keni përcaktuar gjatë krijimit të komandës htpasswd.
Na ngelën pak: do të bëjmë disa ndryshime në projektin vetë.
Hapni skedën në redaktorin ~/webogram/app/js/lib/mtproto.js
Dhe sillni fillimin e saj në këtë formë:
/*!
* 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
}
...
Pas kësaj, duhet të rifreskoni faqen e aplikacionit në shfletues.
Hapni konsolĂ«n e shfletuesit dhe shikoni kĂ«rkesat rrjetit tĂ« aplikacionit. NĂ«se gjithçka funksionon, dhe kĂ«rkesat XHR po shkojnĂ« nĂ« serverin tuaj â atĂ«herĂ« gjithçka Ă«shtĂ« bĂ«rĂ« siç duhet, dhe Webogram tani proksirohet pĂ«rmes nginx.

Shpresoj që ky udhëzues do të jetë i dobishëm për dikë tjetër përveç meje.
Faleminderit shumë për të gjithë ata që arritën ta lexojnë deri në fund.
NĂ«se ndokush ka hasur nĂ« vĂ«shtirĂ«si ose kam bĂ«rĂ« ndonjĂ« pasaktĂ«si â do tĂ« jem i lumtur tĂ« pĂ«rgjigjem dhe tĂ« pĂ«rpiqem t'ju ndihmoj nĂ« komentet ose nĂ« mesazhe private.
Burimi: habr.com
