Sonata - SIP ta'minlash serveri

Ta'minotni nima bilan solishtirishni bilmayman. Balki mushuk bilan? Busiz mumkin bo'lib tuyuladi, lekin u bilan bu biroz yaxshiroq. Ayniqsa, agar u ishlasa))

Muammoni shakllantirish:

  1. Men SIP telefonlarini tez, oson va xavfsiz sozlamoqchiman. Telefonni o'rnatishda va undan ham ko'proq uni qayta sozlashda.
  2. Ko'pgina sotuvchilar o'zlarining konfiguratsiya formatlariga, konfiguratsiyalarni yaratish uchun o'zlarining yordamchi dasturlariga va konfiguratsiyalarni himoya qilishning o'z usullariga ega. Va men hamma bilan muomala qilishni xohlamayman.
  3. Ko'pgina ta'minot echimlari, a) bitta sotuvchiga yoki bitta telefon tizimiga qaratilgan, b) amalga oshirish juda qiyin, juda ko'p skriptlar, parametrlar, brrr ...

3-bandga kelsak, men mukammal ta'minlash tizimlari mavjudligini izohlayman FreePBX uchun, FusionPBX uchun, Kazoo uchun, bu erda turli sotuvchilarning telefonlari uchun shablonlar ommaga ochiq. Tijoriy echimlar mavjud bo'lib, ularda turli ishlab chiqaruvchilarning telefonlarining ishlashini ta'minlash modulida sozlashingiz mumkin, masalan, Yeastar PBX.

Habré shuningdek, turli sotuvchilardan qurilmalarni sozlash bo'yicha retseptlarga to'la: vaqt, два. Ammo ular aytganidek, barcha tizimlarda halokatli nuqson bor. Shunday qilib, biz o'zimiz velosiped yasaymiz.

o'zingizning formatingiz

Xkcd-da aytganidek, agar siz 14 format bilan ishlashni xohlamasangiz - 15-chi bilan keling. Shuning uchun biz har qanday telefon uchun umumiy sozlamalardan foydalanamiz va o'zimizning json konfiguratsiya formatini yaratamiz.

Shunga o'xshash narsa:

{
   "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"
      }
   ]
}

Shunday qilib, har qanday telefonda siz mahalliy vaqt va SIP liniyalarini sozlashingiz kerak. Bu erda hamma narsa oddiy. Ko'proq misollarni ko'rishingiz mumkin shu yerda.

o'zingizning serveringizni ta'minlash

Ishlab chiqaruvchining qo'llanmalarida odatda shunday deyilgan: csv-ni oling, login-parol-mac-manzilingizni yozing, xususiy skriptimiz yordamida fayllarni yarating, ularni Apache veb-serveriga qo'ying va hamma narsa yaxshi bo'ladi.

Qo'llanmaning keyingi paragrafi odatda siz yaratilgan konfiguratsiya faylini shifrlashingiz mumkinligini aytadi.

Ammo bularning barchasi klassika. Smoothies va Twitter bilan zamonaviy yondashuv sizga Apache kabi kuchli bo'lmagan, faqat bitta kichik ishni bajaradigan tayyor veb-server yaratish kerakligini aytadi. Havola yordamida konfiguratsiyalarni yarating va yuboring.

Keling, shu erda to'xtab qolaylik va deyarli barcha SIP telefonlari endi http/https orqali konfiguratsiyalarni qabul qilishlari mumkinligini eslaylik, shuning uchun biz boshqa ilovalarni (ftp, tftp, ftps) ko'rib chiqmayapmiz. Keyin har bir telefon o'zining MAC manzilini biladi. Shuning uchun biz ikkita havola qilamiz: bitta shaxsiy - qurilma kalitiga asoslangan, ikkinchisi umumiy token va MAC manzili kombinatsiyasidan foydalangan holda ishlaydigan umumiy.

Bundan tashqari, men nol-konfiguratsiya haqida to'xtalmayman, ya'ni. telefonni noldan sozlash, ya'ni. siz uni tarmoqqa uladingiz va u ishlay boshladi. Yo'q, mening stsenariyimda siz uni tarmoqqa ulaysiz, dastlabki sozlashni amalga oshirasiz (uni provayder serveridan konfiguratsiyani qabul qilish uchun sozlang) va keyin pina colada ichasiz va ta'minlash orqali kerak bo'lganda telefonni qayta sozlaysiz. 66-variantni tarqatish DHCP serveriga tegishli.

Aytgancha, men "ta'minlash" deyishdan butunlay charchadim, shuning uchun bu so'z "ta'minlash" deb qisqartirildi, iltimos, meni tepmang.

Va yana bir narsa: bizning provayder serverimizda UI yo'q, ya'ni. foydalanuvchi interfeysi. Ehtimol, hozircha, lekin aniq emas, chunki ... Menga kerak emas. Ammo sozlamalarni saqlash/o'chirish, qo'llab-quvvatlanadigan sotuvchilar, modellar ro'yxatini olish uchun API mavjud, hamma narsa shafqatsiz spetsifikatsiya qonunlariga muvofiq tasvirlangan.

Nima uchun UI emas, API? Chunki Menda allaqachon o'z telefon tizimim bor, keyin menda hisobga olish ma'lumotlari manbai bor, u erda men ushbu ma'lumotlarni olishim, kerakli json-ni kompilyatsiya qilishim va uni provayder serverida nashr etishim kerak. Va provayder serveri, json faylida ko'rsatilgan qoidalarga muvofiq, agar qurilma to'g'ri bo'lmasa yoki ushbu jsonda ko'rsatilgan mezonlarga javob bermasa, kerakli qurilmaga o'z konfiguratsiyasini beradi yoki yo'q.

Sonata - SIP ta'minlash serveri

Ta'minlash mikroxizmati shunday bo'ldi. Chaqirildi sonata, manba kodi GitHub-da mavjud, shuningdek, mavjud tayyor docker tasviri, docker foydalanish misoli shu yerda.

Asosiy xususiyatlar:

  • har qanday holatda, vaqt bo'yicha konfiguratsiyaga kirish cheklangan, sukut bo'yicha 10 daqiqa. Agar konfiguratsiyani yana mavjud qilishni istasangiz, konfiguratsiyani qayta nashr qiling.

  • barcha sotuvchilar uchun bitta format, barcha sozlashlar sonatada olib tashlanadi, siz standartlashtirilgan json yuborasiz, mavjud bo'lgan har qanday uskunani sozlaysiz.

  • qurilmalarga berilgan barcha konfiguratsiyalar qayd qilinadi, barcha muammoli joylar jurnalda ko'rish va xatolarni ko'rish mumkin

  • Token bilan bitta umumiy havoladan foydalanish mumkin, har bir telefon mac manzilini ko'rsatish orqali o'z konfiguratsiyasini oladi. Yoki kalit orqali shaxsiy havola.

  • Telefonlarga konfiguratsiyalarni boshqarish (boshqarish) va ta'minlash (ta'minlash) uchun API'lar portlar bo'yicha bo'linadi.

  • Testlar. Chiqarilgan konfiguratsiya formatini tuzatish va konfiguratsiyani chiqarishning barcha odatiy holatlarini testlar bilan qamrab olish men uchun juda muhim edi. Shunday qilib, bularning barchasi aniq ishlaydi.

Kamchiliklari:

Hozircha Sonata ichida shifrlash hech qanday tarzda ishlatilmaydi. Bular. masalan, sonata oldiga nginx qo'yish orqali https-dan foydalanishni boshlashingiz mumkin. Ammo xususiy usullar hali qo'llanilmagan. Nega? Loyiha hali yosh, u o'zining birinchi yuzta qurilmasini ishga tushirdi. Va, albatta, men g'oyalar va fikr-mulohazalarni to'playman. Bundan tashqari, hamma narsani xavfsiz qilish uchun, tarmoqdagi konfiguratsiyalarni hidlab bo'lmasligi uchun, ehtimol ular bilan shifrlash kalitlari, tls va kirpi bilan bezovtalanishga arziydi, ammo bu davomi bo'ladi.

UI etishmasligi. Ehtimol, bu oxirgi foydalanuvchi uchun muhim kamchilikdir, lekin tizim ma'muri uchun konsol yordam dasturi to'liq huquqli dasturdan ko'ra muhimroqdir. Konsol yordam dasturini yaratish rejalari bor edi, lekin bu kerakmi yoki yo'qligini bilmaymanmi?

Nima oxir-oqibat?

Bir nechta telefon modellarini boshqarish uchun API bilan ta'minlash uchun kichik va oddiy veb-server.

Yana bir bor, bu qanday ishlashi kerak?

  1. Sonata o'rnatilmoqda.
  2. Biz json konfiguratsiyasini yaratamiz va uni sonatada nashr qilamiz.
  3. Keyin biz sonatadan ta'minlash havolasini olamiz.
  4. Keyin biz ushbu havolani telefonda ko'rsatamiz.
  5. Qurilma konfiguratsiyani yuklamoqda

Keyingi operatsiyada faqat ikkita bosqich mavjud:

  1. Biz json konfiguratsiyasini yaratamiz va uni sonatada nashr qilamiz
  2. Qurilma konfiguratsiyani yuklamoqda

Qaysi telefonlar reklama qilinadi?

Grandstream, Fanvil, Yealink sotuvchilari. Sotuvchi ichidagi konfiguratsiyalar ko'proq yoki kamroq bir xil, ammo proshivkaga qarab farq qilishi mumkin - qo'shimcha sinovdan o'tish kerak bo'lishi mumkin.

Qanday qoidalarni o'rnatishingiz mumkin?

Vaqt bo'yicha. Konfiguratsiya mavjud bo'lguncha vaqtni belgilashingiz mumkin.
Mac manzili bo'yicha. Konfiguratsiya qurilmaning shaxsiy havolasi orqali yuborilganda, Mac manzili ham tekshiriladi.
IP orqali. So'rov yuborilgan IP manzili bo'yicha.

Sonata bilan qanday aloqa qilish kerak?

API orqali http so'rovlarini amalga oshirish. API sizning o'rnatishingizda mavjud bo'ladi. Chunki API swagger spetsifikatsiyasini qo'llab-quvvatlaydi, siz foydalanishingiz mumkin onlayn yordam dasturi API uchun test so'rovlari uchun.

OK, ajoyib. Ajoyib narsalar, sinab ko'rsak-chi?

Eng oson yo'li - omborga asoslangan docker tasvirini joylashtirish sonata-namuna. Omborda o'rnatish bo'yicha ko'rsatmalar mavjud.

Agar men node.js faylini bilsam-chi?

Agar sizda JavaScript-dan foydalanish tajribangiz bo'lsa, bu erda hamma narsa qanday ishlashini tezda bilib olasiz.

Sonata ishlanmasi bo'ladimi?

Maqsadlarimga qisman erishdim. Keyingi rivojlanish telefonni sozlashni avtomatlashtirish mavzusidagi mening vazifalarim masalasidir. Shuningdek, telefon tugmachalarini sozlash uchun konfiguratsiyalarni kengaytirish, manzillar kitobini tayyorlashni qo'shish va ehtimol boshqa narsalarni sharhlarda yozish imkoniyati mavjud.

Xulosa va minnatdorchilik

Men konstruktiv takliflar/e'tirozlar/izohlar va savollarimdan xursand bo'laman, chunki... Ehtimol, u nimanidir tushunarsiz tasvirlab bergandir.

Shuningdek, yordam bergan, maslahat bergan, sinovdan o'tkazgan va testlar uchun telefonlar taqdim etgan/ehson qilgan barcha hamkasblarimga o'z minnatdorchiligimni bildiraman. Aslida, men ish joyida muloqot qilgan ko'plab odamlar loyihada turli darajada ishtirok etishgan, AsterConf'e, chatlar va elektron pochta xabarlarida. Fikr va mulohazalar uchun rahmat.

Manba: www.habr.com

a Izoh qo'shish