Hei Habr!
Äskettäin jouduin tilanteeseen, jossa piti työskennellä yritysverkon sisällä, jossa oli epätäydellinen pääsy Internetiin ja kuten otsikosta voi arvata, Telegram oli estetty siinä. Olen varma, että tämä tilanne on monelle tuttu.
Tulen toimeen ilman pikaviestimiä, mutta se oli Telegram, jota tarvitsin töihin. Asiakasta ei voitu asentaa työkoneelle, eikä myöskään henkilökohtaisen kannettavan tietokoneen käyttäminen. Toinen ratkaisu näyttää olevan sen käyttö
Onneksi Webogram on avoimen lähdekoodin projekti, jonka lähdekoodi on saatavilla
Itse asennus ja käynnistäminen ei ole vaikeaa, mutta käyttöolosuhteissa verkossa, jossa on estetty pääsy Telegram-palvelimiin, tulet todennäköisesti pettymään kuin onnistumaan, koska verkkoversio lähettää pyyntöjä Telegram-palvelimille käyttäjän koneelta.
Onneksi tämä on melko yksinkertainen (mutta ei kovin ilmeinen) korjaus. Haluaisin varoittaa, että en ole tämän ratkaisun kirjoittaja. Onnistuin löytämään sen sieltä
Leikkauksen alta löydät Webogram-peilin vaiheittaiset asetukset ja sen pyyntöjen välityspalvelimen asetukset Telegram-palvelimille nginxin avulla.
Esimerkkinä valitsin juuri asennetun ja päivitetyn Ubuntu Server 18.04.3:n.
Varoitus: Tämä opetusohjelma ei sisällä ohjeita verkkotunnuksen määrittämisestä nginxissä. Sinun on tehtävä tämä itse. Opetusohjelma olettaa, että olet jo määrittänyt verkkotunnuksen ssl:llä ja että palvelimella, jolle aiot määrittää sen, on pääsy Telegram-palvelimiin (millä tahansa tavalla).
Oletetaan, että tämän palvelimen IP-osoite on 10.23.0.3 ja verkkotunnuksen nimi on mywebogram.localhost
Näiden sopimusten perusteella annan esimerkkejä kokoonpanoista. Älä unohda muuttaa arvoja omiksi.
Joten aloitetaan:
Webogrammin suorittamiseksi tarvitsemme solmut. Oletuksena, jos asennamme sen Ubuntu-varastoista, saamme nodejs-version 8.x. Tarvitsemme 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Valitsemme paikan, jossa Webogrammemme sijaitsee.
Sijoitetaan se esimerkiksi kotihakemiston juureen. Tee tämä kloonaamalla virallinen arkisto palvelimellemme:
cd ~ && git clone https://github.com/zhukov/webogram.git
Seuraava vaihe on asentaa kaikki sovelluksen suorittamiseen tarvittavat riippuvuudet:
cd webogram && npm install
Kokeillaan koeajoa. Suorita komento:
npm start
Sen jälkeen yritämme avata sen selaimessa
http://10.23.0.3:8000/app/index.html
Jos olet tähän mennessä tehnyt kaiken oikein, Webogram-valtuutussivu avautuu.
Nyt meidän on määritettävä sovellus toimimaan palveluna. Tätä varten luodaan tiedosto
sudo touch /lib/systemd/system/webogram.service
avaa se missä tahansa editorissa ja anna sille seuraava ulkoasu (kirjoita polkusi WorkDirectoryyn)
[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
Sitten suoritamme seuraavat komennot:
Muutosten käyttöönotto
sudo systemctl daemon-reload
Ota automaattinen käynnistys käyttöön:
sudo systemctl enable webogram.service
Aloitetaan palvelu:
sudo systemctl start webogram.service
Kun vaiheet on suoritettu, Webogram on edelleen käytettävissä portissa 8000.
Koska määritämme pääsyn Webogrammiimme nginxin kautta, suljemme portin 8000 ulkopuolelta tulevilta pyynnöiltä.
Käytämme tähän udf-apuohjelmaa (tai mitä tahansa sinulle sopivaa menetelmää):
sudo ufw deny 8000
Jos päätät silti käyttää udf:ää, mutta se on poistettu käytöstä palvelimella, lisää sääntöjä (jotta kaikki ei hajoa) ja ota udf käyttöön:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Seuraavaksi aloitetaan nginx-kokoonpanon muuttaminen.
Kuten yllä varoitin, oletetaan, että ssl-verkkotunnus on jo määritetty palvelimellesi. Kiinnitän huomiosi vain siihen, mitä verkkotunnuksen määritystiedostoon on lisättävä, jotta se toimisi oikein:
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;
}
}
Mitä lisäämme nginx-konfiguraatioon:
- Muutamme juurisijaintia, joka välittää välityspalvelimen pyynnöt porttiin 8000, johon Webogram vastaa
- Suljemme juurisijainnin käyttämällä perustodennusta. Tämä on puhtaasti symbolinen vaihe sulkeaksemme sovelluksemme uteliailta katseilta ja boteilta. (Ja myös estoongelmien välttämiseksi)
- Joukko sijainteja, joissa on proxy_path Telegram-palvelimella, ovat täsmälleen päätepisteemme, joiden kautta välitämme pyyntömme
Luodaan myös tiedosto /etc/nginx/passwd.htpasswd;
jotta nginxillä on jotain millä tarkistaa käyttäjien salasanat.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Käynnistä nginx uudelleen:
sudo systemctl restart nginx
Nyt Webogram on saatavilla vain osoitteessa
Jäljellä on vähän: teemme pieniä muutoksia itse projektiin.
Avaa tiedosto editorissa ~/webogram/app/js/lib/mtproto.js
Ja tuo sen alku seuraavaan muotoon:
/*!
* 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
}
...
Tämän jälkeen sinun on päivitettävä sovellussivu selaimessa.
Avaa selainkonsoli ja katso sovelluksen verkkopyyntöjä. Jos kaikki toimii ja XHR-pyynnöt menevät palvelimellesi, kaikki tehdään oikein ja Webogram on nyt välitetty nginxin kautta.
Toivon, että tästä opetusohjelmasta on hyötyä jollekin muulle kuin minulle.
Suuri kiitos kaikille loppuun asti lukeneille.
Jos jollain on vaikeuksia tai tein epätarkkuuksia, vastaan mielelläni ja yritän auttaa kommenteissa tai PM:ssä.
Lähde: will.com