Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

nginx

В реальной жизни этот микросервис работал бы по HTTP. Добавим веб-сервер nginx в наше окружение и создадим аналогичное демо. Но как сделать методы Tarantool доступными через REST API? Используем nginx с модулем Tarantool nginx upstream и создадим ещё один Lua-скрипт (app.lua), который экспортирует три игровых метода — add_pokemon(), map() и catch() — как REST-адреса (endpoints) модуля nginx upstream:

local game = require('pokemon')box.cfg{listen=3301}game:start()-- add, map and catch functions exposed to REST APIfunction add(request, pokemon)    return {        result=game:add_pokemon(pokemon)    }endfunction map(request)    return {        map=game:map()    }endfunction catch(request, pid, player)    local id = tonumber(pid)    if id == nil then        return {result=false}    end    return {        result=game:catch(id, player)    }end

Простой способ настроить и запустить nginx — создать Docker-контейнер на основе Docker-образа с уже установленными nginx и модулем upstream (см. http/Dockerfile). Возьмём стандартный nginx.conf, в котором определим upstream с запущенным Tarantool-бэкендом (это ещё один Docker-контейнер, подробности ниже):

upstream tnt {      server pserver:3301 max_fails=1 fail_timeout=60s;      keepalive 250000;}

и добавим некоторые параметры, специфичные для Tarantool (описание см. в файле README модуля upstream):

server {  server_name tnt_test;  listen 80 default deferred reuseport so_keepalive=on backlog=65535;  location = / {      root /usr/local/nginx/html;  }  location /api {    # answers check infinity timeout    tnt_read_timeout 60m;    if ( $request_method = GET ) {       tnt_method "map";    }    tnt_http_rest_methods get;    tnt_http_methods all;    tnt_multireturn_skip_count 2;    tnt_pure_result on;    tnt_pass_http_request on parse_args;    tnt_pass tnt;  }}

Аналогично поместим сервер Tarantool и всю игровую логику во второй Docker-контейнер на основе официального образа Tarantool 1.9 (см. src/Dockerfile) и зададим команду по умолчанию для контейнера — tarantool app.lua. Это наш бэкенд.