Hej Habr!
Kohët e fundit u gjenda në një situatë në të cilën ishte e nevojshme të punoja brenda një rrjeti korporativ me qasje jo të plotë në internet dhe, siç mund ta merrni me mend nga titulli, Telegram ishte i bllokuar në të. Jam i sigurt se kjo situatë është e njohur për shumë njerëz.
Mund të bëj pa mesazhe të çastit, por ishte Telegrami që më duhej për punë. Nuk ishte e mundur të instalohej klienti në një makinë pune dhe as të përdorej një laptop personal. Një zgjidhje tjetër duket se është përdorimi i tij
Për fat të mirë, Webogram është një projekt me burim të hapur, kodi burimor i të cilit është i disponueshëm në
Instalimi dhe nisja në vetvete nuk është e vështirë, megjithatë, në kushtet e funksionimit brenda një rrjeti me akses të bllokuar në serverët e Telegram, do të keni më shumë gjasa të zhgënjeheni sesa të suksesshëm, pasi versioni në internet dërgon kërkesa në serverët e Telegram nga makina e përdoruesit.
Për fat të mirë, ky është një rregullim mjaft i thjeshtë (por jo shumë i dukshëm). Dua t'ju paralajmëroj se nuk jam unë autori i kësaj zgjidhjeje. Arrita ta gjej në
Nën prerjen do të gjeni konfigurimin hap pas hapi të pasqyrës suaj të Webogram dhe konfigurimin e proksimit të kërkesave të tij në serverët e Telegram duke përdorur nginx.
Si shembull, zgjodha një Server Ubuntu 18.04.3 të sapo instaluar dhe të përditësuar.
Warning: Ky tutorial nuk do të përmbajë udhëzime për konfigurimin e një domeni në nginx. Ju duhet ta bëni këtë vetë. Tutoriali supozon që ju keni konfiguruar tashmë një domen me ssl dhe se vetë serveri në të cilin planifikoni ta konfiguroni ka qasje në serverët e Telegram (në çfarëdo mënyre që ju pëlqen)
Le të supozojmë se ip-ja e këtij serveri është 10.23.0.3 dhe emri i domenit është mywebogram.localhost
Bazuar në këto konventa, unë do të jap shembuj të konfigurimeve. Mos harroni të ndryshoni vlerat në tuajat.
Pra, le të fillojmë:
Për të ekzekutuar Webogram, na duhen nodejs. Si parazgjedhje, nëse e instalojmë nga magazinat e Ubuntu, do të marrim versionin 8.x të nodejs. Ne kemi nevojë për 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Ne zgjedhim vendin ku do të bazohet uebgrami ynë.
Për shembull, le ta vendosim atë në rrënjën e drejtorisë kryesore. Për ta bërë këtë, klononi depon zyrtare në serverin tonë:
cd ~ && git clone https://github.com/zhukov/webogram.git
Hapi tjetër është të instaloni të gjitha varësitë e nevojshme për të ekzekutuar aplikacionin:
cd webogram && npm install
Le të provojmë një test test. Ekzekutoni komandën:
npm start
Pas kësaj, ne përpiqemi ta hapim atë në shfletues
http://10.23.0.3:8000/app/index.html
Nëse deri në këtë pikë keni bërë gjithçka në mënyrë korrekte, faqja e autorizimit të Webogram do të hapet.
Tani duhet të konfigurojmë aplikacionin që të funksionojë si shërbim. Për ta bërë këtë, le të krijojmë një skedar
sudo touch /lib/systemd/system/webogram.service
hapeni atë në çdo redaktues dhe jepni pamjen e mëposhtme (futni rrugën tuaj për 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
Pastaj ekzekutojmë komandat e mëposhtme:
Aplikimi i ndryshimeve
sudo systemctl daemon-reload
Aktivizo autorun:
sudo systemctl enable webogram.service
Le të fillojmë shërbimin:
sudo systemctl start webogram.service
Pas përfundimit të hapave, Webogram do të vazhdojë të jetë i disponueshëm në portin 8000.
Meqenëse do të konfigurojmë aksesin në Webogramin tonë nëpërmjet nginx, ne do të mbyllim portin 8000 për kërkesat nga jashtë.
Ne përdorim mjetin udf për këtë (ose ndonjë metodë të përshtatshme për ju):
sudo ufw deny 8000
Në rast se ende vendosni të përdorni udf, por është i çaktivizuar në server, shtoni më shumë rregulla (në mënyrë që gjithçka të mos prishet) dhe aktivizoni udf-në:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Më pas, le të fillojmë të ndryshojmë konfigurimin e nginx.
Siç paralajmërova më lart, supozohet se një domen me ssl është konfiguruar tashmë në serverin tuaj. Unë do të tërheq vëmendjen tuaj vetëm për atë që do të duhet të shtohet në skedarin e konfigurimit të domenit që ai të funksionojë siç duhet:
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ë i shtojmë konfigurimit nginx:
- Ne ndryshojmë vendndodhjen rrënjësore, e cila do të proxy kërkesat në portin 8000, në të cilën Webogram përgjigjet
- Ne mbyllim vendndodhjen e rrënjës duke përdorur basic-auth. Ky është një hap thjesht simbolik për të mbyllur aplikacionin tonë nga sytë kureshtarë dhe robotët. (Dhe gjithashtu për të shmangur problemet me bllokimin)
- Një mori vendndodhjesh me proxy_path në serverin e Telegram janë pikërisht pikat tona fundore përmes të cilave ne do të përcaktojmë kërkesat tona
Gjithashtu, le të krijojmë një skedar /etc/nginx/passwd.htpasswd;
në mënyrë që nginx të ketë diçka për të kontrolluar fjalëkalimet e përdoruesve.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Rinisni nginx:
sudo systemctl restart nginx
Tani Webogram do të jetë i disponueshëm vetëm në
Ka mbetur pak: do të bëjmë ndryshime të vogla në vetë projektin.
Hapni skedarin në një redaktues ~/webogram/app/js/lib/mtproto.js
Dhe sillni fillimin e tij në formën e mëposhtme:
/*!
* 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
}
...
Pas kësaj, duhet të rifreskoni faqen e aplikacionit në shfletues.
Hapni tastierën tuaj të shfletuesit dhe shikoni kërkesat e rrjetit të aplikacionit. Nëse gjithçka funksionon dhe kërkesat XHR shkojnë në serverin tuaj, atëherë gjithçka është bërë në mënyrë korrekte dhe Webogram tani është proksiuar përmes nginx.
Shpresoj që ky tutorial të jetë i dobishëm për dikë tjetër përveç meje.
Shumë faleminderit për të gjithë ata që lexuan deri në fund.
Nëse dikush ka ndonjë vështirësi ose kam bërë ndonjë pasaktësi, me kënaqësi do të përgjigjem dhe do të përpiqem t'ju ndihmoj në komente ose në PM.
Burimi: www.habr.com