Sonata ā€” SIP nodroÅ”ināŔanas serveris

Es nezinu, ar ko salÄ«dzināt nodroÅ”ināŔanu. VarbÅ«t ar kaÄ·i? Å Ä·iet, ka bez tā ir iespējams, bet ar to ir nedaudz labāk. It Ä«paÅ”i, ja tas darbojas))

Problēmas formulējums:

  1. Es vēlos ātri, viegli un droÅ”i iestatÄ«t SIP tālruņus. Uzstādot tālruni, un vēl jo vairāk, pārkonfigurējot to.
  2. Daudziem piegādātājiem ir savi konfigurācijas formāti, savi utilÄ«ti konfigurāciju Ä£enerÄ“Å”anai un savi konfigurāciju aizsardzÄ«bas veidi. Un es nevēlos ar visiem saskarties.
  3. Daudzi nodroÅ”ināŔanas risinājumi, a) ir vērsti uz vienu piegādātāju vai vienu tālruņu sistēmu, b) ir diezgan apgrÅ«tinoÅ”i ievieÅ”ami, daudz skriptu, parametru, brrr...

AttiecÄ«bā uz 3. punktu es komentÄ“Å”u, ka ir lieliskas nodroÅ”ināŔanas sistēmas bezmaksas PBX, FusionPBX, par Kažoo, kur ir publiski pieejamas dažādu pārdevēju tālruņu veidnes. Ir komerciāli risinājumi, kur nodroÅ”inājuma modulÄ« var konfigurēt arÄ« dažādu ražotāju tālruņu darbÄ«bu, piemēram, Yeastar PBX.

HabrĆ© ir arÄ« pilns ar dažādu pārdevēju ierīču iestatÄ«Å”anas receptēm: laiks, Š“Š²Š°. Bet, kā saka, visām sistēmām ir liktenÄ«gs trÅ«kums. Tāpēc mēs paÅ”i izgatavosim velosipēdu.

savu formātu

Kā saka xkcd, ja nevēlaties nodarboties ar 14 formātiem - nāk klajā ar 15. Tāpēc mēs izmantojam vispārīgus iestatījumus jebkuram tālrunim un izveidojam savu json konfigurācijas formātu.

Kaut kas tamlīdzīgs:

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

Tātad jebkurā tālrunÄ« ir jākonfigurē vietējais laiks un SIP lÄ«nijas. Å eit viss ir vienkārÅ”i. JÅ«s varat redzēt vairāk piemēru Å”eit.

sava servera nodroŔināŔana

Ražotāja rokasgrāmatās parasti ir punkts, kur teikts: paņemiet csv, pierakstiet savu login-password-mac-adresi, ģenerējiet failus, izmantojot mūsu patentēto skriptu, ievietojiet tos Apache tīmekļa serverī un viss būs kārtībā.

Rokasgrāmatas nākamajā daļā parasti ir teikts, ka varat arÄ« Å”ifrēt Ä£enerēto konfigurācijas failu.

Bet tās visas ir klasikas. Mūsdienīgā pieeja ar smūtijiem un Twitter saka, ka jāuztaisa gatavs web serveris, kas nebūs tik jaudīgs kā Apache, bet darīs tikai vienu sīkumu. Ģenerējiet un nosūtiet konfigurācijas, izmantojot saiti.

Apstāsimies Å”eit un atcerēsimies, ka gandrÄ«z visi SIP tālruņi tagad var saņemt konfigurācijas, izmantojot http/https, tāpēc mēs neapsveram citas ievieÅ”anas iespējas (ftp, tftp, ftps). Tad katrs tālrunis zina savu MAC adresi. Tāpēc mēs izveidosim divas saites: vienu personisku - pamatojoties uz ierÄ«ces atslēgu, otru vispārÄ«go, kas darbojas, izmantojot kopÄ«ga marÄ·iera un MAC adreses kombināciju.

Tāpat nekavÄ“Å”os pie zero-config, t.i. tālruņa iestatÄ«Å”ana no nulles, t.i. jÅ«s to pievienojāt tÄ«klam, un tas sāka darboties. Nē, pēc mana scenārija jÅ«s pievienojat to tÄ«klam, veiciet sākotnējo iestatÄ«Å”anu (iestatiet to, lai saņemtu konfigurāciju no nodroÅ”ināŔanas servera), pēc tam dzeriet pina colada un pēc vajadzÄ«bas pārkonfigurējat tālruni, izmantojot nodroÅ”inājumu. Par 66. izplatÄ«Å”anas iespēju atbild DHCP serveris.

Starp citu, man ir pilnÄ«gi apnicis teikt ā€œnodroÅ”ināŔanaā€, tāpēc vārds tika saÄ«sināts uz ā€œnodroÅ”inājumsā€, lÅ«dzu, nesperiet mani.

Un vēl viena lieta: mÅ«su nodroÅ”inājuma serverim nav lietotāja interfeisa, t.i. lietotāja interfeiss. Iespējams, pagaidām, bet neesmu pārliecināts, jo... Man tas nav vajadzÄ«gs. Bet ir API iestatÄ«jumu saglabāŔanai/dzÄ“Å”anai, atbalstÄ«to pārdevēju, modeļu saraksta iegÅ«Å”anai, viss ir aprakstÄ«ts atbilstoÅ”i swagger specifikācijas kanoniem.

Kāpēc API, nevis UI? Jo Man jau ir sava telefona sistēma, tad man ir akreditācijas datu avots, kur vajag tikai ņemt Å”os datus, apkopot nepiecieÅ”amo json un publicēt to nodroÅ”inājuma serverÄ«. Un nodroÅ”inājuma serveris saskaņā ar noteikumiem, kas norādÄ«ti json failā, iedos vajadzÄ«gajai ierÄ«cei savu konfigurāciju vai ne, ja ierÄ«ce nav pareiza vai neatbilst kritērijiem, kas arÄ« norādÄ«ti Å”ajā json.

Sonata ā€” SIP nodroÅ”ināŔanas serveris

Tāds sanāca nodroÅ”inājuma mikropakalpojums. ZvanÄ«ja sonata, pirmkods ir pieejams GitHub, ir arÄ« gatavs doka attēls, Docker lietoÅ”anas piemērs Å”eit.

Galvenās iezīmes:

  • jebkurā gadÄ«jumā ierobežota piekļuve konfigurācijai pēc laika, pēc noklusējuma 10 minÅ«tes. Ja vēlaties atkal padarÄ«t konfigurāciju pieejamu, atkārtoti publicējiet konfigurāciju.

  • viens formāts visiem piegādātājiem, visi pielāgojumi tiek noņemti sonātā, jÅ«s nosÅ«tāt standartizētu JSON, konfigurējat visu pieejamo aprÄ«kojumu.

  • tiek reÄ£istrētas visas ierÄ«cēm izsniegtās konfigurācijas, žurnālā var apskatÄ«t visas problemātiskās vietas un redzēt kļūdas

  • Ir iespējams izmantot vienu kopÄ«gu saiti ar marÄ·ieri; katrs tālrunis saņem savu konfigurāciju, norādot Mac adresi. Vai personÄ«ga saite caur atslēgu.

  • API pārvaldÄ«bai (pārvaldÄ«bai) un tālruņu konfigurāciju nodroÅ”ināŔanai (nodroÅ”ināŔana) ir sadalÄ«ti pa portiem

  • Pārbaudes. Man bija ļoti svarÄ«gi salabot izdotās konfigurācijas formātu un ar testiem aptvert visas parastās konfigurācijas izdoÅ”anas situācijas. Lai tas viss darbotos skaidri.

MÄ«nusi:

Pagaidām Sonata Å”ifrÄ“Å”ana nekādā veidā netiek izmantota. Tie. jÅ«s, protams, varat sākt lietot https, piemēram, ieliekot nginx pirms sonātes. Bet patentētas metodes vēl nav izmantotas. Kāpēc? Projekts joprojām ir jauns, tas ir laidis klajā savus pirmos simts ierīču. Un, protams, es krāju idejas un atsauksmes. Tālāk, lai viss bÅ«tu droÅ”i, lai tÄ«klā nevarētu noŔņaukt konfigas, droÅ”i vien ir vērts pamocÄ«t ar Å”ifrÄ“Å”anas atslēgām, tls un ezÄ«ti ar tiem, bet tas bÅ«s turpinājums.

UI trūkums. Varbūt tas ir būtisks trūkums gala lietotājam, bet sistēmas administratoram konsoles utilīta ir svarīgāka par pilnvērtīgu lietojumprogrammu. Bija plāns izveidot konsoles utilītu, bet es neesmu pārliecināts, vai tas ir vajadzīgs?

Rezultāts?

Mazs un vienkārÅ”s tÄ«mekļa serveris vairāku tālruņu modeļu nodroÅ”ināŔanai ar API pārvaldÄ«bai.

Vēlreiz, kā tam vajadzētu darboties?

  1. Sonātes uzstādīŔana.
  2. Mēs izveidojam json konfigurāciju un publicējam to sonātā.
  3. Pēc tam mēs saņemam nodroÅ”inājuma saiti no sonātes.
  4. Tad mēs norādām Å”o saiti telefonā.
  5. Ierīce ielādē konfigurāciju

Turpmākajā darbībā ir tikai divi posmi:

  1. Mēs izveidojam json konfigurāciju un publicējam to sonātā
  2. Ierīce ielādē konfigurāciju

Kuri tālruņi tiks reklamēti?

Pārdevēji Grandstream, Fanvil, Yealink. Pārdevēja konfigurācijas ir vairāk vai mazāk vienādas, taču var atŔķirties atkarÄ«bā no programmaparatÅ«ras ā€” iespējams, bÅ«s jāveic papildu pārbaude.

Kādus noteikumus jūs varat noteikt?

Pēc laika. Varat norādīt laiku, līdz kuram konfigurācija būs pieejama.
Pēc mac adreses. Iesniedzot konfigurāciju, izmantojot ierīces personīgo saiti, tiks pārbaudīta arī mac adrese.
Pēc ip. Pēc IP adreses, no kuras tika veikts pieprasījums.

Kā mijiedarboties ar sonāti?

Izmantojot API, veicot http pieprasījumus. API būs pieejams jūsu instalācijā. Jo API atbalsta swagger specifikāciju, ko varat izmantot tieŔsaistes utilīta testa pieprasījumiem API.

Labi, lieliski. ForÅ”as lietas, kā bÅ«tu, ja pamēģinātu?

VienkārŔākais veids ir izvietot docker attēlu, pamatojoties uz repozitoriju sonāte-paraugs. Repozitorijā ir instalÄ“Å”anas instrukcijas.

Ko darīt, ja es zinu node.js?

Ja jums ir pieredze JavaScript lietoŔanā, jūs ātri sapratīsit, kā Ŕeit viss darbojas.

Vai būs sonātes izstrāde?

Es daļēji sasniedzu savus mērÄ·us. Tālāka attÄ«stÄ«ba ir manu uzdevumu jautājums par tālruņa iestatÄ«Å”anas automatizÄ“Å”anu. Ir arÄ« iespēja paplaÅ”ināt konfigurācijas, lai konfigurētu telefona pogas, pievienotu adreÅ”u grāmatas nodroÅ”inājumu, varbÅ«t vēl kaut ko, rakstiet komentāros.

Kopsavilkums un atzinības

PriecāŔos par konstruktÄ«viem priekÅ”likumiem/iebildumiem/komentāriem un jautājumiem, jo... Var jau bÅ«t, ka viņŔ kaut ko nesaprotami aprakstÄ«ja.

Izsaku arī pateicību visiem saviem kolēģiem, kuri palīdzēja, konsultēja, testēja un sagādāja/ziedoja telefonus testiem. Patiesībā daudzi cilvēki, ar kuriem es sazinājos darbā, ir dažādā mērā iesaistīti projektā, AsterConftērzētavās un e-pastos. Paldies par idejām un domām.

Avots: www.habr.com

Pievieno komentāru