Эта статья изначально появилась на сайте The Lead через Graphite Publishing.

С годами становится все проще развертывать серверы и, по большей части, становится все более рентабельным. Однако, когда вам нужны серверы для множества однозадачных (или нескольких задач) функций, нет смысла настраивать, развертывать, поддерживать и оплачивать сервер. В таком случае доступно несколько вариантов, но один из них, на мой взгляд, оказался особенно полезным. Это Webtask.

Webtask - это платформа как сервисное приложение, созданное компанией Auth0. Это позволяет вам перетащить код на стороне сервера в размещенный файл на Webtask, а затем сделать http-запрос на уникальный URL-адрес, который Webtask предоставляет для запуска указанного кода. Это отлично подходит для таких приложений, как Graphite и Graphite Publishing, которые полностью отделены от уровня хранения. Подобные приложения на самом деле являются всего лишь интерфейсными контейнерами, которые не делают ничего, кроме вызовов API.

В этом руководстве мы рассмотрим настройку и использование фреймворка Blockstack’s Radiks через Webtask. Это прекрасный пример однофункционального сервера, который, вероятно, не имеет смысла развертывать и поддерживать. Но что такое Радикс на самом деле?

Radiks - это фреймворк, который дает децентрализованным приложениям возможность выполнять действия, которые обычно ограничиваются централизованными приложениями. Такие вещи, как совместная работа, контроль доступа, индексирование и т. Д., Либо сложно сделать с какой-либо реальной скоростью, либо невозможно реализовать с децентрализованными приложениями. Радикс это меняет. Он добавляет уровень зашифрованной базы данных в хранилище Blockstack, выбранное пользователем, поэтому пользователи по-прежнему имеют полный контроль над своими данными, в то время как приложения имеют запрашиваемую модель, чтобы делать то, что традиционные приложения всегда могли делать с базой данных.

Как вы можете видеть в документации Radiks, есть клиентская и серверная части. При создании приложения Blockstack документация на стороне клиента должна быть довольно простой. И, честно говоря, документация на стороне сервера тоже довольно ясна. Но что, если вы влезли в это так, что вам не пришлось запускать сервер? Что, если вы хотите создать строго клиентское приложение, а не поддерживать сервер?

Вот где приходит на помощь Webtask.

Начало работы с Webtask

Начать довольно безболезненно. Просто зайдите на webtask.io и войдите в систему. Поскольку это продукт Auth0, аутентификация очень проста. После входа в систему у вас теперь есть доступ к своей бесплатной учетной записи. (Существуют ограничения на бесплатную учетную запись, поэтому вам следует ознакомиться с ними)

Документация, которую вы увидите, в основном посвящена созданию функций веб-задач из командной строки, но мы собираемся использовать старый добрый пользовательский интерфейс. Перейдите на https://webtask.io/make, и вы сможете создать новую задачу, нажав кнопку плюс в левой части экрана. Появится всплывающее окно с вопросом, хотите ли вы создать пустую функцию или использовать шаблон.

Мы собираемся использовать шаблон. Но давайте возьмем момент и подумаем о том, насколько гибок Webtask. Если вы не нашли шаблон именно для того, что хотели бы сделать, вы можете начать с нуля и просто следовать документации API для службы, с которой вы пытаетесь интегрироваться. Это просто невероятно.

Если вы выберете Выбрать шаблон, вы увидите следующий экран:

Здесь мы выберем «Экспресс». Вам не нужно использовать Express для запуска сервера Radiks, но если вы когда-нибудь захотите расширить эту бессерверную функцию веб-задачи дальше, чем просто Radiks, это намного проще сделать, если вы используете Express.

Как только мы это сделаем, мы готовы добавить наш код Radiks. Из документации Radiks-Server вы должны иметь возможность добавить следующее:

const express = require('express');

const { setup } = require('radiks-server');

const app = express();

app.get('/', (req, res) => {
  setup({
    mongoDBUrl: req.webtaskContext.secrets.MONGO_URI
  }).then((RadiksController) => {
    app.use('/radiks', RadiksController);
  });
});

Мы почти закончили, но не совсем. Как и в локальной среде, вы не можете просто потребовать зависимости, не установив их. Итак, давайте сделаем это здесь, в Webtask.

В верхней части экрана вы должны увидеть значок гаечного ключа. Щелкните это, затем щелкните Модули NPM. Это позволит вам искать пакеты. Введите «радикс-сервер», и вы должны получить соответствующий результат. Щелкните результат и сохраните файл проекта.

Наконец, нам нужно сообщить Webtask, что такое наш URI MongoDB. В приведенном выше коде вы можете видеть, что он упоминается как `req.webtaskContext.secrets.MONGO_URI`, но нам действительно нужно предоставить этот URI. Я не буду вдаваться в подробности о том, как настроить MongoDB и получить URI, поскольку это выходит за рамки этого руководства. Но вам понадобится этот URI. Чтобы добавить его в Webtask, щелкните значок гаечного ключа еще раз и нажмите «Секреты», и вы сможете добавить значение секретной ссылки (MONGO_URI) и секретное значение (ваш фактический URI MongoDB). Сохраните это, затем сохраните свой файл, и это весь код, который вам нужен для Webtask.

Это все хорошо, но как именно использовать этот файл? Обычно вам нужно было бы написать этот код локально, построить его, развернуть, а затем вам был бы предоставлен URL-адрес для вашего нового сервера. В этом случае вы написали код и у вас есть URL. Он находится прямо в нижней части экрана. Скопируйте его, потому что он понадобится вам для клиентского кода Radiks.

Клиентская документация Radiks покажет вам, как настроить Radiks в вашем проекте. Здесь мы собираемся использовать этот URL-адрес веб-задачи. Должно получиться так:

import { UserSession, AppConfig } from 'blockstack';
import { configure } from 'radiks';

const userSession = new UserSession({
  appConfig: new AppConfig(['store_write', 'publish_data'])
})

configure({
  apiServer: 'http://your-webtask-url.com',
  userSession
});

Угадайте, что после того, как вы добавили свой URL? Готово. Нет развертывания сервера. Никакого обслуживания. Отсутствует отладка Heroku «App Crashed». Просто быстрое и чистое решение.

Graphite использует Webtask в любое время, когда есть серверный код, который необходимо запустить, поскольку Graphite - это бессерверное приложение в полном смысле этого слова. Нет сервера (кроме сервера обнаружения веб-сокетов для совместной работы в реальном времени) и нет базы данных.

Надеюсь, это руководство поможет вам быстрее начать работу с Radiks или любым проектом серверного кода.