Эй Ҳабр!
Ба наздикӣ ман худро дар вазъияте пайдо кардам, ки дар дохили як шабакаи корпоративӣ бо дастрасии нопурра ба Интернет кор кардан лозим буд ва тавре ки шумо аз сарлавҳа тахмин мекунед, Telegram дар он баста шудааст. Боварй дорам, ки ин вазъият ба бисёриҳо шинос аст.
Ман бе мессенҷерҳои фаврӣ кор карда метавонам, аммо барои кор ман Telegram лозим буд. Мизочро ба дастгохи корй монтаж кардан, ноутбуки шахсиро истифода бурдан мумкин набуд. Ба назар чунин мерасад, ки ҳалли дигар ин истифодаи он аст
Хушбахтона, Webogram як лоиҳаи кушодаасос аст, ки рамзи сарчашмааш дар он дастрас аст
Худи насб ва ба кор андохтан душвор нест, аммо дар шароити кор дар дохили шабакае, ки дастрасии баста ба серверҳои Telegram аст, шумо эҳтимол бештар аз муваффақ шудан ноумед мешавед, зеро версияи веб дархостҳоро ба серверҳои Telegram аз мошини корбар мефиристад.
Хушбахтона, ин як ислоҳи хеле содда (вале на он қадар равшан) аст. Мехоҳам шуморо огоҳ кунам, ки ман муаллифи ин қарор нестам. Ман тавонистам онро дарёбам
Дар поёни буриш шумо қадам ба қадам насб кардани оинаи Webogram ва насби прокси-серверии дархостҳои онро ба серверҳои Telegram бо истифода аз nginx хоҳед ёфт.
Ҳамчун мисол, ман сервери Ubuntu 18.04.3-и нав насбшуда ва навшударо интихоб кардам.
Огоҳӣ: Ин дастур дастурҳоро оид ба таъсиси домен дар nginx дар бар намегирад. Шумо бояд ин корро худатон кунед. Дастурамал тахмин мекунад, ки шумо аллакай доменро бо ssl танзим кардаед ва худи сервере, ки шумо онро танзим кардан мехоҳед, ба серверҳои Telegram дастрасӣ дорад (бо ҳар роҳе, ки шумо мехоҳед)
Фарз мекунем, ки IP-и ин сервер 10.23.0.3 ва номи домени mywebogram.localhost аст.
Дар асоси ин конвенсияҳо ман мисолҳои конфигуратсияҳо хоҳам дод. Фаромӯш накунед, ки арзишҳоро ба худатон иваз кунед.
Биёед, одат кунем:
Барои иҷро кардани Webogram ба мо nodejs лозим аст. Бо нобаёнӣ, агар мо онро аз анбори Ubuntu насб кунем, мо версияи 8.x nodejs-ро мегирем. Ба мо 12.x лозим аст:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
Мо ҷойеро интихоб мекунем, ки дар он Webogram мо асос меёбад.
Масалан, биёед онро дар решаи директорияи хонагӣ ҷойгир кунем. Барои ин кор, анбори расмиро ба сервери мо клон кунед:
cd ~ && git clone https://github.com/zhukov/webogram.git
Қадами навбатӣ насб кардани ҳама вобастагӣ барои иҷро кардани барнома мебошад:
cd webogram && npm install
Биёед кӯшиш кунем, ки озмоишро иҷро кунем. Фармонро иҷро кунед:
npm start
Баъд аз ин, мо кӯшиш мекунем, ки онро дар браузер кушоем
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
Сипас, мо фармонҳои зеринро иҷро мекунем:
Татбиқи тағйирот
sudo systemctl daemon-reload
Фаъолсозии худкор:
sudo systemctl enable webogram.service
Биёед хидматро оғоз кунем:
sudo systemctl start webogram.service
Пас аз анҷоми қадамҳо, Webogram дар бандари 8000 дастрас хоҳад буд.
Азбаски мо дастрасӣ ба Webogram-и худро тавассути 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 илова мекунем:
- Мо макони решаро тағир медиҳем, ки дархостҳои проксиро ба порти 8000, ки Webogram ба он посух медиҳад, иваз мекунад
- Мо ҷойгиршавии решаро бо истифодаи basic-auth мепӯшем. Ин як қадами сирф рамзӣ барои бастани замимаи мо аз чашмони бегона ва ботҳо мебошад. (Ва инчунин барои пешгирӣ кардани мушкилот бо басташавӣ)
- Як қатор маконҳо бо proxy_path дар сервери Telegram маҳз нуқтаи ниҳоии мо мебошанд, ки тавассути онҳо мо дархостҳои худро прокси-сервер мекунем
Инчунин, биёед файл эҷод кунем /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 прокси карда мешавад.
Умедворам, ки ин дастур ба ғайр аз ман ба ягон каси дигар муфид хоҳад буд.
Ташаккури зиёд ба ҳамаи онҳое, ки то охир хонданд.
Агар касе душворӣ дошта бошад ё ман ягон хатогие дошта бошам, ман бо омодагӣ ҷавоб медиҳам ва кӯшиш мекунам, ки дар шарҳҳо ё PM ба шумо кӯмак расонам.
Манбаъ: will.com