We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Развертывание серверless‑платформы (OpenFaaS) с поддержкой контейнеров Docker в Termux‑окружении

Пошаговое руководство по развертыванию OpenFaaS (серверless‑платформы) в Termux с поддержкой контейнеров Docker: подготовка окружения, контейнеризация, развертывание контроллера и воркеров, деплой функций и эксплуатационные нюансы для локальных стендов.

Termux отлично подходит для локальных экспериментов: здесь можно быстро собрать стенд для разработки, тестирования и обучения. В этой статье рассмотрим, как развернуть серверless‑платформу OpenFaaS в Termux‑окружении и организовать работу с контейнерами Docker. Акцент сделаем на практической стороне: подготовка окружения, конфигурация, деплой функций и базовые принципы эксплуатации.

Важно: ниже описывается локальный стенд и подходы для разработки. Это не про обход ограничений и не про небезопасные сценарии. Для доступа к ресурсам сети при необходимости используйте только создание локальной сети (например, через VPN/туннелирование для удобства взаимодействия устройств в одной сети).

Что такое OpenFaaS и зачем это в Termux

OpenFaaS — это платформа оркестрации функций (FaaS), позволяющая описывать и запускать функции как сервисы. Типовой сценарий включает:

  • Controller — управляет регистрацией и планированием выполнения функций;
  • Worker — исполняет функции (часто через контейнеры);
  • gateway — точка входа для вызовов функций.

Termux в качестве среды разработки удобен тем, что вы можете быстро подготовить базу, проверить образы и прототипировать функции без полноценного кластера. Для Docker в Termux часто используют контейнерные решения на стороне хоста (в зависимости от устройства и выбранного пути интеграции). Ниже мы покажем архитектурный подход и команды, которые обычно используют при локальном развертывании.

Требования и подготовка

Перед началом определитесь со следующими параметрами:

  • Телефон/устройство с поддержкой Termux;
  • Ограничения по памяти: серверless‑стенд с несколькими компонентами может потребовать ОЗУ;
  • Сеть: чтобы gateway/worker были доступны друг другу в пределах вашего стенда;
  • Docker‑контур: убедитесь, что на вашем окружении доступна сборка/запуск контейнеров.

Далее — подготовим базовую инфраструктуру в Termux.

Обновление системы и установка базовых пакетов

pkg update -y
pkg upgrade -y

Установите инструменты, которые почти всегда нужны для контейнерной разработки и деплоя:

pkg install -y git curl wget tar ca-certificates proot wget openssh

Поскольку OpenFaaS часто включает сборку образов и запуск сервисов через контейнеры, вам также понадобятся инструменты для работы с Docker‑экосистемой. В зависимости от доступного в вашем устройстве варианта Docker‑интеграции набор команд может отличаться. В этой статье мы опираемся на общий подход: использовать Docker CLI и запуск контейнеров в локальном окружении, если он доступен.

Установка OpenFaaS в локальном формате (общий подход)

Существует несколько способов запустить OpenFaaS. В контексте Termux наиболее реалистично организовать локальный стенд через запуск компонентов как контейнеров. Поэтому логика следующая:

  1. Скачать исходники/инфраструктуру OpenFaaS;
  2. Настроить переменные окружения;
  3. Развернуть controller, gateway и worker;
  4. Поднять реестр/хранилище (если нужно) и собрать образы функций;
  5. Развернуть функции и проверить их вызов.

Создадим рабочую директорию:

mkdir -p ~/openfaas-studio
cd ~/openfaas-studio

Клонирование OpenFaaS и подготовка конфигурации

Загрузим репозиторий (вы можете выбрать ветку под актуальную версию, но сохраняйте совместимость с выбранными компонентами):

git clone https://github.com/openfaas/faas-netes.git ./faas-platform

Для Termux прямое использование Kubernetes часто затруднено. Поэтому практический путь — использовать OpenFaaS в виде набора сервисов, запускаемых в контейнерах, с параметрами, которые соответствуют локальному режиму. Дальше потребуется создать собственную конфигурацию окружения для запуска компонентов.

На практике часто используют переменные, включая адрес gateway и параметры подключения worker’ов. Создадим файл, где будем хранить значения для локального стенда:

mkdir -p ./config
cat > ./config/local.env << 'EOF'
# Пример значений для локального стенда
# Замените на ваши адреса/порты
OPENFAAS_GATEWAY_URL=http://127.0.0.1:8080
OPENFAAS_NAMESPACE=faas
# Логика адресации зависит от вашей сетевой конфигурации Termux/Docker
EOF

Если вы используете доступ к сервисам не через 127.0.0.1, а через адрес устройства в локальной сети, подставьте корректный IP.

Docker-контуры: сборка и запуск контейнеров в Termux

Техническая сложность — обеспечить Docker‑совместимый запуск контейнеров. В зависимости от вашего устройства и доступных решений Docker может быть доступен напрямую или через альтернативный движок контейнеризации. В любом случае логика OpenFaaS для worker’а обычно завязана на запуск контейнеров с функциями.

Проверьте, что Docker CLI доступен:

docker version

Если команда недоступна, вначале настройте Docker‑экосистему в вашем Termux‑контуре (вариант зависит от ОС и доступного окружения). После этого переходите к сборке и запуску сервисов.

Развертывание controller, gateway и worker

Ниже — концептуальный план запуска. В реальных настройках имена контейнеров, порты и параметры могут отличаться под версию OpenFaaS. Но общий принцип такой: вы поднимаете три ключевых сервиса и обеспечиваете им связь через сеть.

Создадим отдельную пользовательскую сеть Docker для изоляции локального стенда:

docker network create openfaas-net

Теперь запустим (примерно) компоненты. Если в вашей версии OpenFaaS используются конкретные образы, подставьте актуальные теги. На практике образы зависят от выбранной версии платформы.

Controller (пример):

docker run -d --name openfaas-controller \
  --network openfaas-net \
  -p 8081:8081 \
  -e faas_nats_address=openfaas-nats:4222 \
  -e faas_controller_namespace=faas \
  openfaas/controller:latest

Gateway (пример):

docker run -d --name openfaas-gateway \
  --network openfaas-net \
  -p 8080:8080 \
  -e cgi_image=openfaas/gateway:latest \
  -e faas_gateway_address=0.0.0.0:8080 \
  openfaas/gateway:latest

Worker (пример):

docker run -d --name openfaas-worker \
  --network openfaas-net \
  -e faas_nats_address=openfaas-nats:4222 \
  -e faas_worker_namespace=faas \
  -e task_queue=faas-worker \
  openfaas/faasd:latest

Примечание: в разных сборках OpenFaaS дополнительно может быть нужен сервис очередей (NATS) и/или регистрирующие компоненты. Поэтому если при запуске компонентов вы видите ошибки о недостающих зависимостях, добавьте соответствующие контейнеры (например, nats) в ту же сеть.

Добавление NATS/очереди (если требуется)

Часто OpenFaaS использует NATS для связи компонентов. Если ваши логи укажут на отсутствие очереди, запустите NATS в той же сети:

docker run -d --name openfaas-nats \
  --network openfaas-net \
  -p 4222:4222 \
  nats:latest

Подготовка хранилища образов функций

OpenFaaS обычно ожидает, что образы функций будут доступны (либо из локального registry, либо из внешнего репозитория). Для локального стенда удобнее развернуть локальный registry.

Поднимем локальный registry:

docker run -d --name openfaas-registry \
  --network openfaas-net \
  -p 5000:5000 \
  registry:2

Далее любые функции будут собираться в образы и публиковаться на localhost:5000 (или на IP вашего устройства в локальной сети, если gateway работает иначе).

Создание функции и сборка Docker‑образа

Рассмотрим типовой шаг: создаём функцию, формируем Dockerfile, собираем образ и подготавливаем манифест для деплоя в OpenFaaS.

Поскольку конкретный формат манифеста зависит от инструментария (faas-cli, templates), приведём практичный каркас. Допустим, у вас есть функция hello.

Создадим структуру:

mkdir -p ~/openfaas-studio/functions/hello
cd ~/openfaas-studio/functions/hello

Пример Dockerfile (каркас). В вашем случае команды могут отличаться (язык/рантайм):

cat > Dockerfile << 'EOF'
FROM alpine:3.20
RUN apk add --no-cache curl

# Пример: статический обработчик (замените на ваш runtime)
COPY ./handler.sh /handler.sh
RUN chmod +x /handler.sh

ENV fprocess="/handler.sh"
EXPOSE 8080
CMD ["/handler.sh"]
EOF

cat > handler.sh << 'EOF'
#!/bin/sh
# В реальной функции замените обработку запроса
echo "Hello from OpenFaaS in Termux container environment"
# Здесь добавьте логику обработки входных данных
EOF

Соберём образ и запишем его в локальный registry:

docker build -t 127.0.0.1:5000/hello:1.0 .
docker push 127.0.0.1:5000/hello:1.0

Если gateway/worker не могут достучаться до 127.0.0.1 вашего устройства из контейнеров, используйте IP вашего устройства в локальной сети (например, 192.168.x.y:5000), а не loopback.

Деплой функции в OpenFaaS

Обычно деплой выполняют через faas-cli или через интерфейсы API. В Termux удобно использовать faas-cli, если вы готовы установить его и настроить доступ к gateway.

Пример установки faas-cli (универсальный подход):

curl -sSL https://cli.openfaas.com | sh

После установки проверьте:

faas-cli --version

Далее настройте gateway и креденшалы (если используется). Создадим пример переменных окружения:

export OPENFAAS_URL="http://127.0.0.1:8080"
# При необходимости задайте auth token/логин-пароль для faas-cli
# export OPENFAAS_USER="admin"
# export OPENFAAS_PASSWORD="your_password"

В большинстве сценариев нужно подготовить stack/manifest. Примерно это выглядит так: задаёте имя функции, image и ресурсы. Формат зависит от версии faas-cli. Ниже — общий макет манифеста в стиле OpenFaaS stacks.

cat > ./stack.yml << 'EOF'
version: 1.0
provider:
  name: openfaas
functions:
  hello:
    image: 127.0.0.1:5000/hello:1.0
    lang: docker
EOF

Деплой:

faas-cli deploy -f stack.yml

Если доступ к gateway требует авторизацию, faas-cli запросит токен или вы можете задать его параметрами/переменными окружения.

Проверка вызова функции

Проверьте, что gateway доступен снаружи контейнерной сети (если нужно). Затем выполните вызов. Примерно это можно сделать через API gateway.

Вариант через curl (каркас):

curl -sS -X POST \
  "$OPENFAAS_URL/function/hello" \
  -H "Content-Type: application/json" \
  -d '{"name":"Termux"}'

Если используется другой формат тела запроса (зависит от вашей функции), адаптируйте обработчик.

Эксплуатационные нюансы: порты, сеть и производительность

При работе в Termux чаще всего сталкиваются с тремя типами проблем:

  1. Неверная адресация registry. Контейнеры могут не иметь доступ к 127.0.0.1 устройства. Решение — указывать IP устройства в локальной сети.
  2. Порты и правила файрвола. Проверьте, что gateway и registry проброшены корректно (например, -p 8080:8080, -p 5000:5000).
  3. Ресурсные ограничения. Worker и контейнеры функций потребляют память. Для стенда уменьшайте количество функций одновременно и следите за OOM.

Если вы хотите, чтобы другое устройство в вашей локальной сети корректно обращалось к gateway/registry, логичнее сделать это через локальную сеть, например с созданием VPN/туннеля в пределах вашей сети. При этом не используйте сценарии, направленные на обход ограничений.

Безопасность и практики разработки

  • Держите стенд локальным: не публикуйте gateway в интернет без необходимости.
  • По возможности включайте auth в OpenFaaS и используйте отдельные креденшалы.
  • Проверяйте входные данные функций: функции — это ваш бизнес‑код, а не “безопасная песочница”.
  • В Docker‑образах используйте минимальные базовые слои и ограничивайте зависимости.

Расширение: добавление нескольких функций и сценарии тестирования

Чтобы расширить стенд:

  1. Соберите несколько образов функций в ваш registry;
  2. Добавьте секции в stack.yml для каждой функции;
  3. Задеплойте обновлённый stack;
  4. Проведите нагрузочные тесты на стенде (например, последовательные вызовы) и проверьте логи worker’а.

Так вы получите рабочий “мини‑кластер” серверless‑архитектуры прямо в Termux‑экосистеме.

Заключение

Развертывание OpenFaaS в Termux‑окружении с поддержкой контейнеров Docker — практичный способ собрать локальный серверless‑стенд для разработки и обучения. Ключевые шаги сводятся к подготовке Docker‑контуров, корректной сетевой адресации между gateway/worker и registry, а также к сборке/деплою функций в формате контейнеров.

Если хотите, чтобы стенд был собран “под ключ” с учетом ваших ограничений устройства, версии OpenFaaS и выбранной модели сетевого доступа — обращайтесь в РыбинскЛАБ. Мы поможем развернуть и настроить OpenFaaS в Termux‑сценарии, подготовить шаблоны функций и провести тестирование работоспособности.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект