Гид по технологиям

Установка Turtl Server на CentOS 7 — пошаговое руководство

• 8 min read • Linux • Обновлено 21 Nov 2025
Turtl на CentOS 7: установка и настройка
Turtl на CentOS 7: установка и настройка

Ключевые моменты

  • Привилегии root обязательны.
  • Основные компоненты: Libuv, RethinkDB, Clozure Common Lisp (ccl), Quicklisp и исходники Turtl API.
  • Рекомендуется использовать HTTPS на фронте (Apache/nginx) и ограничить доступ к RethinkDB.

Содержание

  • Требования
  • Что будем делать
  • Подготовка системы и инструменты разработки
  • Установка Libuv
  • Установка и настройка RethinkDB
  • Установка Clozure Common Lisp (ccl)
  • Установка Quicklisp и локальных зависимостей
  • Установка и конфигурация Turtl Server
  • Запуск Turtl как systemd-сервиса (улучшенный unit)
  • Настройка Apache/httpd как обратного прокси (рекомендации по HTTPS)
  • Тестирование и проверка работоспособности
  • Безопасность, firewall и SELinux
  • Отладка и типовые ошибки
  • Контрольные списки, критерии приёмки и FAQ

Требования

  • CentOS 7 (x86_64)
  • root-доступ или sudo-привилегии
  • Доступ в интернет для загрузки пакетов и репозиториев

Что мы сделаем

  1. Установим инструменты разработки (Development Tools)
  2. Установим Libuv вручную
  3. Установим и настроим RethinkDB (репозиторий + systemd)
  4. Установим Clozure Common Lisp (ccl)
  5. Установим Quicklisp и локальные зависимости для Turtl
  6. Склонируем и настроим Turtl API
  7. Запустим Turtl как демон systemd
  8. Настроим Apache/httpd как обратный прокси с рекомендациями по HTTPS
  9. Протестируем клиент и проверим журналы

Шаг 1 — Установка Development Tools

Для сборки некоторых библиотек и компонентов необходимо установить группу пакетов “Development Tools”.

sudo yum group install "Development Tools"

Дождитесь завершения установки. Это установит gcc, make, autoconf, automake и другие инструменты сборки.

Шаг 2 — Установка Libuv на CentOS 7

Libuv — мультиплатформенная библиотека для асинхронного ввода-вывода, требуемая Turtl Server. Мы установим её вручную из исходников.

Сначала установите OpenSSL и заголовочные файлы:

yum -y install openssl openssl-devel

Перейдите в каталог /usr/local/src и скачайте релиз libuv.

cd /usr/local/src
wget http://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz

Распакуйте архив и удалите архивный файл:

tar -xf libuv-v1.9.1.tar.gz
rm -f libuv-v1.9.1.tar.gz
cd libuv-v1.9.1/

Соберите и установите:

sh autogen.sh
./configure
make
make install

Обновите кеш ссылок библиотек:

sudo ldconfig

Изображение: установка Libuv завершена

Успешная установка библиотеки Libuv на CentOS 7

Важно: версия libuv в примере — 1.9.1. Если доступна более новая стабильная версия, используйте её, но проверяйте совместимость с остальными компонентами.

Шаг 3 — Установка и настройка RethinkDB

RethinkDB — документно-ориентированная распределённая БД. Turtl Server использует RethinkDB как хранилище данных.

Добавьте официальный репозиторий RethinkDB для CentOS 7:

sudo wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo

Установите пакет:

sudo yum -y install rethinkdb

Скопируйте пример конфигурации в каталог instances.d:

cp /etc/rethinkdb/default.conf.sample /etc/rethinkdb/instances.d/default.conf

Создайте unit systemd (в исходном материале это делалось через ручное заполнение файла). Пример файла systemd приведён ниже. Важно: при создании файла используйте корректную кодировку и права доступа.

cd /etc/systemd/system
authorsudo vim rethinkdb.service

Вставьте конфигурацию (как в исходном примере):

# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/rethinkdb
Description=LSB: This starts a set of rethinkdb server instances.
Before=multi-user.target
Before=graphical.target
Before=shutdown.target
After=remote-fs.target
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/rethinkdb start
ExecStop=/etc/init.d/rethinkdb stop

Перезагрузите систему unitов и запустите сервис:

systemctl daemon-reload
systemctl start rethinkdb

Проверка статуса:

systemctl status rethinkdb
netstat -plntu

Изображения: установка и проверка RethinkDB

Установка RethinkDB

Проверка статуса RethinkDB и портов

Фактические порты RethinkDB (можно использовать в проверках и правилах firewall):

  • Клиентская порт (напр., драйверы): 28015/TCP
  • Консоль веб UI: 8080/TCP (по умолчанию)
  • Внутренний порт кластера: 29015/TCP

Совет по безопасности: ограничьте доступ к 28015/29015 из внешней сети, разрешив подключения только с доверенных хостов (например, локального сервера приложений).

Шаг 4 — Установка Clozure Common Lisp (ccl)

Turtl Server написан на Common Lisp, поэтому требуется реализация Lisp. В примере используется Clozure Common Lisp (ccl).

Скачайте пакет в /usr/local/src:

cd /usr/local/src
wget https://github.com/Clozure/ccl/releases/download/v1.11.5/ccl-1.11.5-linuxx86.tar.gz

Распакуйте и установите исполняемый файл ccl64:

tar -xf ccl-1.11.5-linuxx86.tar.gz
rm -f ccl-1.11.5-linuxx86.tar.gz
cd /usr/local/src/ccl
sudo cp scripts/ccl64 /usr/bin/

Проверьте запуск:

ccl64

Должна появиться интерактивная оболочка ccl. Выйдите командой:

(quit)

Изображение: успешный запуск ccl

Установка Common Lisp

Примечание: можно установить другую реализацию Common Lisp (SBCL и др.), но инструкции и пути будут отличаться.

Шаг 5 — Установка Quicklisp

Quicklisp — менеджер библиотек для Common Lisp. Turtl загружает зависимости через Quicklisp.

Создайте пользователя turtl и переключитесь на него:

useradd -m -s /bin/bash turtl
passwd turtl
su - turtl

Скачайте файлы quicklisp.lisp и asdf.lisp под пользователем turtl:

wget https://common-lisp.net/project/asdf/asdf.lisp
curl -O https://beta.quicklisp.org/quicklisp.lisp

Запустите ccl64 с загрузкой quicklisp и выполните установку:

ccl64 --load quicklisp.lisp
(quicklisp-quickstart:install)
(ql:add-to-init-file)
(load (compile-file "asdf.lisp"))
(quit)

Удалите установочные файлы:

rm -f asdf.lisp quicklisp.lisp

Изображение: Quicklisp установлен

Установка Quicklisp

Шаг 6 — Загрузка и установка Turtl Server

Под пользователем turtl клонируем репозиторий API Turtl:

su - turtl
git clone https://github.com/turtl/api.git
cd /home/turtl/api

Создайте файл launch.lisp, который позволит запускать сервер из ccl с загрузкой локального каталога:

vim launch.lisp

Вставьте:

(pushnew "./" asdf:*central-registry* :test #'equal)
(load "start")

Сохраните и закройте.

Установите локальные зависимости проекта в каталог quicklisp/local-projects:

cd ~/quicklisp/local-projects
git clone git://github.com/orthecreedence/cl-hash-util
git clone git://github.com/orthecreedence/vom
git clone git://github.com/orthecreedence/cl-async
git clone git://github.com/orthecreedence/cffi
git clone git://github.com/orthecreedence/wookie
git clone git://github.com/orthecreedence/cl-rethinkdb
git clone git://github.com/orthecreedence/cl-libuv
git clone git://github.com/orthecreedence/drakma-async
git clone https://github.com/Inaimathi/cl-cwd.git

Примечание: репозитории и ветки могут меняться. Если какой-то git-клон неудачен, проверьте доступность репозитория и используйте https URL при необходимости.

Отредактируйте файл инициализации ccl для пользователя turtl, чтобы автоматически запускать нужный корневой каталог при старте ccl:

vim /home/turtl/.ccl-init.lisp

Добавьте в конец:

(cwd "/home/turtl/api")
(load "/home/turtl/api/launch")

Создайте файл конфигурации Turtl на основе образца и укажите, чтобы сервер биндинговался на localhost (127.0.0.1):

cp /home/turtl/api/config/config.default.lisp /home/turtl/api/config/config.lisp
vim /home/turtl/api/config/config.lisp

Отредактируйте строку server-bind:

defvar *server-bind* "127.0.0.1"

Сохраните и выйдите.

Изображение: установка Turtl Server

Установка Turtl Server

Запустите ccl64 (под пользователем turtl) для инициализации API и загрузки зависимостей. Если всё настроено, Turtl API будет собран и запущен в интерактивной сессии ccl.

ccl64

При успешном завершении загрузки нажмите Ctrl+C и выйдите командой (quit) при необходимости.

Шаг 7 — Запуск Turtl Server как systemd-сервис

Вместо простого ExecStart=/usr/bin/ccl64 рекомендуется использовать unit, который запускает ccl с автозагрузкой вашего launch-файла и перенаправляет журналы в systemd. Пример улучшённого systemd unit:

cd /lib/systemd/system
vim turtl.service

Пример содержимого (рекомендуется адаптировать пути и опции):

[Unit]
Description=Turtl API service
After=network.target

[Service]
User=turtl
WorkingDirectory=/home/turtl/api
ExecStart=/usr/bin/ccl64 --load /home/turtl/api/launch.lisp
Restart=on-failure
RuntimeDirectory=turtl
StandardOutput=journal
StandardError=journal
Environment=HOME=/home/turtl

[Install]
WantedBy=multi-user.target

Объяснение:

  • WorkingDirectory гарантирует, что relative-пути корректны.
  • –load позволяет ccl сразу загрузить launch.lisp и инициализировать API.
  • Журналы идут в journalctl.

После создания unit:

systemctl daemon-reload
systemctl start turtl
systemctl enable turtl
systemctl status turtl

Проверьте логи:

journalctl -u turtl -f

Изображение: статус сервиса Turtl

Статус сервиса Turtl

Шаг 8 — Apache/httpd как обратный прокси для Turtl

Мы рекомендуем фронтировать Turtl через веб-сервер (Apache или nginx) и включить HTTPS. В примере используется Apache/httpd и конфиг виртуального хоста на 80 порту.

Установите httpd и модули:

yum -y install httpd mod_proxy_html

Создайте конфигурацию виртуального хоста:

cd /etc/httpd/conf.d
vim turtl.conf

Пример конфигурации (адаптируйте ServerName и email):



 ServerName turtl.hakase-labs.co
 ServerAdmin [email protected]

 ProxyPreserveHost On
 ProxyRequests off
 RewriteEngine On

 
 Order deny,allow
 Allow from all
 

 ProxyPass / http://127.0.0.1:8181/ Keepalive=On timeout=1600
 ProxyPassReverse / http://127.0.0.1:8181/

 LogLevel info
 CustomLog /var/log/httpd/turtl.log combined

Проверьте конфигурацию и перезапустите httpd:

apachectl configtest
systemctl restart httpd
systemctl enable httpd

Изображение: Apache как обратный прокси для Turtl

Apache/httpd в роли обратного прокси для Turtl

Важно по безопасности:

  • Настройте HTTPS через Let’s Encrypt (certbot) или ваш CA.
  • В конфиге ProxyPass можно добавить заголовки безопасности (Content-Security-Policy, X-Frame-Options и т. п.).
  • Ограничьте доступ к административным интерфейсам RethinkDB.

Проверка портов:

netstat -plntu

Проверка привязок портов и сервисов

Шаг 9 — Тестирование

Скачайте клиент Turtl для вашей платформы и при создании учётной записи введите email, пароль и домен вашего сервера (например, turtl.hakase-labs.co). Пройдите шаги регистрации и убедитесь, что доска (dashboard) открывается и создаются заметки.

Скриншоты примеров UI:

Клиент Turtl: создание аккаунта

Вариант: запомнить вход в систему

Ввод email и домена сервера

Пропустить шаг при регистрации

Пустая панель управления Turtl

Если клиент успешно подключается и интерфейс отображает панель, основной функционал работает.

Безопасность, firewall и SELinux

Рекомендации:

  • Откройте в firewall только необходимые порты: 80/443 (прокси), 28015/8080/29015 — только между доверенными хостами.

Примеры firewall-cmd (CentOS 7 с firewalld):

# Открыть HTTP и HTTPS
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# Разрешить доступ к RethinkDB только для локальной машины или конкретного хоста
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port port="28015" protocol="tcp" accept'
firewall-cmd --reload

SELinux: на некоторых установках SELinux может блокировать нестандартные действия. Для отладки временно переключите в permissive (не рекомендуется в продакшн) и постройте правильные политики:

setenforce 0  # временно
getenforce

Лучше написать и применить SELinux-модуль, чем полностью отключать SELinux.

Отладка и типовые ошибки

  1. Проблемы с зависимостями Quicklisp
    • Проверьте, что все локальные проекты находятся в ~/quicklisp/local-projects.
    • Убедитесь, что .ccl-init.lisp правильно загружает launch.lisp.
  2. Turtl не слушает на 127.0.0.1:8181
    • Проверьте конфиг /home/turtl/api/config/config.lisp, параметр server-bind.
    • Проверьте логи сервиса через journalctl -u turtl.
  3. RethinkDB не запускается
    • Проверьте /var/log/rethinkdb и systemctl status rethinkdb.
    • Убедитесь, что на диске достаточно места и права на каталог данных корректны.
  4. Прокси-проблемы
    • Убедитесь, что ProxyPass указывает на правильный адрес и порт.
    • При ошибках 502/504 проверьте, что Turtl действительно запущен и доступен локально.

Полезные команды для диагностики:

systemctl status turtl
journalctl -u turtl -b --no-pager
netstat -plntu | grep 8181
tail -n 200 /var/log/httpd/turtl.log
systemctl status rethinkdb

Контрольный список для администратора (роль: DevOps / системный админ)

Перед вводом в эксплуатацию:

  • Установлены и протестированы Libuv, ccl, Quicklisp.
  • RethinkDB запущен и доступен локально.
  • Turtl API работает под systemd и автоматически стартует.
  • Apache/nginx проксирует запросы, HTTPS настроен.
  • Firewall ограничивает доступ к БД.
  • SELinux проверен или корректно настроен.
  • Резервное копирование данных RethinkDB настроено.

Критерии приёмки

  • Turtl клиент успешно создаёт аккаунт через фронт (HTTPS) и создаёт/синхронизирует объекты.
  • Журналы не содержат критических ошибок при стандартных сценариях использования.
  • Доступ к административным интерфейсам БД ограничен.

Быстрые советы по производительности и эксплуатации

  • Для нагрузки на продакшн окружение подумайте о выделении отдельной машины для RethinkDB или кластере RethinkDB.
  • Контролируйте использование памяти процесса ccl и рестартуйте при утечках.
  • Настройте ротацию логов для /var/log/httpd/turtl.log и systemd-журналов.

Часто задаваемые вопросы (FAQ)

Как изменить порт, на котором слушает Turtl?

Порт задаётся в конфигурации Turtl (config.lisp). После изменения перезапустите сервис turtl и обновите прокси.

Можно ли поставить RethinkDB на отдельный сервер?

Да. Разделение БД и приложения — хорошая практика. В этом случае откройте доступ к 28015/TCP только с IP-адреса сервера приложений.

Можно ли использовать другую реализацию Common Lisp (например, SBCL)?

Технически да, но инструкции по установке и пути могут отличаться. Убедитесь, что все зависимости Quicklisp корректно работают с выбранной реализацией.

Итог и рекомендации

  • Установка Turtl Server на CentOS 7 требует установки нескольких компонентов и внимательной настройки конфигураций и прав доступа.
  • Для продакшна обязательно фронтировать через HTTPS и ограничить доступ к RethinkDB.
  • Автоматизируйте развёртывание (Ansible, Terraform) и добавьте мониторинг/оповещения для сервисов.

Ссылки и источники

Контрольные команды для быстрой проверки (сводка)

# Проверить статус turtl
systemctl status turtl
journalctl -u turtl -f

# Проверить RethinkDB
systemctl status rethinkdb
netstat -plntu | grep rethinkdb

# Проверить apache/httpd
apachectl configtest
systemctl status httpd

# Проверить порты
netstat -plntu

Короткая сводка (Summary)

Turtl Server на CentOS 7 разворачивается через последовательность шагов: подготовка системы, сборка Libuv, установка RethinkDB, установка Clozure CCL и Quicklisp, настройка Turtl API и запуск как systemd-сервиса. Важны защита доступа к базе данных, настройка обратного прокси с HTTPS и мониторинг сервисов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро