ሃይ ሀብር!
በቅርብ ጊዜ ውስጥ ራሴን አገኘሁት ባልተሟላ የኢንተርኔት አገልግሎት የኮርፖሬት ኔትወርክ ውስጥ መሥራት አስፈላጊ ሲሆን ከርዕሱ ላይ እንደምትገምቱት ቴሌግራም በውስጡ ታግዷል። ይህ ሁኔታ በብዙዎች ዘንድ የታወቀ እንደሆነ እርግጠኛ ነኝ።
ያለፈጣን መልእክተኞች ማድረግ እችላለሁ፣ ግን ለስራ የሚያስፈልገኝ ቴሌግራም ነበር። ደንበኛው በስራ ማሽን ላይ መጫን ወይም የግል ላፕቶፕ መጠቀም አይቻልም ነበር. ሌላው መፍትሔ እሱን መጠቀም ይመስላል
እንደ እድል ሆኖ፣ ዌቦግራም የምንጭ ኮድ በውስጡ የሚገኝ ክፍት ምንጭ ፕሮጀክት ነው።
መጫኑ እና ማስጀመር በራሱ ከባድ አይደለም ነገር ግን የቴሌግራም ሰርቨሮች መዳረሻ በተከለከለው አውታረ መረብ ውስጥ በሚሰሩበት ጊዜ የድር ስሪቱ ከተጠቃሚው ማሽን ወደ ቴሌግራም ሰርቨሮች ጥያቄዎችን ስለሚልክ ከስኬታማነቱ የበለጠ ሊያሳዝኑዎት ይችላሉ።
እንደ እድል ሆኖ, ይህ በጣም ቀላል (ግን በጣም ግልጽ ያልሆነ) ማስተካከያ ነው. የዚህ የመፍትሄ ሃሳብ ባለቤት እኔ እንዳልሆንኩ ላስጠነቅቅህ እወዳለሁ። ውስጥ ላገኘው ቻልኩ።
ከመቁረጡ በታች የእርስዎን የዌቦግራም መስታወት ደረጃ በደረጃ ማዋቀር እና nginxን በመጠቀም ጥያቄዎቹን ለቴሌግራም አገልጋዮች ማዋቀር ያገኛሉ።
እንደ ምሳሌ አዲስ የተጫነ እና የዘመነ ኡቡንቱ አገልጋይ 18.04.3 መርጫለሁ።
ማስጠንቀቂያ ይህ አጋዥ ስልጠና በ nginx ውስጥ ጎራ ስለማዋቀር መመሪያዎችን አያካትትም። ይህንን እራስዎ ማድረግ ያስፈልግዎታል. አጋዥ ስልጠናው አንድን ጎራ በssl እንዳዋቀርከው እና እሱን ለማዋቀር ያሰብከው ሰርቨር ራሱ የቴሌግራም አገልጋዮችን (በፈለጉት መንገድ) ማግኘት እንደሚችል ያስባል።
የዚህ አገልጋይ አይፒ 10.23.0.3 እንደሆነ እናስብ፣ እና የዶራ ስሙ mywebogram.localhost ነው።
በእነዚህ ስምምነቶች ላይ በመመስረት, የማዋቀሮችን ምሳሌዎችን እሰጣለሁ. እሴቶቹን ወደ እራስዎ መለወጥዎን አይርሱ።
ስለዚህ እንጀምር:
ዌቦግራምን ለማሄድ nodejs ያስፈልጉናል። በነባሪ፣ ከኡቡንቱ ማከማቻዎች ከጫንነው፣ 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
እስከዚህ ነጥብ ድረስ ሁሉንም ነገር በትክክል ካደረጉት, የ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
ደረጃዎቹን ከጨረሱ በኋላ ዌቦግራም በፖርት 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 ውቅረትን መለወጥ እንጀምር.
ከላይ እንዳስጠነቀቅኩት፣ 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 የተኪ ጥያቄዎችን ያደርጋል፣ እሱም ዌቦግራም ምላሽ ይሰጣል
- መሰረታዊ-አውትን በመጠቀም የስር መገኛን እንዘጋለን. ይህ መተግበሪያችንን ከሚታዩ አይኖች እና ቦቶች ለመዝጋት ሙሉ ምሳሌያዊ እርምጃ ነው። (እንዲሁም በማገድ ላይ ችግሮችን ለማስወገድ)
- በቴሌግራም አገልጋዩ ላይ ፕሮክሲ_ፓት ያለው ብዙ ቦታዎች በትክክል ጥያቄዎቻችንን የምንቀበልበት የመጨረሻ ነጥቦቻችን ናቸው።
እንዲሁም, ፋይል እንፍጠር /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 ልረዳዎ እሞክራለሁ።
ምንጭ: hab.com