Hæ Habr!
Nýlega lenti ég í aðstæðum þar sem nauðsynlegt var að vinna innan fyrirtækjanets með ófullkominn aðgang að internetinu og eins og þú getur giskað á af titlinum var Telegram lokað á því. Ég er viss um að þetta ástand kannast margir við.
Ég get verið án skyndiboða, en það var Telegram sem ég þurfti í vinnunni. Ekki var hægt að setja biðlarann á vinnuvél, né var hægt að nota persónulega fartölvu. Önnur lausn virðist vera að nota það
Sem betur fer er Webogram opið uppspretta verkefni þar sem frumkóði er fáanlegur í
Uppsetningin og ræsingin sjálf er ekki erfið, en við rekstrarskilyrði innan nets með lokaðan aðgang að Telegram netþjónum er líklegra að þú verðir fyrir vonbrigðum en árangri, þar sem vefútgáfan sendir beiðnir til Telegram netþjóna frá vél notandans.
Sem betur fer er þetta frekar einföld (en ekki mjög augljós) leiðrétting. Ég vil vara þig við því að ég er ekki höfundur þessarar lausnar. Mér tókst að finna það inn
Fyrir neðan klippuna finnurðu skref-fyrir-skref uppsetningu á Webogram speglinum þínum og uppsetningu á umboðsbeiðnum hans til Telegram netþjóna með því að nota nginx.
Sem dæmi valdi ég nýuppsettan og uppfærðan Ubuntu Server 18.04.3.
Viðvörun: Þessi kennsla mun ekki innihalda leiðbeiningar um að setja upp lén í nginx. Þú þarft að gera þetta sjálfur. Kennslan gerir ráð fyrir að þú hafir þegar stillt lén með ssl og að þjónninn sjálfur sem þú ætlar að stilla hann á hafi aðgang að Telegram netþjónum (á hvaða hátt sem þú vilt)
Gerum ráð fyrir að ip þessa netþjóns sé 10.23.0.3 og lénið sé mywebogram.localhost
Byggt á þessum samþykktum mun ég gefa dæmi um stillingar. Ekki gleyma að breyta gildunum í þitt eigið.
Svo skulum byrja:
Til að keyra Webogram þurfum við nodejs. Sjálfgefið, ef við setjum það upp frá Ubuntu geymslunum, munum við fá nodejs útgáfu 8.x. Við þurfum 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Við veljum staðinn þar sem vefritið okkar verður staðsett.
Til dæmis skulum við setja það í rót heimamöppunnar. Til að gera þetta, klónaðu opinberu geymsluna á netþjóninn okkar:
cd ~ && git clone https://github.com/zhukov/webogram.git
Næsta skref er að setja upp öll ósjálfstæði sem þarf til að keyra forritið:
cd webogram && npm install
Við skulum prófa prufuhlaup. Keyra skipunina:
npm start
Eftir það reynum við að opna það í vafranum
http://10.23.0.3:8000/app/index.html
Ef þú hefur gert allt rétt fram að þessu mun vefritsheimildarsíðan opnast.
Nú þurfum við að stilla forritið til að keyra sem þjónustu. Til að gera þetta, búum til skrá
sudo touch /lib/systemd/system/webogram.service
opnaðu það í hvaða ritstjóra sem er og gefðu því eftirfarandi útlit (sláðu inn slóðina þína í 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
Síðan keyrum við eftirfarandi skipanir:
Að beita breytingunum
sudo systemctl daemon-reload
Virkja sjálfvirka keyrslu:
sudo systemctl enable webogram.service
Við skulum hefja þjónustuna:
sudo systemctl start webogram.service
Eftir að skrefunum hefur verið lokið mun Webogram halda áfram að vera fáanlegt á port 8000.
Þar sem við munum setja upp aðgang að vefritinu okkar í gegnum nginx, munum við loka port 8000 fyrir beiðnir utan frá.
Fyrir þetta notum við udf tólið (eða hvaða aðferð sem er hentug fyrir þig):
sudo ufw deny 8000
Ef þú ákveður samt að nota udf, en það er óvirkt á þjóninum, bættu við fleiri reglum (svo að allt detti ekki í sundur) og virkjaðu udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Næst skulum við byrja að breyta nginx stillingum.
Eins og ég varaði við hér að ofan er gert ráð fyrir að lén með ssl sé þegar stillt á netþjóninum þínum. Ég mun aðeins vekja athygli þína á því sem þarf að bæta við lénsstillingarskrána til að hún virki rétt:
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;
}
}
Það sem við bætum við nginx stillinguna:
- Við breytum rótarstaðsetningunni, sem mun umboðsbeiðnir í port 8000, sem Webogram svarar
- Við lokum rótarstaðsetningunni með því að nota basic-auth. Þetta er eingöngu táknrænt skref til að loka forritinu okkar fyrir hnýsnum augum og vélmennum. (Og líka til að forðast vandamál með að loka)
- Fullt af stöðum með proxy_path á Telegram þjóninum eru einmitt endapunktar okkar þar sem við munum miðla beiðnum okkar
Við skulum líka búa til skrá /etc/nginx/passwd.htpasswd;
þannig að nginx hefur eitthvað til að athuga notendalykilorð með.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Endurræstu nginx:
sudo systemctl restart nginx
Nú verður Webogram aðeins fáanlegt kl
Það er lítið eftir: við munum gera litlar breytingar á verkefninu sjálfu.
Opnaðu skrána í ritstjóra ~/webogram/app/js/lib/mtproto.js
Og færðu upphaf þess í eftirfarandi form:
/*!
* 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
}
...
Eftir þetta þarftu að endurnýja forritasíðuna í vafranum.
Opnaðu vafraborðið þitt og skoðaðu netbeiðnir forritsins. Ef allt virkar og XHR beiðnir fara á netþjóninn þinn, þá er allt gert rétt og Webogram er nú umboðsmaður í gegnum nginx.
Ég vona að þessi kennsla nýtist einhverjum öðrum en mér.
Kærar þakkir til allra sem lásu til enda.
Ef einhver lendir í einhverjum erfiðleikum eða ég gerði einhverjar ónákvæmni, mun ég vera fús til að svara og reyna að hjálpa þér í athugasemdum eða í PM.
Heimild: www.habr.com