Ħej Habr!
Riċentement sibt ruħi f'sitwazzjoni li fiha kien meħtieġ li taħdem ġewwa netwerk korporattiv b'aċċess mhux komplut għall-Internet u, kif tistgħu taħsbu mit-titlu, Telegram kien imblukkat fih. Jiena ċert li din is-sitwazzjoni hija familjari għal ħafna.
Kapaċi nagħmel mingħajr messaġġiera instantanja, iżda kien Telegram li kelli bżonn għax-xogħol. Ma kienx possibbli li jiġi installat il-klijent fuq magna tax-xogħol, u lanqas ma kien possibbli li tuża laptop personali. Soluzzjoni oħra tidher li hija li tużaha
Fortunatament, Webogram huwa proġett ta 'sors miftuħ li l-kodiċi tas-sors tiegħu huwa disponibbli fih
L-installazzjoni u t-tnedija nnifisha mhix diffiċli, madankollu, f'kundizzjonijiet ta 'tħaddim f'netwerk b'aċċess imblukkat għal servers ta' Telegram, tkun aktar probabbli li tkun diżappuntat milli tirnexxi, peress li l-verżjoni tal-web tibgħat talbiet lil servers ta 'Telegram mill-magna tal-utent.
Fortunatament, din hija soluzzjoni pjuttost sempliċi (iżda mhux ovvja ħafna). Nixtieq inwisskom li m'iniex l-awtur ta' din is-soluzzjoni. Irnexxieli nsibha ġewwa
Taħt il-qatgħa ssib setup pass pass tal-mera tal-Webogram tiegħek u s-setup tal-prokurazzjoni tat-talbiet tagħha lil servers Telegram bl-użu ta 'nginx.
Bħala eżempju, għażilt Ubuntu Server 18.04.3 li għadu kif ġie installat u aġġornat.
Twissija: Dan it-tutorja mhux se jinkludi struzzjonijiet dwar it-twaqqif ta 'dominju f'nginx. Għandek bżonn tagħmel dan lilek innifsek. It-tutorja jassumi li diġà kkonfigurajt dominju b'ssl, u li s-server innifsu li fuqu qed tippjana li tikkonfigurah għandu aċċess għas-servers tat-Telegram (bi kwalunkwe mod li tixtieq)
Ejja nassumu li l-ip ta' dan is-server huwa 10.23.0.3, u l-isem tad-dominju huwa mywebogram.localhost
Ibbażat fuq dawn il-konvenzjonijiet, se nagħti eżempji ta 'konfigurazzjonijiet. Tinsiex tibdel il-valuri għal tiegħek.
Mela ejja nibdew:
Biex tmexxi Webogram, għandna bżonn nodejs. B'mod awtomatiku, jekk ninstallawha mir-repożitorji ta 'Ubuntu, se nġibu nodejs verżjoni 8.x. Għandna bżonn 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Aħna nagħżlu l-post fejn se jkun ibbażat il-Webogram tagħna.
Per eżempju, ejja poġġiha fl-għerq tad-direttorju tad-dar. Biex tagħmel dan, kklona r-repożitorju uffiċjali fuq is-server tagħna:
cd ~ && git clone https://github.com/zhukov/webogram.git
Il-pass li jmiss huwa li tinstalla d-dipendenzi kollha meħtieġa biex titħaddem l-applikazzjoni:
cd webogram && npm install
Ejja nippruvaw test run. Mexxi l-kmand:
npm start
Wara dan, nippruvaw niftħuha fil-browser
http://10.23.0.3:8000/app/index.html
Jekk sa dan il-punt għamilt kollox b'mod korrett, tinfetaħ il-paġna tal-awtorizzazzjoni tal-Webogram.
Issa rridu nikkonfiguraw l-applikazzjoni biex taħdem bħala servizz. Biex tagħmel dan, ejja noħolqu fajl
sudo touch /lib/systemd/system/webogram.service
iftaħ fi kwalunkwe editur u agħtiha d-dehra li ġejja (daħħal it-triq tiegħek għal 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
Imbagħad inħaddmu l-kmandi li ġejjin:
L-applikazzjoni tal-bidliet
sudo systemctl daemon-reload
Ippermetti awtorun:
sudo systemctl enable webogram.service
Ejja nibdew is-servizz:
sudo systemctl start webogram.service
Wara li tlesti l-passi, Webogram se jkompli jkun disponibbli fuq il-port 8000.
Peress li se nkunu qed inwaqqfu aċċess għall-Webogram tagħna permezz ta 'nginx, se nagħlqu l-port 8000 għal talbiet minn barra.
Aħna nużaw l-utilità udf għal dan (jew kwalunkwe metodu konvenjenti għalik):
sudo ufw deny 8000
Fil-każ li xorta tiddeċiedi li tuża l-udf, iżda hija diżattivata fuq is-server, żid aktar regoli (sabiex kollox ma jinfirex) u ppermetti l-udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Sussegwentement, ejja nibdew nibdlu l-konfigurazzjoni nginx.
Kif wissajt hawn fuq, huwa preżunt li dominju b'ssl huwa diġà kkonfigurat fuq is-server tiegħek. Se niġbed l-attenzjoni tiegħek biss għal dak li jkun jeħtieġ li jiżdied mal-fajl tal-konfigurazzjoni tad-dominju biex dan jaħdem b'mod korrett:
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;
}
}
Dak li nżidu mal-konfigurazzjoni nginx:
- Aħna nibdlu l-post ta 'l-għerq, li se jitlob prokura lill-port 8000, li fuqu Webogram jirrispondi
- Aħna nagħlqu l-post ta 'l-għerq billi tuża basic-auth. Dan huwa pass purament simboliku biex nagħlqu l-applikazzjoni tagħna minn għajnejn u bots. (U wkoll biex tevita problemi bl-imblukkar)
- Mazz ta 'postijiet bi proxy_path fuq is-server tat-Telegram huma eżattament l-endpoints tagħna li permezz tagħhom aħna nipprokuraw it-talbiet tagħna
Ukoll, ejja noħolqu fajl /etc/nginx/passwd.htpasswd;
sabiex nginx ikollu xi ħaġa biex jiċċekkja l-passwords tal-utent.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Ibda mill-ġdid nginx:
sudo systemctl restart nginx
Issa Webogram se jkun disponibbli biss fuq
Ftit fadal: se nagħmlu bidliet żgħar fil-proġett innifsu.
Iftaħ il-fajl f'editur ~/webogram/app/js/lib/mtproto.js
U ġib il-bidu tagħha għall-forma li ġejja:
/*!
* 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
}
...
Wara dan, jeħtieġ li jġedded il-paġna tal-applikazzjoni fil-browser.
Iftaħ il-console tal-browser tiegħek u ħares lejn it-talbiet tan-netwerk tal-applikazzjoni. Jekk kollox jaħdem u t-talbiet XHR imorru fuq is-server tiegħek, allura kollox isir b'mod korrett, u Webogram issa huwa proxy permezz ta 'nginx.
Nittama li dan it-tutorja jkun utli għal xi ħadd ieħor minbarra lili.
Grazzi ħafna lil kull min qara sal-aħħar.
Jekk xi ħadd ikollu xi diffikultajiet jew għamilt xi ineżattezzi, inkun kuntent inwieġeb u nipprova ngħinkom fil-kummenti jew fil-PM.
Sors: www.habr.com