Установка Turtl Server на 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-привилегии
- Доступ в интернет для загрузки пакетов и репозиториев
Что мы сделаем
- Установим инструменты разработки (Development Tools)
- Установим Libuv вручную
- Установим и настроим RethinkDB (репозиторий + systemd)
- Установим Clozure Common Lisp (ccl)
- Установим Quicklisp и локальные зависимости для Turtl
- Склонируем и настроим Turtl API
- Запустим Turtl как демон systemd
- Настроим Apache/httpd как обратный прокси с рекомендациями по HTTPS
- Протестируем клиент и проверим журналы
Шаг 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 в примере — 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 (можно использовать в проверках и правилах 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 (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 установлен

Шаг 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

Запустите 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

Шаг 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

Важно по безопасности:
- Настройте 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:





Если клиент успешно подключается и интерфейс отображает панель, основной функционал работает.
Безопасность, 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 --reloadSELinux: на некоторых установках SELinux может блокировать нестандартные действия. Для отладки временно переключите в permissive (не рекомендуется в продакшн) и постройте правильные политики:
setenforce 0 # временно
getenforceЛучше написать и применить SELinux-модуль, чем полностью отключать SELinux.
Отладка и типовые ошибки
- Проблемы с зависимостями Quicklisp
- Проверьте, что все локальные проекты находятся в ~/quicklisp/local-projects.
- Убедитесь, что .ccl-init.lisp правильно загружает launch.lisp.
- Turtl не слушает на 127.0.0.1:8181
- Проверьте конфиг /home/turtl/api/config/config.lisp, параметр server-bind.
- Проверьте логи сервиса через journalctl -u turtl.
- RethinkDB не запускается
- Проверьте /var/log/rethinkdb и systemctl status rethinkdb.
- Убедитесь, что на диске достаточно места и права на каталог данных корректны.
- Прокси-проблемы
- Убедитесь, что 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 и мониторинг сервисов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента