แฐแแ แฐแแแ !
แชแแขแ แฎแแแก แฌแแ แแฆแแแแฉแแแ แกแแขแฃแแชแแแจแ, แ แแแแกแแช แกแแญแแ แ แแงแ แแแ แแแ แแขแแฃแแ แฅแกแแแแก แจแแแแแ แแฃแจแแแแ แแแขแแ แแแขแแ แแ แแกแ แฃแแ แฌแแแแแแ แแ, แ แแแแ แช แกแแแแฃแ แแแแ แแแฎแแแแ, แแแกแจแ Telegram แแงแ แแแแแแแแแ. แแแ แฌแแฃแแแแฃแแ แแแ , แแก แกแแขแฃแแชแแ แแแแ แแกแแแแก แแแชแแแแแ.
แแ แจแแแแซแแแ แแงแแกแแแ แ แแแกแแแฏแแ แแแแก แแแ แแจแ, แแแแ แแ แแก แแงแ Telegram, แ แแแแแแช แแญแแ แแแแแแ แกแแแฃแจแแแ. แแแ แแแฎแแ แฎแแ แแแแแแขแแก แแแงแแแแแ แกแแแฃแจแแ แแแแฅแแแแแ แแ แแ แช แแแ แกแแแแแฃแ แ แแแแขแแแแก แแแแแงแแแแแ. แแแแ แ แแแแแกแแแแแ, แ แแแแ แช แฉแแแก, แแ แแก แแแกแ แแแแแงแแแแแ
แกแแแแแแแแ แแ, Webogram แแ แแก แฆแแ แแแแแก แแ แแแฅแขแ, แ แแแแแก แฌแงแแ แแก แแแแ แฎแแแแแกแแฌแแแแแแ
แแแแแ แแแกแขแแแแชแแ แแ แแแจแแแแ แแ แแ แแก แ แแฃแแ, แแฃแแชแ, Telegram แกแแ แแแ แแแแ แแแแแแแแแ แฌแแแแแแก แแฅแแแ แฅแกแแแจแ แแฃแจแแแแแก แแแ แแแแแจแ, แแฅแแแ แฃแคแ แ แแแขแแ แแแแแแแชแ แฃแแแฃแแ แแฅแแแแแ, แแแแ แ แฌแแ แแแขแแแฃแแ, แ แแแแแ แแแ แแแ แกแแ แแแแแแแแก แแแแฎแแแแแแก Telegram แกแแ แแแ แแแแ แแแแฎแแแ แแแแแก แแแแ แแขแแแแ.
แกแแแแแแแแ แแ, แแก แแ แแก แกแแแแแแ แแแ แขแแแ (แแแแ แแ แแ แ แซแแแแแ แแจแแแ แ) แแแแแกแฌแแ แแแ. แแแแแ แแแแแคแ แแฎแแแแ, แ แแ แแ แแ แแแ แแ แแแแแฌแงแแแขแแก แแแขแแ แ. แแ แแแแแฎแแ แฎแ แแแกแ แแแแแ
แญแ แแแแก แฅแแแแแ แแแฎแแแ แแฅแแแแ Webogram แกแแ แแแก แแแแแฏ-แแแแแฏ แแแงแแแแแแก แแ แแแกแ แแแแฎแแแแแแแก แแ แแฅแกแแก แแแงแแแแแแก Telegram แกแแ แแแ แแแแ nginx-แแก แแแแแงแแแแแแ.
แแแแแแแแแ, แแ แแแแ แฉแแ แแฎแแแ แแแแแกแขแแแแ แแแฃแแ แแ แแแแแฎแแแแฃแแ Ubuntu แกแแ แแแ แ 18.04.3.
แแแคแ แแฎแแแแแ: แแก แแแแแแแแแ แแ แจแแแชแแแก แแแกแขแ แฃแฅแชแแแก nginx-แจแ แแแแแแแก แแแงแแแแแแก แจแแกแแฎแแ. แแฅแแแ แแแแแแ แฃแแแ แแแแแแแแ แแก. แแแแแแแแแ แแแ แแฃแแแแก, แ แแ แแฅแแแ แฃแแแ แแแฅแแ แแแแคแแแฃแ แแ แแแฃแแ แแแแแแ ssl-แแ แแ แ แแ แแแแแ แกแแ แแแ แก, แ แแแแแแแแแช แแแแ แแแ แแแก แแแแคแแแฃแ แแชแแแก, แแฅแแก แฌแแแแแ Telegram-แแก แกแแ แแแ แแแแ (แแฅแแแแ แกแฃแ แแแแแกแแแแแ )
แแแแฃแจแแแ, แ แแ แแ แกแแ แแแ แแก IP แแ แแก 10.23.0.3, แฎแแแ แแแแแแแก แกแแฎแแแแ mywebogram.localhost
แแ แแแแแแแชแแแแแ แแแงแ แแแแแแ, แแ แแแแแงแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแแก. แแ แแแแแแแฌแงแแแ แแแแจแแแแแแแแแแก แจแแชแแแ.
แแกแ แ แแ, แแแแแฌแงแแ:
แแแแแแ แแแแก แแแกแแจแแแแแ, แฉแแแ แแแญแแ แแแแ nodejs. แแแแฃแแแกแฎแแแแแ, แแฃ แแแก Ubuntu-แก แกแแชแแแแแแแแ แแแแแแแกแขแแแแ แแแ, แแแแแฆแแแ 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
แฉแแแ แแแ แฉแแแ แแแแแแก, แกแแแแช แแแคแฃแซแแแแแ แฉแแแแ แแแแแแ แแแ.
แแแแแแแแแ, แแแแแ แแแแแแแแแกแแ แแก แแแแแแ แ แแแ แแฅแขแแ แแแจแ. แแแแกแแแแแก แแแแแแ แแ แแคแแชแแแแฃแ แ แกแแชแแแ แฉแแแแก แกแแ แแแ แแ:
cd ~ && git clone https://github.com/zhukov/webogram.git
แจแแแแแแ แแแแแฏแ แแ แแก แแแแแแแชแแแก แแแกแแจแแแแแ แกแแญแแ แ แงแแแแ แแแแแแแแแแฃแแแแแก แแแงแแแแแ:
cd webogram && npm install
แแแแแ แแชแแแแ แขแแกแขแแ แแแ. แแแฃแจแแแ แแ แซแแแแแ:
npm start
แแแแก แจแแแแแ, แฉแแแ แแชแแแแแแ แแแกแ แแแฎแกแแ แแ แแฃแแแ แจแ
http://10.23.0.3:8000/app/index.html
แแฃ แแ แแแแแแขแแแแ แงแแแแแคแแ แ แกแฌแแ แแ แแแแแแแแ, แแแแฎแกแแแแ แแแแแแ แแแแก แแแขแแ แแแแชแแแก แแแแ แแ.
แแฎแแ แฉแแแ แฃแแแ แแแแแแแแคแแแฃแ แแ แแ แแแแแแแชแแ, แ แแ แแแฃแจแแแก แ แแแแ แช แกแแ แแแกแ. แแแแกแแแแแก แจแแแฅแแแแ แคแแแแ
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
แจแแแแแ แฉแแแ แแแกแ แฃแแแแ แจแแแแแ แแ แซแแแแแแแก:
แชแแแแแแแแแแก แแแแแงแแแแแ
sudo systemctl daemon-reload
แฉแแ แแแ autorun:
sudo systemctl enable webogram.service
แแแแแฌแงแแ แกแแ แแแกแ:
sudo systemctl start webogram.service
แแแแแฏแแแแก แแแกแ แฃแแแแแก แจแแแแแ, Webogram แแแแแ แแฅแแแแ แฎแแแแแกแแฌแแแแแ 8000 แแแ แขแแ.
แแแแแแแแ แฉแแแ แแแแแแงแแ แแแ แฌแแแแแแก แฉแแแแก แแแแแแ แแแแแ nginx-แแก แกแแจแฃแแแแแแ, แฉแแแ แแแแฎแฃแ แแแ 8000 แแแ แขแก แแแ แแแแ แแแแฎแแแแแกแแแแก.
แแแแกแแแแแก แฉแแแ แแแงแแแแแ udf แแ แแแ แแแแก (แแ แแฅแแแแแแแก แแแกแแฎแแ แฎแแแแ แแแแแแก):
sudo ufw deny 8000
แแฃ แแแแแช แแแแแฌแงแแแขแ udf-แแก แแแแแงแแแแแแก, แแแแ แแ แแก แแแแแ แแฃแแแ แกแแ แแแ แแ, แแแแแแขแแ แแแขแ แฌแแกแแแ (แ แแ แงแแแแแคแแ แ แแ แแแแจแแแแก) แแ แฉแแ แแแ udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
แจแแแแแแ, แแแแแฌแงแแ nginx แแแแคแแแฃแ แแชแแแก แจแแชแแแ.
แ แแแแ แช แแแแแ แแแแแคแ แแฎแแแ, แแแ แแฃแแแแแ, แ แแ ssl แแแแแแ แฃแแแ แแแแคแแแฃแ แแ แแแฃแแแ แแฅแแแแก แกแแ แแแ แแ. แแ แแฎแแแแ แแฅแแแแก แงแฃแ แแแฆแแแแก แแแแแแแฎแแแแแ แแแแแ, แแฃ แ แ แฃแแแ แแแแแแขแแก แแแแแแแก แแแแคแแแฃแ แแชแแแก แคแแแแก, แ แแ แกแฌแแ แแ แแแฃแจแแแก:
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 แแแแคแแแฃแ แแชแแแก:
- แฉแแแ แแชแแแแ root แแแแแแ แแแแแก, แ แแแแแแช แแ แแฅแกแ แแแฎแแแก แแแ แขแก 8000, แ แแแแแแแช แแแแแแ แแแ แแแกแฃแฎแแแก
- แฉแแแ แแฎแฃแ แแแ root แแแแแแ แแแแแก basic-auth-แแก แแแแแงแแแแแแ. แแก แแ แแก แฌแแแแแ แกแแแแแแฃแ แ แแแแแฏแ แฉแแแแ แแแแแแแชแแแก แแแฎแฃแ แแแกแแแแก แชแแแแแกแแแงแแแ แ แแแแแแแแกแแแ แแ แแแขแแแแกแแแ. (แแ แแกแแแ แแแแแแแแแก แแ แแแแแแแแแก แแแแแแแ แแกแแชแแแแแแแ)
- แขแแแแแ แแแแก แกแแ แแแ แแ proxy_path-แแก แแฅแแแ แแแแแชแแแแแก แแแแแ แ แแแ แแ แแก แแฃแกแขแแ แฉแแแแ แแแแ แฌแแ แขแแแแแ, แ แแแแแแแแแช แฉแแแ แแแแแฎแแแแ แฉแแแแก แแแแฎแแแแแแก.
แแกแแแ, แจแแแฅแแแแ แคแแแแ /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
}
...
แแแแก แจแแแแแ, แแฅแแแ แฃแแแ แแแแแแฎแแแ แแแแแแแชแแแก แแแแ แแ แแ แแฃแแแ แจแ.
แแแฎแกแแแแ แแฅแแแแ แแ แแฃแแแ แแก แแแแกแแแ แแ แแแแแฎแแแแ แแแแแแแชแแแก แฅแกแแแแก แแแแฎแแแแแแก. แแฃ แงแแแแแคแแ แ แแฃแจแแแแก แแ XHR แแแแฎแแแแแแ แแแแแก แแฅแแแแก แกแแ แแแ แแ, แแแจแแ แงแแแแแคแแ แ แกแฌแแ แแ แแแแแแแ แแ Webogram แแฎแแ แแ แแฅแกแแแ แแแฃแแแ nginx-แแก แกแแจแฃแแแแแแ.
แแแแแ แแแฅแแก, แ แแ แแก แแแแแแแแแ แฉแแแก แแแ แแ แกแฎแแแกแแช แแแแแแแแแแ.
แแแแ แแแแแแแ แงแแแแแก แแแแช แแแแแแแ แฌแแแแแแฎแ.
แแฃ แแแแแแก แ แแแแ แฃแญแแ แก แแ แ แแแแ แฃแแฃแกแขแแแ แแแแฃแจแแ, แกแแแแแแแแแแ แแแแแกแฃแฎแแแ แแ แแแชแแแแ แแแแแฎแแแ แแ แแแแแแขแแ แแแจแ แแ แแ-แจแ.
แฌแงแแ แ: www.habr.com