Sonata - SIP қамтамасыз ету сервері

Мен қамтамасыз етуді немен салыстыру керектігін білмеймін. Мүмкін мысықпен? Онсыз мүмкін сияқты, бірақ онымен бұл сәл жақсырақ. Әсіресе егер ол жұмыс істесе))

Мәселені тұжырымдау:

  1. Мен SIP телефондарын жылдам, оңай және қауіпсіз орнатқым келеді. Телефонды орнату кезінде және одан да көп оны қайта конфигурациялау кезінде.
  2. Көптеген өндірушілердің конфигурация пішімдері, конфигурацияларды жасауға арналған өз утилиталары және конфигурацияларды қорғаудың өз тәсілдері бар. Ал мен барлығымен сөйлескім келмейді.
  3. Көптеген қамтамасыз ету шешімдері, а) бір жеткізушіге немесе бір телефон жүйесіне бағытталған, б) орындау өте қиын, көптеген сценарийлер, параметрлер, brrr...

3-тармаққа қатысты мен тамаша қамтамасыз ету жүйелері бар екенін түсіндіремін FreePBX үшін, FusionPBX үшін, Kazoo үшін, мұнда әртүрлі жеткізушілердің телефондарына арналған үлгілер жалпыға қолжетімді. Коммерциялық шешімдер бар, оларда әртүрлі өндірушілердің телефондарының жұмысын қамтамасыз ету модулінде конфигурациялауға болады, мысалы, Yeastar PBX.

Хабре сонымен қатар әртүрлі өндірушілердің құрылғыларын орнату туралы рецепттерге толы: рет, два. Бірақ олар айтқандай, барлық жүйелерде өлімге әкелетін кемшіліктер бар. Сонымен, біз өз велосипедімізді жасаймыз.

сіздің форматыңыз

Олар xkcd-де айтқандай, егер сіз 14 пішіммен айналысқыңыз келмесе - 15-імен келіңіз. Сондықтан біз кез келген телефон үшін жалпы параметрлерді қолданамыз және өзіміздің json конфигурация пішімін жасаймыз.

Сол сияқты бірнәрсе:

{
   "key": "sdgjdeu9443908",
   "token": "590sfdsf8u984",
   "model": "gxp1620",
   "vendor": "grandstream",
   "mac": "001565113af8",
   "timezone_offset": "GMT+03",
   "ntp_server": "pool.ntp.org",
   "status": true,
   "accounts": [
      {
         "name": "Мобилон",
         "line": 1,
         "sip_register": "sip.mobilonsip.ru",
         "sip_name": "sip102",
         "sip_user": "sip102",
         "sip_password": "4321",
         "sip_auth": "sip102"
      }
   ]
}

Сонымен, кез келген телефонда жергілікті уақыт пен SIP желілерін конфигурациялау қажет. Мұнда бәрі қарапайым. Сіз көбірек мысалдарды көре аласыз осында.

өзіңіздің серверіңізді қамтамасыз ету

Өндірушінің нұсқаулығында әдетте мына жер бар: csv алыңыз, логин-пароль-mac-мекен-жайыңызды жазыңыз, біздің меншіктік сценарийді пайдаланып файлдарды жасаңыз, оларды Apache веб-серверінің астына қойыңыз және бәрі жақсы болады.

Нұсқаулықтың келесі параграфы әдетте жасалған конфигурация файлын шифрлауға болатынын айтады.

Бірақ бұлардың бәрі классика. Smoothies және Twitter-ге заманауи көзқарас сізге Apache сияқты қуатты болмайтын, бірақ бір ғана кішкентай нәрсені жасайтын дайын веб-сервер жасау керек екенін айтады. Сілтемені пайдаланып конфигурацияларды жасаңыз және жіберіңіз.

Осы жерде тоқталайық және барлық дерлік SIP телефондары қазір http/https арқылы конфигурацияларды қабылдай алатынын есте ұстайық, сондықтан біз басқа енгізулерді (ftp, tftp, ftps) қарастырмаймыз. Содан кейін әрбір телефон өзінің MAC мекенжайын біледі. Сондықтан біз екі сілтеме жасаймыз: біреуі жеке - құрылғы кілтіне негізделген, екіншісі жалпы таңбалауыш пен MAC мекенжайының тіркесімін пайдалана отырып жұмыс істейтін жалпы.

Сондай-ақ, мен нөлдік конфигурацияға тоқталмаймын, яғни. телефонды нөлден орнату, яғни. сіз оны желіге қостыңыз және ол жұмыс істей бастады. Жоқ, менің сценарийімде сіз оны желіге қосасыз, алдын ала орнатуды жасайсыз (оны дайындау серверінен конфигурацияны алу үшін орнатасыз), содан кейін pina colada ішіп, телефонды дайындау арқылы қажетінше қайта конфигурациялайсыз. 66-параметрді тарату DHCP серверінің жауапкершілігі болып табылады.

Айтпақшы, мен «қамтамасыз ету» деп айтудан әбден шаршадым, сондықтан бұл сөз «қамтамасыз ету» болып қысқартылды, мені теппеңіз.

Тағы бір нәрсе: біздің серверде UI жоқ, яғни. пайдаланушы интерфейсі. Мүмкін, әзірше, бірақ сенімді емес, өйткені... Маған керек емес. Бірақ параметрлерді сақтауға/жоюға, қолдау көрсетілетін жеткізушілер тізімін, үлгілерді алуға арналған API бар, барлығы сваггер спецификациясының канондарына сәйкес сипатталған.

Неліктен UI емес, API? Өйткені Менің жеке телефон жүйесім бар, содан кейін менде тіркелгі деректерінің көзі бар, онда мен бұл деректерді алып, қажетті json компиляциясын және оны дайындау серверінде жариялауым керек. Ал қамтамасыз ету сервері json файлында көрсетілген ережелерге сәйкес қажетті құрылғыға оның конфигурациясын береді немесе құрылғы дұрыс болмаса немесе осы json файлында көрсетілген критерийлерге сәйкес келмесе, оны бермейді.

Sonata - SIP қамтамасыз ету сервері

Дайындау микросервисі осылай болды. Қоңырау шалды соната, бастапқы коды GitHub сайтында қол жетімді, сонымен қатар бар дайын докер кескіні, докерді пайдалану мысалы осында.

Басты ерекшеліктер:

  • кез келген жағдайда уақыт бойынша конфигурацияға қол жеткізу шектелген, әдепкі бойынша 10 минут. Конфигурацияны қайтадан қолжетімді еткіңіз келсе, конфигурацияны қайта жариялаңыз.

  • барлық жеткізушілер үшін бір пішім, барлық реттеулер сонатада жойылады, стандартталған json жібересіз, кез келген қолжетімді жабдықты конфигурациялаңыз.

  • құрылғыларға берілген барлық конфигурациялар журналға жазылады, журналда барлық проблемалық аймақтарды көруге және қателерді көруге болады

  • Токенмен бір ортақ сілтемені пайдалануға болады, әрбір телефон Mac мекенжайын көрсету арқылы өзінің конфигурациясын алады. Немесе кілт арқылы жеке сілтеме.

  • Телефондарға конфигурацияларды басқаруға (басқару) және қамтамасыз етуге (провизиялау) арналған API интерфейстері порттар бойынша бөлінген

  • Тесттер. Мен үшін берілген конфигурацияның пішімін түзету және конфигурацияны шығарудың барлық әдеттегі жағдайларын сынақтармен қамту өте маңызды болды. Мұның бәрі анық жұмыс істеуі үшін.

Кемшіліктері:

Әзірге Sonata ішінде шифрлау ешбір жолмен қолданылмайды. Анау. мысалы, сонатаның алдына nginx қою арқылы https пайдалануды бастауға болады. Бірақ меншікті әдістер әлі қолданылған жоқ. Неліктен? Жоба әлі жас, ол өзінің алғашқы жүз құрылғыларын іске қосты. Және, әрине, мен идеялар мен пікірлерді жинаймын. Әрі қарай, барлығын қауіпсіз ету үшін, конфигурацияларды желіде иіскеу мүмкін емес, олармен шифрлау кілттері, tls және кірпілермен алаңдаған жөн, бірақ бұл жалғасы болады.

UI болмауы. Мүмкін бұл соңғы пайдаланушы үшін айтарлықтай кемшілік, бірақ жүйелік әкімші үшін толыққанды қолданбадан гөрі консольдік утилита маңыздырақ. Консоль утилитасын жасау жоспарлары болды, бірақ мен оның қажет екеніне сенімді емеспін бе?

Ақырында не?

Басқаруға арналған API интерфейсі бар бірнеше телефон үлгілерін қамтамасыз етуге арналған шағын және қарапайым веб-сервер.

Тағы бір рет, бұл қалай жұмыс істеуі керек?

  1. Соната орнатылуда.
  2. Біз json конфигурациясын жасаймыз және оны сонатада жариялаймыз.
  3. Содан кейін біз сонатадан қамтамасыз ету сілтемесін аламыз.
  4. Содан кейін телефонда осы сілтемені көрсетеміз.
  5. Құрылғы конфигурацияны жүктеп жатыр

Келесі операцияда тек екі қадам бар:

  1. Біз json конфигурациясын жасаймыз және оны сонатада жариялаймыз
  2. Құрылғы конфигурацияны жүктеп жатыр

Қандай телефондар жарнамаланады?

Сатушылар Grandstream, Fanvil, Yealink. Жеткізушідегі конфигурациялар азды-көпті бірдей, бірақ микробағдарламаға байланысты әр түрлі болуы мүмкін - қосымша тексеру қажет болуы мүмкін.

Қандай ережелер орнатуға болады?

Уақыт бойынша. Конфигурация қол жетімді болатын уақытты көрсетуге болады.
Mac мекенжайы бойынша. Конфигурацияны құрылғының жеке сілтемесі арқылы жіберген кезде, Mac мекенжайы да тексеріледі.
ip арқылы. Сұраныс жасалған IP мекенжайы бойынша.

Sonata-мен қалай әрекеттесуге болады?

API арқылы http сұрауларын жасау. API орнатуыңызда қолжетімді болады. Өйткені API swagger спецификациясын қолдайды, сіз пайдалана аласыз онлайн қызметтік бағдарлама API үшін сынақ сұраулары үшін.

Жарайды, керемет. Керемет заттар, жасап көрсеңіз қалай?

Ең оңай жолы - репозиторийге негізделген докер кескінін орналастыру соната-үлгі. Репозиторийде орнату нұсқаулары бар.

Мен node.js білсем ше?

Егер сізде JavaScript пайдалану тәжірибеңіз болса, мұнда бәрі қалай жұмыс істейтінін тез түсінесіз.

Соната дамуы болады ма?

Мен өз мақсаттарыма жартылай жеттім. Әрі қарай дамыту - телефонды орнатуды автоматтандыру тақырыбы бойынша менің тапсырмаларымның мәселесі. Сондай-ақ, телефон түймелерін конфигурациялау үшін конфигурацияларды кеңейту мүмкіндігі бар, мекенжайлар кітабын қамтамасыз етуді қосу, мүмкін басқа нәрсе, түсініктемелерде жазыңыз.

Қорытынды және алғыс

Мен сындарлы ұсыныстар/қарсылықтар/пікірлер мен сұрақтар болса қуаныштымын, өйткені... Ол бір нәрсені түсініксіз сипаттаған болуы мүмкін.

Сондай-ақ, көмектескен, кеңес берген, сынақтан өткізген және тестілеуге телефон берген/сыйға берген барлық әріптестеріме алғысымды білдіремін. Шындығында, мен жұмыста сөйлескен көптеген адамдар жобаға әртүрлі дәрежеде қатысады, AsterConf'e, чаттар мен электрондық пошталарда. Идеялар мен ойларыңызға рахмет.

Ақпарат көзі: www.habr.com

пікір қалдыру