áá±áž áá¬á!
áááŒá¬áá±ážáá®á áá±á¬áºááá¯ááááºááœááºáááºáá áºáá¯ááœáẠá¡ááºáá¬áááºá¡áá¯á¶ážááŒá¯ááœáá·áºáááŒáá·áºáá®áá±á¬ áá±á¬áºááá¯ááááºááœááºáááºáá áºáá¯ááœáẠá¡áá¯ááºáá¯ááºááẠááá¯á¡ááºááá·áºá¡ááŒá±á¡áá±áá áºáá¯ááœáẠáá»áœááºá¯ááºááá¯ááºááá¯ááºááœá±á·ááŸááá²á·ááŒá®áž áá±á«ááºážá ááºá០ááá·áºááŸááºážááá¯ááºááá²á·ááá¯á· Telegram ááẠáááºážááœáẠááááºááá¯á·áá¶áá²á·ááá«áááºá áá®á¡ááŒá±á¡áá±ááᯠáá±á¬áºáá±á¬áºáá»á¬ážáá»á¬áž ááááŒá®ážáá¬ážááŒá áºááŸá¬ áá±áá»á¬áá«áááºá
instant messenger ááœá±ááá«áá² áá¯ááºááá¯á·ááá±ááá·áº á¡áá¯ááºá¡ááœáẠááá¯á¡ááºáá¬á Telegram áá«á á¡áá¯ááºá
ááºáá
áºáá¯ááœáẠáááá¯ááºážááá·áºááᯠááá·áºááœááºážááẠáááŒá
áºááá¯ááºáááᯠááá¯ááºááá¯ááºáááºááºáá±á¬á·ááá¯áááºáž á¡áá¯á¶ážááŒá¯ááẠáááŒá
áºááá¯ááºáá«á á¡ááŒá¬ážááŒá±ááŸááºážáááºážááŸá¬ áááºážááá¯á¡áá¯á¶ážááŒá¯áá¯á¶ááááºá
áá¶áá±á¬ááºážá
áœá¬ááŒáá·áºá Webogram ááẠá¡áááºážá¡ááŒá
áºáá¯ááºááœáẠáááŸáááá¯ááºááá·áº ááœáá·áºáááºážáá±á¬ á¡áááºážá¡ááŒá
áºááá±á¬áá»ááºáá
áºáá¯ááŒá
áºáááºá
áááºáááºááŒááºážááŸáá·áº á
áááºááŒááºážááá¯ááºááá¯ááºá ááááºáá²áá±á¬áºáááºážá Telegram áá¬áá¬áá»á¬ážááá¯á· ááááºááá¯á·áá¬ážáá±á¬ ááœááºáááºá¡ááœááºáž áááºáááºááŸá¯á¡ááŒá±á¡áá±áá»á¬ážááœááºá áááºáá¬ážááŸááºážááẠá¡áá¯á¶ážááŒá¯áá°áá
ááºá០Telegram áá¬áá¬áá»á¬ážááá¯á· áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá±ážááá¯á·áá±á¬ááŒá±á¬áá·áº á¡á±á¬ááºááŒááºáááºááẠááẠá
áááºáá»ááºááœááºááá¯áá»á¬ážáá«áááºá
áá¶áá±á¬ááºážá
áœá¬áá²á áá«á ááá¯ážááá¯ážááŸááºážááŸááºáž (áá«áá±ááá·áº ááááºááááá¬áá«áá°áž) ááŒá¯ááŒááºááŸá¯áá
áºáá¯áá«á áá»áœááºá¯ááºááẠá€ááŒá±ááŸááºážáá»ááºááᯠáá±ážáá¬ážáá°ááá¯ááºááŒá±á¬ááºáž ááááá±ážááá¯áá«áááºá áá»áœááºáá±á¬áº á¡á²áá«ááᯠááŸá¬ááá¯ááºáá²á·áááºá
ááŒááºáá±á¬ááºááŸá¯á¡á±á¬ááºááœáẠááá·áº Webogram mirror á á¡ááá·áºááá·áºáááºááŸááºááŸá¯ááŸáá·áº nginx ááᯠá¡áá¯á¶ážááŒá¯á Telegram áá¬áá¬áá»á¬ážááá¯á· áááºážááá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠproxy áá±ážááá¯á·ááŒááºážá¡á¬áž áááºááœá±á·ááá«áááºá
á¥ááá¬á¡áá±ááŒáá·áºá áá»áœááºá¯ááºááẠá¡áá
áºáááºáááºááŒá®áž á¡áá
áºááŒááºáááºáá¬ážáá±á¬ Ubuntu Server 18.04.3 ááᯠááœá±ážáá»ááºáá²á·áááºá
ááááá±ážáá»ááº: á€áááºáááºážá á¬ááœáẠnginx ááœáẠááá¯ááááºážáá áºáá¯áááºááŸááºááŒááºážááá¯ááºáᬠááœáŸááºááŒá¬ážáá»ááºáá»á¬áž ááá«áááºáá«á áá«ááᯠáááºááá¯ááºááá¯ááºáá¯ááºááááºá áááºáááºážá á¬ááœáẠáááºááẠssl ááŒáá·áº ááá¯ááááºážáá áºáá¯ááᯠconfigure áá¯ááºáá¬ážááŒá®ážááŒá áºááŒá±á¬ááºážááŸáá·áº áááºážááᯠconfigure áá¯ááºááẠá á®á ááºáá¬ážááá·áº áá¬áá¬ááá¯ááºááá¯ááºá Telegram áá¬áá¬áá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááŸáááẠ(áááºááŸá áºáááºááá·áºáááºážááŒáá·áº)á
á€áá¬áá¬á ip ááẠ10.23.0.3 ááŒá áºááŒá®áž ááá¯ááááºážá¡áááºááŸá¬ mywebogram.localhost áᯠáá°áááŒáá«á áá¯á·á
á€á ááºážáá±ážááŒá®ážáá»á¬ážááᯠá¡ááŒá±áá¶á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠáá»áœááºá¯áẠá¥ááá¬áá±ážáá«áááºá áááºááá¯ážáá»á¬ážááᯠááá·áºááá¯ááºááá¯ááºá¡ááŒá ẠááŒá±á¬ááºážáá²ááẠááá±á·áá«ááŸáá·áºá
áá²á·á áááºáááºááŒá áá¯á·:
Webogram ááᯠrun ááẠnodej áá»á¬áž ááá¯á¡ááºáá«áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áááºážááᯠUbuntu repositories á០install áá¯ááºáá«áá nodejs áá¬ážááŸááºáž 8.x ááᯠáááŸááá«áááºá 12.x ááá¯á¡ááºáááº
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
áá»áœááºá¯ááºááá¯á·á Webogram ááᯠá¡ááŒá±áá¶ááá·áºáá±áá¬ááᯠááœá±ážáá»ááºáá«á
á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááᯠhome directory á root ááœááºáá¬ážááŒáá«á áá¯á·á áááºážááá¯áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááá¬áá¬ááœááºááá¬ážáááºááá¯ááŸá±á¬ááºáá¬ážáá±á¬áá±áá¬á¡á¬áž áá¯á¶áá°ááœá¬ážáá«-
cd ~ && git clone https://github.com/zhukov/webogram.git
áá±á¬ááºáá áºááá·áºááŸá¬ á¡ááá®áá±ážááŸááºážááá¯áááºáááºááẠááá¯á¡ááºáá±á¬ ááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážáááºááŒá áºáááº-
cd webogram && npm install
á ááºážáá¯á¶ážááŒáá·áºáá¡á±á¬ááºá á¡áááá·áºááá¯ááœáá·áºáá«
npm start
ááá¯á·áá±á¬áẠbrowser ááœááºáááºážááá¯ááœáá·áºáááºááŒáá¯ážá á¬ážáááºá
http://10.23.0.3:8000/app/index.html
á€á¡áá»ááºá¡áá áááºááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºááŒá®ážáá«áá Webogram ááœáá·áºááŒá¯áá»áẠá á¬áá»ááºááŸá¬ááœáá·áºáá¬áááºááŒá áºáááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááẠá¡ááá®áá±ážááŸááºážááᯠááŒááºáááºáááºááŸááºááẠááá¯á¡ááºáá«áááºá áá®ááá¯áá¯ááºááá¯á·á ááá¯ááºáá áºáá¯áááºáá®ážááŒáá«á áá¯á·
sudo touch /lib/systemd/system/webogram.service
áááºááá·áº áááºážááŒááºááŸá¯ááœááºáááᯠááœáá·áºááŒá®áž á¡á±á¬ááºáá«áá¯á¶áááºážááá¹áá¬ááºááᯠáá±ážáá±á¬ááºáá« (áááºá 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
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá« command áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá
á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáá»áá·áºáá¯á¶ážááŒááºážá
sudo systemctl daemon-reload
autorun ááá¯ááœáá·áºáá«-
sudo systemctl enable webogram.service
áááºáá±á¬ááºááŸá¯ááᯠá ááá¯ááºáá¡á±á¬ááºá
sudo systemctl start webogram.service
á¡ááá·áºáá»á¬ážááŒá®ážáá«áá Webogram ááᯠport 8000 ááœáẠáááºáááºáááŸáááá¯ááºáááºááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠnginx ááŸáá áºááá·áº áá»áœááºá¯ááºááá¯á·á Webogram ááá¯á·áááºáá±á¬ááºááœáá·áºááᯠá áá áºááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áºá ááŒááºáááŸáá±á¬ááºážááá¯ááŸá¯áá»á¬ážá¡ááœáẠport 8000 ááᯠááááºáá«áááºá
á€á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠudf utility ááᯠá¡áá¯á¶ážááŒá¯ááẠ(ááá¯á·ááá¯áẠááá·áºá¡ááœáẠá¡áááºááŒá±ááá·áº áááºááá·áºáááºážáááºážááá¯áááá¯):
sudo ufw deny 8000
áááºááẠudf ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²ááŒá áºáá±á¬áºáááºáž áá¬áá¬ááœáẠááááºáá¬ážáá«áá á ááºážáá»ááºážáá»á¬áž áááºááá·áºáá« (á¡áá¬á¡á¬ážáá¯á¶áž ááœá²áááœá¬ážá á±áááº) ááŸáá·áº udf ááᯠááœáá·áºáá«-
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
ááá¯á·áá±á¬áẠnginx configuration ááᯠá áááºááŒá±á¬ááºážáá²ááŒáá«á áá¯á·á
á¡áááºááœáẠáá»áœááºá¯ááºááááá±ážáá¬ážááá·áºá¡ááá¯ááºážá ssl áá«áá±á¬ ááá¯ááááºážááᯠááá·áºáá¬áá¬ááœáẠááŒááºáááºááŒá®ážááŒá®áᯠáá°ááá«áááºá ááŸááºáááºá áœá¬á¡áá¯ááºáá¯ááºááá¯ááºá á±ááẠdomain configuration file ááœáẠááá·áºááœááºážáááá·áºá¡áá¬áá»á¬ážááá¯áᬠááá·áºá¡á¬áá¯á¶á áá¯ááºá á±áááº-
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;
}
}
nginx config ááœááºáá»áœááºá¯ááºááá¯á·ááá·áºáá±á¬á¡áá¬á
- Webogram á áá¯á¶á·ááŒááºááá·áº port 8000 ááá¯á· proxy áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº root áááºáá±áá¬ááᯠáá»áœááºá¯ááºááá¯á· ááŒá±á¬ááºážáá²áá«áááºá
- á¡ááŒá±áá¶-auth ááᯠá¡áá¯á¶ážááŒá¯á root áááºáá±áá¬ááᯠáá»áœááºá¯ááºááá¯á· ááááºáá«áááºá á€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááᯠáá±á¬ááºááœááºáá±áá±á¬áá»ááºáá¯á¶ážáá»á¬ážááŸáá·áº áá±á¬á·ááºáá»á¬ážáá¶ááŸááááºááẠááá¯ážááŸááºážáá±á¬áááºá¹áá±áá¡ááá·áºááŒá áºáááºá (ááááºááá¯á·ááŒááºážááŒá¿áá¬áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážáááº)
- Telegram áá¬áá¬ááŸá proxy_path áá«ááŸááá±á¬ áááºáá±áá¬á¡á á¯á¡áá±ážáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·ááá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠproxy áá±ážááá·áº áá»áœááºá¯ááºááá¯á·áá¡áá¯á¶ážááŸááºáá»á¬ážááŒá áºáááº
áá±á¬ááºááŒá®áž ááá¯ááºáá
áºáá¯áááºáá®ážááŒáá·áºáá¡á±á¬áẠ/etc/nginx/passwd.htpasswd;
ááá¯á·ááŒá±á¬áá·áº nginx ááœáẠá¡áá¯á¶ážááŒá¯áá° á
áá¬ážááŸááºáá»á¬ážááᯠá
á
áºáá±ážááẠáá
áºáá¯áᯠááŸááááºá
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
nginx ááᯠááŒááºáááºá
áááºáá«á
sudo systemctl restart nginx
ááᯠWebogram ááŸá¬áᬠáááá¯ááºáá«áááºá
á¡áááºážáááºáá¬áá»ááºáá±á¬á·áááº- áá»áœááºá¯ááºááá¯á·ááẠááá±á¬áá»ááºááá¯ááºááá¯ááºááœáẠááŒá±á¬ááºážáá²ááŸá¯á¡áááºážááẠááŒá¯áá¯ááºáá«áááºá
áááºážááŒááºáá°ááœáẠááá¯ááºááá¯ááœáá·áºáá«á ~/webogram/app/js/lib/mtproto.js
áááºážáá¡á ááᯠá¡á±á¬ááºáá«áá¯á¶á á¶ááá¯á· áá°áá±á¬ááºáá¬áá«á
/*!
* 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
}
...
áááºážááŒá®ážáá±á¬ááºá áááºááẠbrowser ááŸá application á á¬áá»ááºááŸá¬ááá¯ááŒááºáááºá áááºáááºááá¯á¡ááºáááºá
ááá·áºááá±á¬ááºáá¬ááœááºááá¯ážááºááá¯ááœáá·áºááŒá®áž á¡ááá®áá±ážááŸááºážáááœááºáááºáá±á¬ááºážááá¯áá»ááºáá»á¬ážááá¯ááŒáá·áºáá«á á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±ááŒá®áž XHR áá±á¬ááºážááá¯áá»ááºáá»á¬ážááẠááá·áºáá¬áá¬ááá¯á· áá±á¬ááºááœá¬ážáá«áá á¡á¬ážáá¯á¶ážááẠááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºááŒá®ážááŒá áºá Webogram ááẠááá¯á¡áá« nginx ááŸáá áºááá·áº proxied ááŒá áºáá±áá«áááºá
áá®áááºáááºážá
á¬á áá»áœááºáá±á¬á·áºá¡ááŒáẠá¡ááŒá¬ážáá
áºáá±á¬ááºáá±á¬ááºá¡ááœáẠá¡áá¯á¶ážáááºáááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
á¡áá¯á¶ážáááááºáá±ážáá²á·áá°ááá¯ááºážááᯠáá»á±ážáá°ážá¡áá»á¬ážááŒá®ážáááºáá«áááºá
áá
áºá
á¯á¶áá
áºáá±á¬ááºááœáẠá¡áááºá¡áá²áá»á¬ážááŸááá«á ááá¯á·ááá¯áẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážáá«ááŸááá²á·áá«á comment ááœááºááŒá
áºá
á± PM ááœááºááŒá
áºá
á± ááŒá±ááŒá¬ážáá±ážááŒááºážááŒáá·áº áááºážááŒá±á¬ááºáááºážáᬠááŒá±ááŒá¬ážáá±ážáááºááŒá
áºáá«áááºá
source: www.habr.com