Sonata - SIP хангах сервер

Би хангамжийг юутай харьцуулахаа мэдэхгүй байна. Магадгүй мууртай юу? Үүнгүйгээр энэ нь боломжтой юм шиг санагддаг, гэхдээ энэ нь арай дээр юм. Ялангуяа энэ нь ажилладаг бол))

Асуудлын томъёолол:

  1. Би SIP утаснуудыг хурдан, хялбар, аюулгүйгээр тохируулахыг хүсч байна. Утсыг суулгахдаа, тэр ч байтугай дахин тохируулах үед.
  2. Олон үйлдвэрлэгчид өөрийн тохиргооны формат, тохиргоо үүсгэх өөрийн хэрэгсэл, тохиргоог хамгаалах өөрийн арга замтай байдаг. Мөн би хүн бүртэй харьцахыг үнэхээр хүсэхгүй байна.
  3. Олон хангамжийн шийдлүүд, a) нэг үйлдвэрлэгч эсвэл нэг утасны системд төвлөрдөг, б) хэрэгжүүлэхэд нэлээд төвөгтэй, маш олон скрипт, параметрүүд, brrr...

3-р зүйлийн талаар би маш сайн хангамжийн системүүд байгаа талаар тайлбар хийх болно FreePBX-д зориулсан, FusionPBX-д зориулсан, Казоогийн хувьд, янз бүрийн борлуулагчдын гар утасны загварууд олон нийтэд нээлттэй байдаг. Арилжааны шийдлүүд байдаг бөгөөд та өөр өөр үйлдвэрлэгчдийн утасны ажиллагааг тохируулах модуль, жишээлбэл, 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-г эмхэтгэж, сервер дээр нийтлэх хэрэгтэй. Мөн provisioning сервер нь json файлд заасан дүрмийн дагуу шаардлагатай төхөөрөмжид тохиргоогоо өгөх эсвэл төхөөрөмж буруу эсвэл энэ json-д заасан шалгуурыг хангаагүй тохиолдолд өгөхгүй.

Sonata - SIP хангах сервер

Нөхцөл байдлын бичил үйлчилгээ ийм болсон. Дуудсан соната, эх код нь GitHub дээр байдаг, бас байдаг бэлэн докерын зураг, докерын хэрэглээний жишээ энд.

Гол онцлог:

  • ямар ч тохиолдолд тохиргоонд хандах хандалтыг өгөгдмөлөөр 10 минутаар хязгаарладаг. Хэрэв та тохиргоог дахин ашиглах боломжтой болгохыг хүсвэл тохиргоог дахин нийтлээрэй.

  • бүх үйлдвэрлэгчдэд зориулсан нэг формат, бүх тохируулга нь sonata-д устгагдах болно, та стандартжсан json илгээж, боломжтой тоног төхөөрөмжийг тохируулна уу.

  • төхөөрөмжүүдэд олгосон бүх тохиргоог бүртгэж, бүх асуудлын талбарыг бүртгэлд харж, алдааг харж болно.

  • Токен бүхий нэг нийтлэг холбоосыг ашиглах боломжтой бөгөөд утас бүр Mac хаягийг зааж өгснөөр өөрийн тохиргоог хүлээн авдаг. Эсвэл түлхүүрээр дамжуулан хувийн холбоос.

  • Утасны тохиргоог удирдах (удирдлага) болон хангах (захиалах) API-г портоор хуваадаг.

  • Туршилтууд. Гаргасан тохиргооны форматыг засах, тохиргоог гаргах ердийн бүх нөхцөл байдлыг тестээр хамрах нь миний хувьд маш чухал байсан. Ингэснээр энэ бүхэн тодорхой ажиллана.

Нөхцөл байдал:

Одоогоор Sonata дотор шифрлэлтийг ямар ч байдлаар ашиглаагүй байна. Тэдгээр. Жишээлбэл, та nginx-г sonata-ийн өмнө тавиад https-г ашиглаж эхлэх боломжтой. Гэхдээ өмчийн аргыг хараахан ашиглаагүй байна. Яагаад? Төсөл нь залуу хэвээр байгаа бөгөөд анхны зуун төхөөрөмжөө худалдаанд гаргасан. Мэдээжийн хэрэг би санаа, санал хүсэлтийг цуглуулдаг. Цаашилбал, бүх зүйлийг аюулгүй болгохын тулд тохиргоог сүлжээнд оруулахгүй байхын тулд шифрлэлтийн түлхүүр, tls болон зараа ашиглан санаа зовох нь зүйтэй болов уу, гэхдээ энэ нь үргэлжлэл байх болно.

UI дутагдалтай. Магадгүй энэ нь эцсийн хэрэглэгчийн хувьд мэдэгдэхүйц сул тал байж болох ч системийн администраторын хувьд консолын хэрэгсэл нь бүрэн хэмжээний програмаас илүү чухал юм. Консолын хэрэгсэл хийхээр төлөвлөж байсан, гэхдээ энэ нь хэрэгтэй эсэхийг мэдэхгүй байна уу?

Эцсийн эцэст юу вэ?

Удирдлагын API бүхий хэд хэдэн утасны загваруудыг хангах жижиг бөгөөд энгийн вэб сервер.

Дахин нэг удаа, энэ яаж ажиллах ёстой вэ?

  1. Sonata суулгаж байна.
  2. Бид json тохиргоог үүсгэж, sonata дээр нийтэлдэг.
  3. Дараа нь бид sonata-аас нөөцийн холбоосыг хүлээн авдаг.
  4. Дараа нь бид энэ холбоосыг утсаар зааж өгнө.
  5. Төхөөрөмж тохиргоог ачаалж байна

Дараагийн үйл ажиллагаанд зөвхөн хоёр алхам байна:

  1. Бид json тохиргоог үүсгэж, sonata дээр нийтэлдэг
  2. Төхөөрөмж тохиргоог ачаалж байна

Ямар утаснуудыг сурталчлах вэ?

Борлуулагчид Grandstream, Fanvil, Yealink. Борлуулагчийн тохиргоо нь ижил эсвэл бага боловч програм хангамжаас хамаарч өөр өөр байж болно - нэмэлт туршилт хийх шаардлагатай байж магадгүй юм.

Та ямар дүрмийг тогтоож чадах вэ?

Цаг хугацаа өнгөрөхөд. Та тохиргоог ашиглах боломжтой цагийг зааж өгч болно.
Mac хаягаар. Төхөөрөмжийн хувийн линкээр дамжуулан тохиргоог оруулах үед Mac хаягийг мөн шалгах болно.
IP-ээр. Хүсэлт гаргасан газраас IP хаягаар.

Sonata-тай хэрхэн харилцах вэ?

API-ээр дамжуулан http хүсэлт гаргах. API нь таны суулгацад бэлэн байх болно. Учир нь API нь swagger тодорхойлолтыг дэмждэг, та ашиглаж болно онлайн хэрэгсэл API руу туршилтын хүсэлт гаргах.

За, гайхалтай. Гайхалтай зүйл, оролдоод үзэх үү?

Хамгийн хялбар арга бол репозитор дээр суурилсан докерын дүрсийг байрлуулах явдал юм сонат-жишээ. Репозитор нь суулгах зааврыг агуулдаг.

Хэрэв би node.js-г мэддэг бол яах вэ?

Хэрэв та JavaScript ашиглах туршлагатай бол энд бүх зүйл хэрхэн ажилладагийг хурдан олж мэдэх болно.

Соната хөгжүүлэлт гарах уу?

Би зорилгодоо хэсэгчлэн хүрсэн. Цаашид хөгжүүлэх нь утасны тохиргоог автоматжуулах сэдвээр миний хийх ёстой асуудал юм. Утасны товчлууруудыг тохируулах тохиргоог өргөжүүлэх, хаягийн дэвтэр оруулах, магадгүй өөр зүйл нэмж оруулах, сэтгэгдэл дээр бичих боломжтой.

Дүгнэлт ба талархал

Би бүтээлч санал/эсэргүүцэл/сэтгэгдэл, асуулт байвал баяртай байх болно, учир нь... Тэр ямар нэг зүйлийг ойлгомжгүй дүрсэлсэн байж магадгүй юм.

Мөн тусалсан, зөвлөгөө өгсөн, туршиж үзсэн, шинжилгээнд зориулж утас авч өгсөн/хандивласан бүх хамт олондоо талархаж байгаагаа илэрхийлье. Бодит байдал дээр ажил дээрээ надтай харилцаж байсан олон хүмүүс энэ төсөлд янз бүрийн хэмжээгээр оролцож байна. AsterConf'e, чат болон имэйлээр. Санаа, санаа өгсөнд баярлалаа.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх