Как установить и настроить LimeSurvey на VPS
Готовые сервисы для опросов быстро упираются в лимиты: бесплатный тариф режет число ответов, платный — стоит как отдельная подписка, а сложную ветвящуюся логику анкеты (когда вопрос 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.
Мастер пройдёт через шаги:
- Выбор языка интерфейса — есть полноценный русский.
- Проверка окружения — здесь мастер покажет, если каких-то PHP-расширений не хватает или права на каталоги настроены неверно. Если что-то красное — вернитесь к предыдущему шагу и исправьте, не игнорируйте.
- Параметры подключения к базе: хост
localhost, имя базыlimesurvey, пользователь и пароль, заданные при создании базы. - Создание учётной записи администратора 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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →