Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΏΠΎΡ‡Π΅ΠΌΡƒ контСйнСризация Π²Π°ΠΆΠ½Π° для FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

FastAPI β€” соврСмСнный, быстрый ΠΈ лСгковСсный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ API Π½Π° Python. Благодаря высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ удобству Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, FastAPI быстро стал ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых популярных инструмСнтов для создания микросСрвисов. Однако Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ максимальной гибкости, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΈ надСТности Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Π²Π°ΠΆΠ½ΠΎ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. БСгодня основными инструмСнтами для этого ΡΠ²Π»ΡΡŽΡ‚ΡΡ Docker, Kubernetes ΠΈ Serverless-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим соврСмСнныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡ… прСимущСства ΠΈ особСнности.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ FastAPI с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker

Docker стал стандартом для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ воспроизводимыС срСды. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ FastAPI-прилоТСния позволяСт:

  • Π£ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ срСдами (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, тСстированиС, ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½)
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ зависимостСй
  • Π£ΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅
  • ΠŸΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт изоляции процСссов

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ процСсс ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ FastAPI-прилоТСния выглядит Ρ‚Π°ΠΊ:

  1. Боздаётся Dockerfile с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° (Ρ‡Π°Ρ‰Π΅ всСго python:3.X-slim).
  2. Π’ Dockerfile ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ прилоТСния ΠΈ описываСтся установка зависимостСй ΠΈΠ· requirements.txt ΠΈΠ»ΠΈ pyproject.toml.
  3. УказываСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° для запуска FastAPI-прилоТСния Ρ‡Π΅Ρ€Π΅Π· ASGI-сСрвСр (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, uvicorn app:app --host 0.0.0.0 --port 80).
  4. Боздаётся ΠΎΠ±Ρ€Π°Π· ΠΈ запускаСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° любой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

Docker позволяСт Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ сообщСний ΠΈ очСрСдями, организуя ΠΈΡ… Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ экосистСму Ρ‡Π΅Ρ€Π΅Π· docker-compose.

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ FastAPI Π² Kubernetes

Kubernetes β€” это оркСстратор ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ слоТными ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ инфраструктурами. Если вашС FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с высокой Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ автоскСйлинг ΠΈ ΠΊΠ°Ρ‚Π°ΡΡ‚Ρ€ΠΎΡ„ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, Kubernetes β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€.

  • Автоматизация дСплоя β€” манифСсты Kubernetes ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ состояниС прилоТСния, количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ, обновлСния Π±Π΅Π· простоя ΠΈ Ρ‚.Π΄.
  • АвтоматичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” настраиваСтся Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” интСграция с Prometheus, Grafana, ELK ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ инструмСнтами.
  • Π‘Π΅Ρ‚Π΅Π²ΠΎΠ΅ взаимодСйствиС ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ β€” настройка ingress-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ², сСкрСтов, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ рСсурсов ΠΈ Ρ‚.Π΄.

Π’ Kubernetes FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ развёртываСтся ΠΊΠ°ΠΊ Deployment с сСрвисом (Service) для доступа Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈ снаруТи кластСра. Для слоТных сцСнариСв ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Helm-Ρ‡Π°Ρ€Ρ‚Ρ‹ для ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с CI/CD.

Serverless: бСссСрвСрныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для FastAPI

Если Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Π²Π°ΠΆΠ½ΠΎ быстроС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, экономия Π½Π° инфраструктурС ΠΈ отсутствиС нСобходимости ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сСрвСрами β€” стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ serverless-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π‘ΡƒΡ‚ΡŒ serverless β€” Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ, оплачивая лишь фактичСскоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для дСплоя FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² serverless-Ρ€Π΅ΠΆΠΈΠΌΠ΅:

  • AWS Lambda β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AWS API Gateway, Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Mangum), ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ FastAPI ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Lambda.
  • Google Cloud Functions ΠΈ Cloud Run β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прилоТСния.
  • Azure Functions β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для ΠΎΠ±Π»Π°ΠΊΠ° Microsoft.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° serverless-дСплоя:

  • ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° инфраструктуру
  • АвтоматичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  • Высокая ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ
  • БыстроС врСмя Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ

Однако стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ограничСния ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ памяти, Π° Ρ‚Π°ΠΊΠΆΠ΅ особСнности Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ старта.

Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ подходящий способ дСплоя?

Π’Ρ‹Π±ΠΎΡ€ зависит ΠΎΡ‚:

  • Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ отказоустойчивости ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ
  • Π‘ΡŽΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°
  • Навыков ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
  • НСобходимости ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвисами

Docker ΠΈΠ΄Π΅Π°Π»Π΅Π½ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ срСдних ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², быстрого прототипирования, тСстирования. Kubernetes β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ…, распрСдСлённых систСм ΠΈ микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. Serverless ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для стартапов, MVP ΠΈ Π·Π°Π΄Π°Ρ‡ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

Автоматизация ΠΈ CI/CD для FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Для соврСмСнных FastAPI-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π²Π°ΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ процСссов сборки, тСстирования ΠΈ дСплоя. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ систСмами ΠΊΠ°ΠΊ GitHub Actions, GitLab CI, Jenkins позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ сборку Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²
  • Запуск тСстирования ΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π°
  • Π”Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes ΠΈΠ»ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π² ΠΎΠ±Π»Π°ΠΊΠΎ

Π­Ρ‚ΠΎ сокращаСт врСмя Π²Ρ‹Π²ΠΎΠ΄Π° Π½ΠΎΠ²Ρ‹Ρ… вСрсий, сниТаСт количСство ошибок ΠΈ обСспСчиваСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ качСства.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½Ρ‹ΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ FastAPI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ этап для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСго сСрвиса. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Docker, Kubernetes ΠΈ Serverless зависит ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡, Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ пСрспСктив развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ FastAPI, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π½Π°ΠΌ β€” ΠΌΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ваши Π·Π°Π΄Π°Ρ‡ΠΈ!

Avatar
Raman Sapezhka

CEO Plantago/CTO