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

Запуск приложения

Используя Tarantool в качестве сервера приложений, можно писать собственные приложения. Родной язык для написания приложений в Tarantool — Lua, поэтому типичное приложение представляет собой файл со скриптом на Lua. Также приложения можно писать на C или C++.

Создадим и запустим первое приложение на Lua для Tarantool. Вот простейшее приложение на Lua — классическое «Hello, world!»:

#!/usr/bin/env tarantoolprint('Hello, world!')

Сохраним его в файл. Пусть это будет myapp.lua в текущем каталоге.

Теперь рассмотрим способы запуска приложения с помощью Tarantool.

Запуск в Docker

Если Tarantool запускается в контейнере Docker, следующая команда запустит Tarantool без приложения:

$ # create a temporary container and run it in interactive mode$ docker run --rm -t -i tarantool/tarantool:latest

Чтобы запустить Tarantool с приложением, выполним:

$ # create a temporary container and$ # launch Tarantool with our application$ docker run --rm -t -i \             -v `pwd`/myapp.lua:/opt/tarantool/myapp.lua \             -v /data/dir/on/host:/var/lib/tarantool \             tarantool/tarantool:latest tarantool /opt/tarantool/myapp.lua

В этом примере в контейнер монтируются два ресурса с хоста:

  • файл приложения (myapp.lua) и
  • каталог данных Tarantool (/data/dir/on/host).

По умолчанию каталог для кода приложения Tarantool внутри контейнера — /opt/tarantool, а каталог для данных — /var/lib/tarantool.

Запуск исполняемого файла

Если Tarantool установлен из пакета или собран из исходного кода, приложение можно запустить:

  • в режиме скрипта,
  • как серверное приложение, или
  • как службу-демон.

Простейший способ — передать имя файла при запуске Tarantool:

$ tarantool myapp.luaHello, world!$

Tarantool запускается, выполняет скрипт в режиме скрипта и завершает работу.

Теперь превратим этот скрипт в серверное приложение. Воспользуемся функцией box.cfg из встроенного модуля Lua Tarantool, чтобы:

  • запустить базу данных (база данных имеет постоянное состояние на диске, которое необходимо восстановить при запуске приложения) и
  • настроить Tarantool в качестве сервера, принимающего запросы на TCP-порте.

Также добавим простую логику работы с базой данных, используя space.create() и create_index() для создания спейса с первичным индексом. Воспользуемся функцией box.once(), чтобы гарантировать выполнение логики только один раз — при первой инициализации базы данных. Это позволит избежать попыток создания уже существующего спейса или индекса при каждом запуске скрипта:

#!/usr/bin/env tarantool-- Configure databasebox.cfg {   listen = 3301}box.once("bootstrap", function()   box.schema.space.create('tweedledum')   box.space.tweedledum:create_index('primary',       { type = 'TREE', parts = {1, 'unsigned'}})end)

Запустим приложение так же, как и раньше:

$ tarantool myapp.luaHello, world!2017-08-11 16:07:14.250 [41436] main/101/myapp.lua C> version 2.1.0-429-g4e52317022017-08-11 16:07:14.250 [41436] main/101/myapp.lua C> log level 52017-08-11 16:07:14.251 [41436] main/101/myapp.lua I> mapping 1073741824 bytes for tuple arena...2017-08-11 16:07:14.255 [41436] main/101/myapp.lua I> recovery start2017-08-11 16:07:14.255 [41436] main/101/myapp.lua I> recovering from `./00000000000000000000.snap'2017-08-11 16:07:14.271 [41436] main/101/myapp.lua I> recover from `./00000000000000000000.xlog'2017-08-11 16:07:14.271 [41436] main/101/myapp.lua I> done `./00000000000000000000.xlog'2017-08-11 16:07:14.272 [41436] main/102/hot_standby I> recover from `./00000000000000000000.xlog'2017-08-11 16:07:14.274 [41436] iproto/102/iproto I> binary: started2017-08-11 16:07:14.275 [41436] iproto/102/iproto I> binary: bound to [::]:33012017-08-11 16:07:14.275 [41436] main/101/myapp.lua I> done `./00000000000000000000.xlog'2017-08-11 16:07:14.278 [41436] main/101/myapp.lua I> ready to accept requests

В этот раз Tarantool выполняет скрипт и продолжает работать как сервер, принимая TCP-запросы на порту 3301. Tarantool можно увидеть в списке процессов текущей сессии:

$ ps | grep "tarantool"  PID TTY           TIME CMD41608 ttys001   0:00.47 tarantool myapp.lua <running>

Но экземпляр Tarantool остановится, если закрыть текущее окно терминала. Чтобы отвязать Tarantool и приложение от окна терминала, можно запустить их в режиме демона. Для этого добавим несколько параметров в box.cfg{}:

  • background = true — указывает, что Tarantool должен работать как служба-демон,
  • log = 'dir-name' — указывает демону Tarantool, где хранить файл журнала (другие настройки журнала доступны в модуле, и
  • pid_file = 'file-name' — указывает демону Tarantool, где хранить pid-файл.

Например:

box.cfg {   listen = 3301,   background = true,   log = '1.log',   pid_file = '1.pid'}

Запустим приложение так же, как и раньше:

$ tarantool myapp.luaHello, world!$

Tarantool выполняет скрипт, отсоединяется от текущей сессии оболочки (его не будет видно по команде ps | grep "tarantool") и продолжает работать в фоновом режиме как демон, привязанный к глобальной сессии (с SID = 0):

$ ps -ef | grep "tarantool"  PID SID     TIME  CMD42178   0  0:00.72 tarantool myapp.lua <running>

Теперь, когда мы разобрались с созданием и запуском приложения на Lua для Tarantool, перейдем к более детальному рассмотрению практики программирования.