የWebogram ምሳሌያችንን በ nginx በኩል በመወከል እናነሳለን።

ሃይ ሀብር!

በቅርብ ጊዜ ውስጥ ራሴን አገኘሁት ባልተሟላ የኢንተርኔት አገልግሎት የኮርፖሬት ኔትወርክ ውስጥ መሥራት አስፈላጊ ሲሆን ከርዕሱ ላይ እንደምትገምቱት ቴሌግራም በውስጡ ታግዷል። ይህ ሁኔታ በብዙዎች ዘንድ የታወቀ እንደሆነ እርግጠኛ ነኝ።

ያለፈጣን መልእክተኞች ማድረግ እችላለሁ፣ ግን ለስራ የሚያስፈልገኝ ቴሌግራም ነበር። ደንበኛው በስራ ማሽን ላይ መጫን ወይም የግል ላፕቶፕ መጠቀም አይቻልም ነበር. ሌላው መፍትሔ እሱን መጠቀም ይመስላል ኦፊሴላዊ የድር ስሪት, ነገር ግን እርስዎ እንደሚገምቱት, እንዲሁም አይገኝም ነበር. ወዲያውኑ መደበኛ ያልሆነ መስታወት የመፈለግ ምርጫን አቋርጣለሁ (በተጨባጭ ምክንያቶች ተስፋ አደርጋለሁ)።

እንደ እድል ሆኖ፣ ዌቦግራም የምንጭ ኮድ በውስጡ የሚገኝ ክፍት ምንጭ ፕሮጀክት ነው። የፊልሙ ደራሲው (ለዚህም ብዙ ምስጋና ይግባው!)
መጫኑ እና ማስጀመር በራሱ ከባድ አይደለም ነገር ግን የቴሌግራም ሰርቨሮች መዳረሻ በተከለከለው አውታረ መረብ ውስጥ በሚሰሩበት ጊዜ የድር ስሪቱ ከተጠቃሚው ማሽን ወደ ቴሌግራም ሰርቨሮች ጥያቄዎችን ስለሚልክ ከስኬታማነቱ የበለጠ ሊያሳዝኑዎት ይችላሉ።

እንደ እድል ሆኖ, ይህ በጣም ቀላል (ግን በጣም ግልጽ ያልሆነ) ማስተካከያ ነው. የዚህ የመፍትሄ ሃሳብ ባለቤት እኔ እንዳልሆንኩ ላስጠነቅቅህ እወዳለሁ። ውስጥ ላገኘው ቻልኩ። ቅርንጫፍ, እሱም ከእኔ ጋር በሚመሳሰል ችግር ላይ ተወያይቷል. መፍትሄ በgithub ተጠቃሚ የተጠቆመ tecknojock, በጣም ረድቶኛል, ነገር ግን, ሌላ ሰው ሊረዳው እንደሚችል እርግጠኛ ነኝ, ስለዚህ ይህን ትምህርት ለመጻፍ ወሰንኩ.

ከመቁረጡ በታች የእርስዎን የዌቦግራም መስታወት ደረጃ በደረጃ ማዋቀር እና 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

የWebogram ምሳሌያችንን በ nginx በኩል በመወከል እናነሳለን።

nginxን እንደገና ያስጀምሩ:

sudo systemctl restart nginx

አሁን ዌቦግራም የሚገኘው በ ላይ ብቻ ነው። mywebogram.localhost/app/index.html የ htpasswd ትዕዛዙን ሲፈጥሩ ከገለጹት መግቢያ እና የይለፍ ቃል በኋላ ገብተዋል።

ትንሽ ይቀራል: በፕሮጀክቱ ላይ ትንሽ ለውጦችን እናደርጋለን.

ፋይሉን በአርታኢ ውስጥ ይክፈቱ ~/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 ተኪ ነው።

የWebogram ምሳሌያችንን በ nginx በኩል በመወከል እናነሳለን።

ይህ አጋዥ ስልጠና ከእኔ ሌላ ለሌላ ሰው ጠቃሚ እንደሚሆን ተስፋ አደርጋለሁ።

እስከ መጨረሻው ላነበቡት ሁሉ በጣም አመሰግናለሁ።

ማንም ሰው ችግር ቢያጋጥመኝ ወይም ስህተት ካደረኩ፣ በደስታ እመልስላታለሁ እና በአስተያየቶቹ ውስጥ ወይም በPM ልረዳዎ እሞክራለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ