ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ

Π Π°Π±ΠΎΡ‚Π° с Π²Π΅Π±Ρ…ΡƒΠΊΠ°ΠΌΠΈ ΠΈ увСдомлСниями#

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ входящих Π΄Π°Π½Π½Ρ‹Ρ… Π² GREEN-API Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· входящиС увСдомлСния. Π•ΡΡ‚ΡŒ 2 способа ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния HTTP API ΠΈ Webhook Endpoint.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Π΅Π±Ρ…ΡƒΠΊΠ°ΠΌΠΈ ΠΈ увСдомлСниями:

  1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ входящих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
  2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° входящих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
  3. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
  4. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок
  5. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ входящих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ#

Π Π°Π±ΠΎΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· HTTP API#

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ HTTP API трСбуСтся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ 2 ΠΌΠ΅Ρ‚ΠΎΠ΄Π° API:

  1. Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ receiveNotification Π² зависимости ΠΎΡ‚ наличия сообщСний, настроСк ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ настроСк инстанса Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ увСдомлСния.

    Если ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅Ρ‚, Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ null.

  2. ПослС получСния увСдомлСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ входящСС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ deleteNotification ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π½ΠΎΠΌΠ΅Ρ€ этого увСдомлСния.

    Если ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ статус ΠΊΠΎΠ΄ΠΎΠΌ 500 ΠΈ Π±ΠΎΠ»Π΅Π΅ трСбуСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ запрос ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π Π°Π±ΠΎΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· Webhook Endpoint#

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Webhook Endpoint трСбуСтся Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр, способный ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ HTTP запросы.

Π’Π΅Π±-сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½:

  1. ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ входящий POST запрос (Π²Π΅Π±Ρ…ΡƒΠΊ)

  2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ принятоС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅

  3. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ с ΠΊΠΎΠ΄ΠΎΠΌ состояния 200 (послС получСния ΠΎΡ‚ сСрвСра статус ΠΊΠΎΠ΄Π° 200 ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ).

    ВрСмя оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ Π’Π°ΡˆΠ΅Π³ΠΎ Π²Π΅Π±-сСрвСра составляСт 180 сСкунд, Ссли сСрвСр Π½Π΅ отдаст статус ΠΊΠΎΠ΄ 200, сСрвСр GREEN-API сдСлаСт ΠΏΠ°ΡƒΠ·Ρƒ Π² 60 сСкунд ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ увСдомлСния.

2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° входящих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ#

ВсС Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

РСкомСндуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ входящих ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ согластно инструкции Π½ΠΈΠΆΠ΅:

  1. ПослС получСния увСдомлСния сСрвисом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ схСму увСдомлСния (JSONSchema).

    НС рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ схСмы Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ API ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡΡ добавляя Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.
    Если Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ отсутствуСт ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ Π²Π΅Ρ€Π½Ρ‹ΠΉ, трСбуСтся Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² систСмС логирования ΠΈ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π΅Ρ‚ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Π² Π΄Π°Π½Π½ΠΎΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ошибкС Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

  2. БСрвис ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ typeWebhook ΠΈ Π² зависимости ΠΎΡ‚ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅.

  3. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ увСдомлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Ρ‚ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ статус ΠΊΠΎΠ΄ 200.

    Π’Π°ΠΊ всС Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π²Π°ΠΌ увСдомлСния Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ увСдомлСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.
    Если Π’Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ сброс Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ, отдавая статус ΠΊΠΎΠ΄ 200, Ρ‚Π°ΠΊ Π’Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ошибки ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Ρƒ Вас Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ простого Π²Π΅Π±-сСрвСра ΠΎΡ‚ GREEN-API:

3. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ#

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сСрвиса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ бСзопасности.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ HTTP API Π’Π°Ρˆ IP адрСс Π·Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π½Π΅ доступСн Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, данная тСхнология Ρ…ΠΎΡ€ΠΎΡˆΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСмах с ΠΌΠ°Π»Ρ‹ΠΌ объСмом Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Webhook Endpoint Π’Π°Ρˆ IP адрСс доступСн Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, трСбуСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ врСдоностныС воздСйствия Π½Π° Π’Π°ΡˆΡƒ систСму ΠΈΠ·Π²Π½Π΅.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ бСзопасности ΠΏΡ€ΠΈ использовании Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Webhook Endpoint:

  1. НастройтС сСтСвой экран (Firewall), Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ доступ ΠΊ сСрвСру Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π’Π°ΠΌ IP адрСсов.

  2. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… IP адрСсов. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π’Π°Ρˆ Π²Π΅Π±-сСрвСр Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» входящиС запросы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с IP адрСсов GREEN-API.

  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΏΠΎΠ»Π΅ webhookUrlToken Ρ‡Π΅Ρ€Π΅Π· Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ установки настроСк setSettings.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ IP адрСсов Π½Π° python
from flask import Flask, request

from datetime import datetime
import json

app = Flask(**name**)

# Бписок IP-адрСсов GREEN-API

ALLOWED_IPS = [
   "51.250.84.44",
   "51.250.94.65",
   "51.250.89.177",
   "64.226.125.75",
   "158.160.49.84",
   "46.101.109.139",
   "51.250.95.149",
   "51.250.12.167",
   "209.38.202.24"]

# Ѐункция для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… IP-адрСсов

def check_ip():
client_ip = request.remote_addr
if client_ip not in ALLOWED_IPS:
return False
return True

@app.before_request
def before_request():
if not check_ip():
return "Access Denied", 403

# ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ вашСго прилоТСния...

if **name** == "**main**":
app.run()

4. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок#

РСкомСндуСтся Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСму логирования:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ систСму логирования. Π›ΠΎΠ³ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ схСмы Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ERROR, Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ WARN, Π½Π΅ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ сообщСний Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ DEBUG ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ систСмы Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ INFO. Π’ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логирования, Π’Ρ‹ смоТСтС ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ систСмы ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

  2. РСкомСндуСтся ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΎ нСизвСстных Ρ‚ΠΈΠΏΠ°Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ максимально быстро Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ даст большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, Π½Π΅ пропустив Π΅Ρ‰Π΅ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ увСдомлСниям, Π² записи Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ информация Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя получСния - timestamp, Ρ‚ΠΈΠΏ увСдомлСния - typeWebhook ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ увСдомлСния. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΡ€ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… сцСнариях Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы.

5. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ#

ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° систСмы Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. РСкомСндуСтся ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму, распрСдСляя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° нСсколько микросСрвисов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° балансировщика ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π²Π΅Π±-сСрвСр nginx, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько экзСмпляров вашСго сСрвСра ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ nginx.

Nginx - это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅Π±-сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (процСсс Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ распрСдСлСния Π²Π΅Π±-Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими сСрвСрами), прСдотвращая ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра. Nginx примСняСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ распрСдСлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ настроСн для обСспСчСния надСТности систСмы ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· строя ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвСров.

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… способов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ нСсколько экзСмпляров сСрвСра:

Π ΡƒΡ‡Π½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…:#

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈΠ»ΠΈ Π°Ρ€Π΅Π½Π΄ΡƒΠΉΡ‚Π΅ нСсколько физичСских сСрвСров, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².
  • НастройтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвСр Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ содСрТал копию вашСго прилоТСния.

ИспользованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ с Docker:#

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Docker-ΠΎΠ±Ρ€Π°Π· вашСго прилоТСния.
  • ЗапуститС нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с этим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… хост-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….

ИспользованиС ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²:#

  • Π Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ нСсколько экзСмпляров вашСго сСрвСра Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Amazon Web Services (AWS), Google Cloud Platform (GCP) ΠΈΠ»ΠΈ Microsoft Azure.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструмСнты управлСния ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ инфраструктурой для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развСртывания ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ сСрвСров.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ nginx для балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
http {
   upstream app{
      server 10.2.0.100;
      server 10.2.0.101;
      server 10.2.0.102;
   }

   // Π­Ρ‚ΠΎΡ‚ сСрвСр ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ вСсь Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΠΏΠΎΡ€Ρ‚ 80 ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.
   // ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ имя Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ proxy_pass Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

   server {
      listen 80;

      server_name mydomain.com;

      location / {
         include proxy_params;

         proxy_pass http://app;


         proxy_redirect off;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
      }
   }
}