Hey Habr!
Di van demên dawî de min xwe di rewşek de dît ku hewce bû ku di hundurê torgilokek pargîdanî de bi gihîştina netemamî ya Înternetê bixebitim û, wekî ku hûn ji sernavê texmîn dikin, Telegram tê de hate asteng kirin. Ez bawer im ku ev rewş ji bo gelek kesan nas e.
Ez dikarim bêyî qasidên tavilê bikim, lê ji bo xebatê ew Telegram bû. Ne mimkun bû ku xerîdar li ser makîneyek kar were saz kirin, ne jî ne gengaz bû ku meriv laptopek kesane bikar bîne. Çareyek din xuya dike ku ew bikar bînin , lê wek ku hûn dikarin texmîn bikin, ew jî tune bû. Ez tavilê vebijarka lêgerîna neynek nefermî derbas dikim (Ez ji ber sedemên diyar hêvî dikim).
Xwezî, Webogram projeyek çavkaniyek vekirî ye ku koda çavkaniyê tê de heye nivîskarê wê (Ji bo ku gelek spas ji wî re!)
Sazkirin û destpêkirina xwe ne dijwar e, di heman demê de, di şert û mercên xebitandinê de di nav torgilokek bi gihandina astengkirî ya serverên Telegram de, hûn ê bêtir ji serfiraziyê bêhêvî bibin, ji ber ku guhertoya webê ji makîneya bikarhêner daxwazan ji serverên Telegram re dişîne.
Xwezî, ev rastkirinek pir hêsan (lê ne pir eşkere) ye. Ez dixwazim we hişyar bikim ku ez ne nivîskarê vê çareseriyê me. Min karî wê tê de bibînim , ku pirsgirêkek mîna ya min nîqaş kir. Çareserî ji hêla bikarhênerê github ve hatî pêşniyar kirin , wê pir alîkariya min kir, lêbelê, ez bawer im ku ew dikare alîkariya kesek din bike, ji ber vê yekê min biryar da ku ez vê tutoriyê binivîsim.
Li jêr qutkirinê hûn ê gav-bi-gav sazkirina neynika Webogram-a xwe û sazkirina proxykirina daxwazên wê ji serverên Telegram re bi karanîna nginx bibînin.
Wekî mînak min yek nû sazkirî û nûvekirî hilbijart Ubuntu Server 18.04.3
Şaş Ev tutorial dê rêwerzên li ser sazkirina domainek di nginx de negire. Pêdivî ye ku hûn bi xwe vê yekê bikin. Tutorial texmîn dike ku we berê domainek bi ssl vesaz kiriye, û servera ku hûn plan dikin ku wê mîheng bikin bi xwe bigihîje serverên Telegram (bi her awayê ku hûn dixwazin)
Ka em bifikirin ku ip-ya vê serverê 10.23.0.3 e, û navê domainê mywebogram.localhost e.
Li ser bingeha van peymanan, ez ê nimûneyên mîhengan bidim. Ji bîr nekin ku nirxan li gorî xwe biguhezînin.
Ji bila dest bi dest pê dike:
Ji bo xebitandina Webogramê, pêdivîya me bi nodejs heye. Bi xwerû, heke hûn wê ji depoyan saz bikin Ubuntu — em ê nodejs guhertoya 8.x bistînin. Em hewceyê 12.x in:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejsEm cîhê ku dê Webograma me lê be hildibijêrin.
Mînakî, em wê di koka pelrêça malê de bi cîh bikin. Ji bo vê yekê, depoya fermî li servera me klon bikin:
cd ~ && git clone https://github.com/zhukov/webogram.gitPêngava paşîn ev e ku hûn hemî girêdanên ku ji bo xebitandina serîlêdanê hewce ne saz bikin:
cd webogram && npm installKa em ceribandinek ceribandinê biceribînin. Ferman bimeşîne:
npm startPiştî wê, em hewl didin ku wê di gerokê de vekin
http://10.23.0.3:8000/app/index.htmlGer heya vê gavê we her tişt rast kiribe, dê rûpela destûrnameya Webogram vebe.
Naha divê em serîlêdanê mîheng bikin ku wekî karûbar were xebitandin. Ji bo vê yekê, bila pelê çêbikin
sudo touch /lib/systemd/system/webogram.servicewê di her edîtorê de vekin û xuyangê jêrîn bidin wê (rêya xwe têkevin 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
Dûv re em fermanên jêrîn dimeşînin:
Serlêdana guhertinan
sudo systemctl daemon-reloadAutoun çalak bike:
sudo systemctl enable webogram.serviceKa em xizmetê dest pê bikin:
sudo systemctl start webogram.servicePiştî qedandina gavan, Webogram dê li porta 8000-ê peyda bibe.
Ji ber ku em ê bi nginx ve gihîştina Webogram-a xwe saz bikin, em ê porta 8000-ê ji bo daxwazên ji derve bigirin.
Em ji bo vê yekê karûbar udf bikar tînin (an jî rêbazek ji bo we rehet):
sudo ufw deny 8000Ger hûn hîn jî biryar bidin ku hûn udf-ê bikar bînin, lê ew li ser serverê neçalak e, qaîdeyên din lê zêde bikin (da ku her tişt ji hev nekeve) û udf çalak bikin:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enableDûv re, em dest bi guheztina veavakirina nginx bikin.
Wekî ku min li jor hişyar kir, tê texmîn kirin ku domainek bi ssl jixwe li ser servera we hatî mîheng kirin. Ez ê tenê bala we bikişînim ser tiştê ku dê hewce bike ku li pelê veavakirina domainê were zêdekirin da ku ew rast bixebite:
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;
}
}
Tiştê ku em li konfigurasyona nginx zêde dikin:
- Em cîhê root diguhezînin, ku dê ji porta 8000 re proxy bike, ku Webogram bersivê dide
- Em bi karanîna bingehîn-auth cîhê root digirin. Ev pêngavek bi tenê sembolîk e ku em serlêdana me ji çavên çav û botan bigire. (Û her weha ji bo ku pirsgirêkên astengkirinê dûr bixin)
- Komek cîhên bi proxy_path li ser servera Telegram-ê tam xalên dawiya me ne ku tê de em ê daxwazên xwe proxy bikin.
Di heman demê de, bila pelek çêbikin /etc/nginx/passwd.htpasswd;da ku nginx tiştek heye ku şîfreyên bikarhêner pê re kontrol bike.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg 
Nginx ji nû ve bidin destpêkirin:
sudo systemctl restart nginxNiha Webogram dê tenê li ser peyda bibe piştî têketin û şîfreya ku we dema çêkirina fermana htpasswd diyar kiriye têkevin.
Kêm maye: em ê guhertinên piçûk li projeyê bixwe bikin.
Pelê di edîtorê de vekin ~/webogram/app/js/lib/mtproto.js
Û destpêka wê bi forma jêrîn bînin:
/*!
* 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
}
...
Piştî vê yekê, hûn hewce ne ku rûpela serîlêdanê di gerokê de nûve bikin.
Konsolê geroka xwe vekin û li daxwazên torê yên serîlêdanê binêrin. Ger her tişt kar dike û daxwazên XHR diçin servera we, wê hingê her tişt rast tê kirin, û Webogram naha bi riya nginx ve tête kirin.

Ez hêvî dikim ku ev tutorial ji bilî min ji kesek din re kêrhatî be.
Gelek spas ji bo her kesê ku heya dawiyê xwend.
Ger kesek dijwariyek hebe an min xeletiyek çêkir, ez ê kêfxweş bibim ku bersiv bidim û hewl bidim ku di şîroveyan an di PM-ê de alîkariya we bikim.
Source: www.habr.com
