Hei Habr!
Yn ddiweddar cefais fy hun mewn sefyllfa lle roedd angen gweithio y tu mewn i rwydwaith corfforaethol gyda mynediad anghyflawn i'r Rhyngrwyd ac, fel y gallwch chi ddyfalu o'r teitl, roedd Telegram wedi'i rwystro ynddo. Yr wyf yn siΕ΅r bod y sefyllfa hon yn gyfarwydd i lawer.
Gallaf wneud heb negeswyr gwib, ond Telegram oedd ei angen arnaf ar gyfer gwaith. Nid oedd yn bosibl gosod y cleient ar beiriant gwaith, ac nid oedd yn bosibl defnyddio gliniadur personol. Ymddengys mai ateb arall yw ei ddefnyddio
Yn ffodus, mae Webogram yn brosiect ffynhonnell agored y mae ei god ffynhonnell ar gael ynddo
Nid yw'r gosodiad a'r lansiad ei hun yn anodd, fodd bynnag, mewn amodau gweithredu o fewn rhwydwaith sydd Γ’ mynediad wedi'i rwystro i weinyddion Telegram, byddwch yn fwy tebygol o fod yn siomedig na llwyddiannus, gan fod y fersiwn we yn anfon ceisiadau at weinyddion Telegram o beiriant y defnyddiwr.
Yn ffodus, mae hwn yn ateb eithaf syml (ond nid yn amlwg iawn). Hoffwn eich rhybuddio nad fi yw awdur yr ateb hwn. Llwyddais i ddod o hyd iddo i mewn
O dan y toriad fe welwch setup cam wrth gam o'ch drych Webogram a setup o ddirprwyo ei geisiadau i weinyddion Telegram gan ddefnyddio nginx.
Fel enghraifft, dewisais Ubuntu Server 18.04.3 wedi'i osod a'i ddiweddaru'n ffres.
Rhybudd: Ni fydd y tiwtorial hwn yn cynnwys cyfarwyddiadau ar sefydlu parth yn nginx. Mae angen i chi wneud hyn eich hun. Mae'r tiwtorial yn tybio eich bod eisoes wedi ffurfweddu parth gyda ssl, a bod gan y gweinydd ei hun yr ydych yn bwriadu ei ffurfweddu arno fynediad i'r gweinyddwyr Telegram (mewn unrhyw ffordd y dymunwch)
Gadewch i ni dybio mai ip y gweinydd hwn yw 10.23.0.3, a'r enw parth yw mywebogram.localhost
Yn seiliedig ar y confensiynau hyn, rhoddaf enghreifftiau o ffurfweddiadau. Peidiwch ag anghofio newid y gwerthoedd i'ch rhai chi.
Felly gadewch i ni ddechrau:
I redeg Webogram, mae angen nodejs arnom. Yn ddiofyn, os byddwn yn ei osod o ystorfeydd Ubuntu, byddwn yn cael fersiwn nodejs 8.x. Mae angen 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Rydyn ni'n dewis y man lle bydd ein Webogram wedi'i seilio.
Er enghraifft, gadewch i ni ei roi yng ngwraidd y cyfeiriadur cartref. I wneud hyn, cloniwch yr ystorfa swyddogol i'n gweinydd:
cd ~ && git clone https://github.com/zhukov/webogram.git
Y cam nesaf yw gosod yr holl ddibyniaethau sydd eu hangen i redeg y cais:
cd webogram && npm install
Gadewch i ni roi cynnig ar redeg prawf. Rhedeg y gorchymyn:
npm start
Ar Γ΄l hynny, rydym yn ceisio ei agor yn y porwr
http://10.23.0.3:8000/app/index.html
Os ydych wedi gwneud popeth yn gywir hyd at y pwynt hwn, bydd tudalen awdurdodi Webogram yn agor.
Nawr mae angen i ni ffurfweddu'r rhaglen i redeg fel gwasanaeth. I wneud hyn, gadewch i ni greu ffeil
sudo touch /lib/systemd/system/webogram.service
agorwch ef mewn unrhyw olygydd a rhowch yr ymddangosiad canlynol iddo (nodwch eich llwybr i 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
Yna rydym yn rhedeg y gorchmynion canlynol:
Cymhwyso'r newidiadau
sudo systemctl daemon-reload
Galluogi autorun:
sudo systemctl enable webogram.service
Rydyn ni'n dechrau'r gwasanaeth:
sudo systemctl start webogram.service
Ar Γ΄l cwblhau'r camau, bydd Webogram yn parhau i fod ar gael ar borthladd 8000.
Gan y byddwn yn sefydlu mynediad i'n Webogram trwy nginx, byddwn yn cau porthladd 8000 ar gyfer ceisiadau o'r tu allan.
Rydym yn defnyddio cyfleustodau udf ar gyfer hyn (neu unrhyw ddull sy'n gyfleus i chi):
sudo ufw deny 8000
Rhag ofn eich bod yn dal i benderfynu defnyddio udf, ond ei fod wedi'i analluogi ar y gweinydd, ychwanegwch fwy o reolau (fel nad yw popeth yn disgyn yn ddarnau) a galluogi udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Nesaf, gadewch i ni ddechrau newid y ffurfwedd nginx.
Fel y rhybuddiais uchod, tybir bod parth gyda ssl eisoes wedi'i ffurfweddu ar eich gweinydd. Ni fyddaf ond yn tynnu eich sylw at yr hyn y bydd angen ei ychwanegu at y ffeil ffurfweddu parth er mwyn iddo weithio'n gywir:
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;
}
}
Yr hyn rydyn ni'n ei ychwanegu at y ffurfwedd nginx:
- Rydym yn newid lleoliad y gwraidd, a fydd yn gwneud ceisiadau dirprwy i borthladd 8000, y mae Webogram yn ymateb iddo
- Rydym yn cau'r lleoliad gwraidd gan ddefnyddio basic-auth. Mae hwn yn gam symbolaidd yn unig i gau ein cais rhag llygaid busneslyd a bots. (A hefyd i osgoi problemau gyda blocio)
- Mae criw o leoliadau gyda proxy_path ar y gweinydd Telegram yn union ein pwyntiau terfyn y byddwn yn dirprwyo ein ceisiadau trwyddynt
Hefyd, gadewch i ni greu ffeil /etc/nginx/passwd.htpasswd;
fel bod gan nginx rywbeth i wirio cyfrineiriau defnyddwyr ag ef.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Ailgychwyn nginx:
sudo systemctl restart nginx
Nawr bydd Webogram ond ar gael yn
Nid oes llawer ar Γ΄l: byddwn yn gwneud newidiadau bach i'r prosiect ei hun.
Agorwch y ffeil mewn golygydd ~/webogram/app/js/lib/mtproto.js
A dod Γ’'i ddechrau i'r ffurf ganlynol:
/*!
* 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
}
...
Ar Γ΄l hyn, mae angen i chi adnewyddu'r dudalen cais yn y porwr.
Agorwch eich consol porwr ac edrychwch ar geisiadau rhwydwaith y rhaglen. Os yw popeth yn gweithio a bod ceisiadau XHR yn mynd i'ch gweinydd, yna mae popeth yn cael ei wneud yn gywir, ac mae Webogram bellach yn cael ei ddirprwyo trwy nginx.
Rwy'n gobeithio y bydd y tiwtorial hwn yn ddefnyddiol i rywun arall ar wahΓ’n i mi.
Diolch yn fawr i bawb a ddarllenodd hyd y diwedd.
Os oes gan unrhyw un unrhyw anawsterau neu os gwnes unrhyw anghywirdebau, byddaf yn hapus i ateb a cheisio eich helpu yn y sylwadau neu yn PM.
Ffynhonnell: hab.com