Habari Habr!
Hivi majuzi nilijikuta katika hali ambayo ilikuwa ni lazima kufanya kazi ndani ya mtandao wa ushirika na ufikiaji usio kamili wa Mtandao na, kama unavyoweza kudhani kutoka kwa kichwa, Telegraph ilizuiwa ndani yake. Nina hakika kuwa hali hii inajulikana kwa wengi.
Ninaweza kufanya bila wajumbe wa papo hapo, lakini ilikuwa Telegramu ambayo nilihitaji kwa kazi. Haikuwezekana kufunga mteja kwenye mashine ya kazi, wala haikuwezekana kutumia kompyuta ya kibinafsi. Suluhisho lingine inaonekana kuwa kuitumia
Kwa bahati nzuri, Webogram ni mradi wa chanzo huria ambao msimbo wake wa chanzo unapatikana
Ufungaji na uzinduzi yenyewe sio ngumu, hata hivyo, katika hali ya uendeshaji ndani ya mtandao na ufikiaji uliozuiwa kwa seva za Telegraph, utakuwa na uwezekano mkubwa wa kukata tamaa kuliko kufanikiwa, kwani toleo la wavuti hutuma maombi kwa seva za Telegraph kutoka kwa mashine ya mtumiaji.
Kwa bahati nzuri, hii ni suluhisho rahisi (lakini sio dhahiri sana). Ningependa kukuonya kuwa mimi sio mwandishi wa suluhisho hili. Nilifanikiwa kuipata ndani
Chini ya kata hiyo utapata usanidi wa hatua kwa hatua wa kioo chako cha Webogram na usanidi wa kuwasilisha maombi yake kwa seva za Telegraph kwa kutumia nginx.
Kama mfano, nilichagua Ubuntu Server 18.04.3 iliyosanikishwa upya na kusasishwa.
Onyo: Mafunzo haya hayatajumuisha maagizo ya kusanidi kikoa katika nginx. Unahitaji kufanya hivi mwenyewe. Mafunzo yanachukulia kuwa tayari umesanidi kikoa na ssl, na kwamba seva yenyewe ambayo unapanga kusanidi ina ufikiaji wa seva za Telegraph (kwa njia yoyote unayopenda)
Hebu tuchukulie kuwa ip ya seva hii ni 10.23.0.3, na jina la kikoa ni mywebogram.localhost
Kulingana na mikataba hii, nitatoa mifano ya usanidi. Usisahau kubadilisha maadili kuwa yako mwenyewe.
Basi hebu tuanze:
Ili kuendesha Webogram, tunahitaji nodejs. Kwa chaguo-msingi, ikiwa tutaisakinisha kutoka kwa hazina za Ubuntu, tutapata nodejs toleo la 8.x. Tunahitaji 12.x:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Tunachagua mahali ambapo Webogram yetu itakuwa msingi.
Kwa mfano, wacha tuiweke kwenye mzizi wa saraka ya nyumbani. Ili kufanya hivyo, unganisha hazina rasmi kwa seva yetu:
cd ~ && git clone https://github.com/zhukov/webogram.git
Hatua inayofuata ni kusanikisha utegemezi wote unaohitajika kuendesha programu:
cd webogram && npm install
Wacha tujaribu kukimbia kwa jaribio. Endesha amri:
npm start
Baada ya hayo, tunajaribu kuifungua kwenye kivinjari
http://10.23.0.3:8000/app/index.html
Ikiwa hadi wakati huu umefanya kila kitu kwa usahihi, ukurasa wa idhini ya Webogram utafunguliwa.
Sasa tunahitaji kusanidi programu ili kuendesha kama huduma. Ili kufanya hivyo, hebu tuunda faili
sudo touch /lib/systemd/system/webogram.service
ifungue katika kihariri chochote na uipe mwonekano ufuatao (ingiza njia yako ya 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
Kisha tunaendesha amri zifuatazo:
Utekelezaji wa mabadiliko
sudo systemctl daemon-reload
Washa autorun:
sudo systemctl enable webogram.service
Wacha tuanze huduma:
sudo systemctl start webogram.service
Baada ya kukamilisha hatua, Webogram itaendelea kupatikana kwenye bandari 8000.
Kwa kuwa tutaweka mipangilio ya kufikia Webogram yetu kupitia nginx, tutafunga port 8000 kwa maombi kutoka nje.
Tunatumia matumizi ya udf kwa hili (au njia yoyote inayofaa kwako):
sudo ufw deny 8000
Iwapo bado utaamua kutumia udf, lakini imezimwa kwenye seva, ongeza sheria zaidi (ili kila kitu kisipunguke) na uwashe udf:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
Ifuatayo, wacha tuanze kubadilisha usanidi wa nginx.
Kama nilivyoonya hapo juu, inadhaniwa kuwa kikoa kilicho na ssl tayari kimesanidiwa kwenye seva yako. Nitavutia tu kile kitakachohitaji kuongezwa kwenye faili ya usanidi wa kikoa ili ifanye kazi kwa usahihi:
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;
}
}
Tunachoongeza kwenye usanidi wa nginx:
- Tunabadilisha eneo la msingi, ambalo litatuma maombi ya seva mbadala kwa port 8000, ambayo Webogram hujibu
- Tunafunga eneo la mizizi kwa kutumia msingi-auth. Hii ni hatua ya kiishara ya kufunga programu yetu kutoka kwa macho na roboti. (Na pia kuzuia shida na kuzuia)
- Maeneo mengi yaliyo na proxy_path kwenye seva ya Telegramu ndiyo miisho yetu hasa ambayo tutawakilisha maombi yetu.
Pia, wacha tuunde faili /etc/nginx/passwd.htpasswd;
ili nginx iwe na kitu cha kuangalia nywila za mtumiaji.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
Anzisha tena nginx:
sudo systemctl restart nginx
Sasa Webogram itapatikana tu kwa
Kuna kidogo kushoto: tutafanya mabadiliko madogo kwa mradi yenyewe.
Fungua faili katika kihariri ~/webogram/app/js/lib/mtproto.js
Na kuleta mwanzo wake kwa fomu ifuatayo:
/*!
* 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
}
...
Baada ya hayo, unahitaji kusasisha ukurasa wa programu kwenye kivinjari.
Fungua koni ya kivinjari chako na uangalie maombi ya mtandao ya programu. Ikiwa kila kitu kitafanya kazi na maombi ya XHR yanaenda kwa seva yako, basi kila kitu kinafanywa kwa usahihi, na Webogram sasa imeundwa kupitia nginx.
Natumai kuwa mafunzo haya yatakuwa na manufaa kwa mtu mwingine kando yangu.
Asante sana kwa wote waliosoma hadi mwisho.
Ikiwa mtu yeyote ana shida yoyote au nilifanya makosa yoyote, nitafurahi kujibu na kujaribu kukusaidia katika maoni au katika PM.
Chanzo: mapenzi.com