MAATRIX / Блог / Как установить и настроить LimeSurvey на VPS

Как установить и настроить LimeSurvey на VPS

MAATRIX

Готовые сервисы для опросов быстро упираются в лимиты: бесплатный тариф режет число ответов, платный — стоит как отдельная подписка, а сложную ветвящуюся логику анкеты (когда вопрос 12 показывается только тем, кто на вопросе 5 ответил «да») там вообще не собрать без танцев с бубном. LimeSurvey — open-source движок именно под такие задачи: неограниченное число опросов и ответов, условная логика любой вложенности, экспорт в SPSS и R, полная русская локализация. Разворачивается он на своём VPS за час — дальше показываю весь путь от чистого сервера до рабочего опроса с SSL.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Требования к серверу и выбор ОС

LimeSurvey — не тяжёлый проект, но и не статичный сайт: под капотом полноценный PHP-фреймворк (Yii) с активной работой с базой при каждом ответе на опрос. Для небольшой и средней нагрузки (несколько параллельных опросов, сотни ответов в день) хватает:

  • 2 vCPU, 2 ГБ RAM — рабочий минимум без запаса;
  • 4 ГБ RAM — комфортно, если опросы длинные (много вопросов и файловых полей) или ответов много одновременно;
  • 10–20 ГБ диска — с запасом под экспорты и загруженные файлы, если используете вопросы с прикреплением документов.

Из ОС берите Ubuntu 24.04 LTS или Debian 12 — под них проще всего собрать актуальный LEMP-стек (Linux, Nginx, MySQL, PHP), которого LimeSurvey ждёт. Ниже все команды — под Ubuntu 24.04, для Debian они совпадают почти дословно.

Проверьте версию системы и обновите пакеты перед началом:

lsb_release -a
apt update && apt -y upgrade

Установка LEMP-стека: Nginx, MySQL, PHP

LimeSurvey официально поддерживает PHP 8.1–8.3 (на момент написания статьи — проверьте актуальные требования на сайте проекта перед установкой, версии PHP-совместимости обновляются). Ставим PHP 8.3, MySQL 8 и Nginx одной серией команд:

apt install -y nginx mysql-server php8.3-fpm php8.3-mysql \
  php8.3-mbstring php8.3-gd php8.3-curl php8.3-xml php8.3-zip \
  php8.3-imap php8.3-ldap php8.3-intl php8.3-bcmath unzip

Запустите и включите автозапуск сервисов:

systemctl enable --now nginx mysql php8.3-fpm

Создайте базу данных и отдельного пользователя для LimeSurvey — работать под root в проде не стоит:

mysql -u root -p
CREATE DATABASE limesurvey CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'limesurvey'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON limesurvey.* TO 'limesurvey'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Про установку и тонкую настройку самого MySQL отдельно — в статье про установку MySQL на VPS, там же про базовое укрепление доступа к серверу БД.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка LimeSurvey

Скачайте актуальную стабильную сборку с официального сайта проекта (ссылку на текущий релиз проверьте на limesurvey.org — нумерация версий меняется) и распакуйте в каталог сайта:

mkdir -p /var/www/limesurvey
cd /tmp
wget https://download.limesurvey.org/latest-stable-release/limesurvey5xxx.zip -O limesurvey.zip
unzip limesurvey.zip -d /var/www/limesurvey

После распаковки содержимое обычно оказывается во вложенной папке limesurvey/ — переместите его на уровень выше, если так:

mv /var/www/limesurvey/limesurvey/* /var/www/limesurvey/
rmdir /var/www/limesurvey/limesurvey

Выставьте права: владелец — пользователь Nginx/PHP-FPM (www-data на Ubuntu/Debian), это критично — иначе веб-установщик не сможет писать конфиг и загружать файлы:

chown -R www-data:www-data /var/www/limesurvey
find /var/www/limesurvey -type d -exec chmod 755 {} \;
find /var/www/limesurvey -type f -exec chmod 644 {} \;

Отдельно проверьте, что каталоги tmp/, upload/ и application/config/ доступны на запись пользователю www-data — веб-установщик сам создаст в них нужные подпапки, но при неверных правах падает с ошибкой доступа на первом же шаге.

Настройка Nginx и PHP-FPM

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

nano /etc/nginx/sites-available/limesurvey
server {
    listen 80;
    server_name opros.vashdomen.ru;
    root /var/www/limesurvey;
    index index.php;

    client_max_body_size 32M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.(?!well-known) {
        deny all;
    }

    location ~ ^/(tmp|upload)/.*\.php$ {
        deny all;
    }
}

Последний блок — не декоративный: каталоги tmp и upload принимают файлы от пользователей (загрузки в опросах, временные экспорты), и если туда случайно попадёт исполняемый PHP-файл, сервер не должен его запускать. Это базовая защита от загрузки веб-шелла через уязвимую форму.

Активируйте конфиг и проверьте синтаксис:

ln -s /etc/nginx/sites-available/limesurvey /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Директиву client_max_body_size увеличьте, если в опросах есть загрузка крупных файлов — иначе Nginx будет обрезать запрос раньше, чем PHP успеет его обработать. Соответствующий лимит upload_max_filesize и post_max_size также поправьте в /etc/php/8.3/fpm/php.ini и перезапустите php8.3-fpm.

Веб-установка и первый опрос

Направьте A-запись поддомена (например, opros.vashdomen.ru) на IP сервера и дождитесь распространения DNS — проверить можно командой dig +short opros.vashdomen.ru. После этого откройте домен в браузере: запустится мастер установки LimeSurvey.

Мастер пройдёт через шаги:

  1. Выбор языка интерфейса — есть полноценный русский.
  2. Проверка окружения — здесь мастер покажет, если каких-то PHP-расширений не хватает или права на каталоги настроены неверно. Если что-то красное — вернитесь к предыдущему шагу и исправьте, не игнорируйте.
  3. Параметры подключения к базе: хост localhost, имя базы limesurvey, пользователь и пароль, заданные при создании базы.
  4. Создание учётной записи администратора LimeSurvey — задайте отдельный логин и сложный пароль, это уровень доступа выше, чем у обычных редакторов опросов.

После завершения мастер предложит удалить или переименовать установочный каталог — сделайте это сразу:

rm -rf /var/www/limesurvey/install

Оставленный установщик — частая причина взлома: он ничем не защищён и позволяет пересоздать конфигурацию заново, если кто-то на него наткнётся.

Дальше в админке (/admin) создаётся первый опрос: набор вопросов, группы, условная логика (в LimeSurvey это называется «условия» — привязка видимости вопроса к ответам на предыдущие), настройки анонимности и период сбора ответов. Для сложных анкет с ветвлением используйте встроенный конструктор условий — он визуальный и не требует кода, хотя для действительно нетривиальной логики (математические выражения между переменными) придётся заглянуть в синтаксис Expression Manager, встроенный в движок.

SSL, cron и резервное копирование

Без HTTPS современные браузеры помечают форму ввода данных как небезопасную, а часть встроенных проверок LimeSurvey (например, работа с cookie сессии в некоторых конфигурациях) требует именно защищённого соединения. Выпустите сертификат Let's Encrypt через certbot:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d opros.vashdomen.ru

Certbot сам пропишет редирект с 80 на 443 и настроит автопродление. Подробный разбор процесса и типичных проблем с выпуском — в статье про установку и настройку Let's Encrypt на VPS.

LimeSurvey использует cron для двух вещей: автоматического закрытия опросов по расписанию (если задан период сбора ответов с чётким концом) и отправки отложенных email-приглашений и напоминаний участникам. Без настроенного cron эти функции просто не сработают — вручную открывать/закрывать опрос по таймеру никто не будет. Добавьте задачу:

crontab -e -u www-data
*/5 * * * * php /var/www/limesurvey/application/commands/console.php plugin --target=console_run_cron_jobs

Общий разбор синтаксиса cron и частых ошибок с ним — в статье про настройку cron-задач на VPS.

Резервные копии — база данных плюс каталог upload/ (там лежат файлы, загруженные респондентами, и экспорты) — это данные, которые не восстановить, если сервер откажет. Минимальный вариант через cron:

0 3 * * * mysqldump -u limesurvey -p'ПАРОЛЬ' limesurvey | gzip > /var/backups/limesurvey_$(date +\%F).sql.gz

Копии храните вне сервера — на отдельном хранилище или через rsync на другую машину; локальный бэкап не спасёт при отказе диска. Также закройте сервер стандартным фаерволом, оставив только 22 (SSH), 80 и 443 — базовая настройка описана в статье про firewall UFW на VPS.

Обновление и обслуживание

LimeSurvey регулярно выпускает патчи безопасности и новые минорные версии. Обновление через админку (раздел ComfortUpdate) работает, но требует лицензии на этот сервис у разработчиков; бесплатный путь — ручное обновление файлов с сохранением каталогов upload/ и application/config/config.php, где хранятся ваши настройки и данные. Перед любым обновлением обязательно снимите бэкап базы и файлов — миграции схемы иногда меняют структуру таблиц, и откат без свежей копии будет болезненным.

Следите за логами PHP-FPM и Nginx при первых днях работы опроса под реальной нагрузкой — большинство проблем (нехватка памяти PHP, таймауты при экспорте больших выборок ответов) видны там сразу. Параметр memory_limit в php.ini для тяжёлых опросов с сотнями вопросов и тысячами ответов стоит поднять с дефолтных значений — конкретную цифру подбирайте по факту, ориентируясь на потребление в логах, а не по шаблону.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли поставить LimeSurvey на Apache вместо Nginx?

Да, движок одинаково хорошо работает на обоих веб-серверах — в этой статье выбран Nginx как более экономный по ресурсам вариант для типового VPS, но конфигурация под Apache с mod_php тоже официально поддерживается.

Подходит ли SQLite вместо MySQL для небольшого опроса?

LimeSurvey формально умеет работать с SQLite, но разработчики сами не рекомендуют его для продакшена — при параллельных ответах возможны блокировки записи. Для чего угодно серьёзнее одиночного теста ставьте MySQL или MariaDB.

Почему после установки не приходят email-приглашения участникам?

Чаще всего дело в двух вещах: не настроен SMTP в настройках опроса (по умолчанию используется системная функция mail(), которую многие провайдеры блокируют или помечают как спам) или не работает cron — без него отложенные рассылки просто не запускаются. Проверьте оба пункта по очереди.

Сколько ответов реально выдержит опрос на минимальном VPS?

Точную цифру без тестирования на вашей нагрузке назвать нельзя — это зависит от длины анкеты, числа вопросов с логикой и параллельности ответов. Для спокойной работы с несколькими сотнями ответов в день конфигурации 2 ГБ RAM обычно достаточно; при заметных просадках — первое, что стоит проверить, память PHP-FPM и число воркеров.

Нужен ли отдельный домен под LimeSurvey или хватит поддомена?

Поддомена вполне достаточно и это самый частый вариант — виртуальный хост Nginx настраивается одинаково что под домен, что под поддомен, разницы в конфигурации нет.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →