اي حبر!
تازو مون پاڻ کي هڪ اهڙي صورتحال ۾ محسوس ڪيو جنهن ۾ اهو ضروري هو ته ڪارپوريٽ نيٽ ورڪ جي اندر ڪم ڪرڻ سان گڏ انٽرنيٽ تائين نامڪمل رسائي ۽، جيئن توهان عنوان مان اندازو لڳائي سگهو ٿا، ٽيليگرام ان ۾ بند ڪيو ويو. مون کي پڪ آهي ته هن صورتحال ڪيترن ئي کان واقف آهي.
مان بغير فوري پيغامن جي ڪري سگهان ٿو، پر اهو ٽيليگرام هو جنهن جي مون کي ڪم جي ضرورت هئي. اهو ممڪن نه هو ته ڪلائنٽ کي ڪم جي مشين تي نصب ڪرڻ، ۽ نه ئي اهو ممڪن هو ته هڪ ذاتي ليپ ٽاپ استعمال ڪرڻ. ٻيو حل لڳي ٿو ان کي استعمال ڪرڻ
خوش قسمت، ويبگرام هڪ اوپن سورس پروجيڪٽ آهي جنهن جو سورس ڪوڊ موجود آهي
انسٽاليشن ۽ لانچ پاڻ کي ڏکيو نه آهي، جڏهن ته، نيٽ ورڪ جي اندر آپريشن جي حالتن ۾ ٽيليگرام سرور تائين بند ٿيل رسائي سان، توهان ڪامياب ٿيڻ کان وڌيڪ مايوس ٿي ويندا، ڇاڪاڻ ته ويب ورزن صارف جي مشين کان ٽيليگرام سرورز ڏانهن درخواستون موڪلي ٿو.
خوش قسمت، هي هڪ بلڪل سادو آهي (پر بلڪل واضح ناهي) حل. مان توهان کي ڊيڄارڻ چاهيان ٿو ته مان هن حل جو ليکڪ نه آهيان. مان ان کي ڳولڻ ۾ ڪامياب ٿيس
هيٺ ڏنل ڪٽ توهان کي پنهنجي ويبگرام آئيني جو قدم قدم سيٽ اپ ملندو ۽ نينڪس استعمال ڪندي ٽيليگرام سرورز تي ان جي درخواستن کي پراکسي ڪرڻ جو سيٽ اپ.
مثال طور، مون تازو انسٽال ٿيل ۽ اپڊيٽ ڪيو Ubuntu سرور 18.04.3.
خبردار: هي سبق شامل نه هوندو nginx ۾ ڊومين قائم ڪرڻ تي هدايتون. توهان کي اهو پنهنجو پاڻ کي ڪرڻو پوندو. سبق فرض ڪري ٿو ته توهان اڳ ۾ ئي هڪ ڊومين کي ايس ايس ايل سان ترتيب ڏنو آهي، ۽ اهو سرور پاڻ جنهن تي توهان ان کي ترتيب ڏيڻ جو ارادو ڪيو آهي ٽيليگرام سرورز تائين رسائي آهي (ڪنهن به طريقي سان توهان چاهيو ٿا)
اچو ته فرض ڪريون ته هن سرور جو ip 10.23.0.3 آهي، ۽ ڊومين جو نالو آهي mywebogram.localhost
انهن ڪنوينشن جي بنياد تي، مان ترتيب ڏيڻ جا مثال ڏيندس. قدرن کي تبديل ڪرڻ نه وساريو پنھنجي لاءِ.
پوء اچو ته شروع ڪريون
ويبگرام کي هلائڻ لاء، اسان کي ضرورت آهي nodejs. ڊفالٽ طور، جيڪڏهن اسان ان کي Ubuntu repositories مان انسٽال ڪريون ٿا، اسان حاصل ڪنداسين 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
خودڪار هلائڻ کي فعال ڪريو:
sudo systemctl enable webogram.service
اچو ته خدمت شروع ڪريون:
sudo systemctl start webogram.service
مرحلن کي مڪمل ڪرڻ کان پوء، ويبگرام جاري رهندو بندرگاهه 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 ترتيب تبديل ڪرڻ شروع ڪريون.
جيئن مون مٿي خبردار ڪيو، اهو فرض ڪيو ويو آهي ته هڪ ڊومين سان ايس ايس ايل اڳ ۾ ئي ترتيب ڏنل آهي توهان جي سرور تي. مان صرف توهان جو ڌيان ان طرف ڏيندس ته ڊومين جي ٺاھ جوڙ واري فائل ۾ شامل ڪرڻ جي ضرورت پوندي ان کي صحيح ڪم ڪرڻ لاءِ:
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 پورٽ تي پراکسي جي درخواست ڪندو، جنھن تي ويبگرام جواب ڏيندو
- اسان بنيادي-تصوير استعمال ڪندي روٽ جي جڳھ کي بند ڪريون ٿا. هي هڪ خالص علامتي قدم آهي اسان جي ايپليڪيشن کي بند ڪرڻ لاءِ اکين ۽ بوٽن کان. (۽ پڻ بلاڪ ڪرڻ سان مسئلن کان بچڻ لاء)
- ٽيليگرام سرور تي 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/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 درخواستون توهان جي سرور ڏانهن وڃو، پوء هر شي صحيح طريقي سان ٿي چڪو آهي، ۽ ويبگرام هاڻي nginx ذريعي پروڪس ڪيو ويو آهي.
اميد اٿم ته هي سبق مون کان سواءِ ڪنهن ٻئي لاءِ ڪارآمد ثابت ٿيندو.
هر ڪنهن جي وڏي مهرباني جنهن آخر تائين پڙهيو.
جيڪڏهن ڪنهن کي ڪا به مشڪلات آهي يا مون ڪا غلطي ڪئي آهي، آئون جواب ڏيڻ ۾ خوش ٿيندس ۽ تبصرن ۾ يا PM ۾ توهان جي مدد ڪرڻ جي ڪوشش ڪندس.
جو ذريعو: www.habr.com