Appwrite, open-source бэкэнд-платформа

lq8cimovhvrmhw6l4pmbwkdaclu.png

В последние пару лет намечается тенденция на упрощение работы с бэкэндом, появляется всё больше low- и no-code обёрток для тех, кто хочет сэкономить на стоимости разработки. Экосистемы AWS и GCP задают стандарты в этой области, и все новые проекты стараются копировать их фичи. Проблема в том, что многие молодые проекты предлагают свою панельку с доступом к базе, cloud functions и базовой аналитикой, а потом продают её на сервисной основе. Идея так себе, потому что имея функционал, такой же как у гигантов, они, не имея такого же кредита доверия, пытаются сразу заработать на клиентах. Гораздо больше шансов на успех у тех, кто ведёт полную разработку в open-source, поощряет self-hosting и не пытается сходу монетизировать свой проект, взимая деньги только за использование в облаке. Пример такого подхода — Appwrite, и благодаря ему они всего за два года обзавелись большим комьюнити и поддержкой, не успев полностью выпустить продукт и не начав зарабатывать на нём.

Функционал


-htogs7sfi29hzfvd1bt5cdbolg.png

Appwrite интегрируется с мобильными и веб-клиентами (всякий JS, Flutter, Swift, Objective-C, Kotlin) и предоставляет нужную среду для бэкэнд-задач (Node, .NET, Python, PHP, Ruby, Deno, ограниченно на Go и Java). Разбираем основной функционал:

Авторизация


Авторизация работает по паролю, OAuth и JWT. Вместе с последним в релизе 0.8 появились анонимные сессии — в современном вебе это мастхэв фича, которой не хватает во многих аналогах. Список OAuth провайдеров захардкожен, новых нельзя добавить из интерфейса, но можно форкнуть репозиторий и дописать вручную. Сейчас доступны:
  • Amazon
  • Apple
  • BitBucket
  • Bitly
  • Box.com
  • Discord
  • Dropbox
  • Facebook
  • GitHub
  • GitLab
  • Google
  • LinkedIn
  • Microsoft
  • PayPal
  • Salesforce
  • Slack
  • Spotify
  • Tradeshift
  • Twitch
  • VK
  • Yahoo
  • Yandex
  • WordPress

Аккаунт


Appwrite поддерживает API, по которому клиент взаимодействует с учеткой пользователя, хранящейся на сервере. Пользователи могут в реальном времени обновлять информацию в аккаунте, и сохранять личные предпочтения, вроде языка интерфейса, настроек времени или темы. Поля могут быть какими угодно, и включать в себя метаданные типа геолокации, операционной системы, юзерагента и так далее. Есть отдельный эндпойнт для отображения логинов, смены пароля и прочих действий, связанных с безопасностью аккаунта.

База данных


Судя по беглому обзору зависимостей, для большинства задач здесь используется MariaDB, при этом все данные хранятся в JSON в виде коллекций. Допускается использование для коллекций как строгой структуры, так и динамической, обе с любой степенью вложенности. Есть готовые фильтры с глубоким поиском, валидация и контроль доступа с гибкой системой разрешений.

Хранилище


Для всех пользовательских файлов есть готовое хранилище, также с фильтрацией и контролем доступа и действий на уровне отдельных пользователей и групп:
  var appwrite = new window.Appwrite();

  appwrite
    .setEndpoint('https://localhost/v1')
    .setProject('[PROJECT-ID]')
  ;

  var file = document.getElementById('file-input').files[0];
  let read = ['*']; // wildcard read access
  let write = ['user:self']; // write access only to me

  appwrite.storage.createFile(file, read, write)
    .then(function (response) {
      console.log('file uploaded successfully');
    }, function (error) {
      console.log(error);
    });

Кроме того, из коробки идёт интеграция с антивирусным сервером, который будет сканировать поступающие файлы и удалять небезопасные. Ещё есть превью содержимого файлов в разных форматах — мелочь, но приятно.

Вебхуки


Кастомное поведение после триггера нужного эндпойнта. Вы знаете, как работают вебхуки.

n6qtvavyvqaq98ntalavitcurkc.png

Список событий очень большой, покрываются разделы account, database, functions, storage, users и teams.

Задачи и функции


Серверные функции, запускающиеся по расписанию или по определённым хукам. Задачи поддерживают кастомные заголовки HTTP и авторизацию для разных сценариев. Функции исполняют кастомный код в разных окружениях (Node, .NET, Python, PHP, Ruby, Deno), с нужными ограничениями по правам и доступом к указанным переменным окружения. Очень гибкая штука.

Установка


Она тут предельно простая, путь от голой VPS до работающей платформы займёт минуту.
Appwrite работает в контейнерах и может быть использован любой системой оркестрации, мы же рассмотрим самую базовую установку.

Если нет докера, ставим его:

  sudo apt-get update

  sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  echo \
    "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  sudo apt-get update
  sudo apt-get install docker-ce docker-ce-cli containerd.io

Затем качаем и запускаем установку:

  docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
    --entrypoint="install" \
    appwrite/appwrite:0.8.0

Проходим установочный скрипт (если хочется «просто пощупать», достаточно указать везде дефолтные значения) и переходим в панельку (она будет жить на тех портах, которые мы укажем при установке, по дефолту — localhost:80 / :443).

Заключение


Appwrite не похожа на другие Backend-as-a-Service проекты, стремящиеся к быстрой монетизации. Здесь разработчики сначала фокусируются на задачах, реализации и тестировании фич, и ещё даже не подошли к сервисной модели (которая, тем не менее, планируется). Проект опенсорсный и поддержка self-hosting заявлена вечная, так что сейчас Appwrite выглядит отличным решением, которое можно как минимум потестить на пет-проекте.

Ссылки:


На правах рекламы


Наши эпичные серверы вы можете использовать для любых задач — разработки, размещения сайтов, использования под VPN и даже получить удалённую машину на Windows! Идей может быть много и любую из них поможем воплотить в реальность!

Присоединяйтесь к нашему чату в Telegram.

8p3vz47nluspfyc0axlkx88gdua.png

© Habrahabr.ru