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

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

MAATRIX

Если команда до сих пор разбирает обращения клиентов в общем почтовом ящике, рано или поздно кто-то теряет письмо, дублирует ответ или забывает про тикет на выходных. Help Scout и подобные SaaS решают проблему, но берут за это $20-50 с человека в месяц и растут в цене вместе с командой. FreeScout — open-source альтернатива с тем же принципом (тикеты выглядят как обычная переписка по почте), которую можно поставить на свой VPS один раз и не платить за сиденья вообще.

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

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

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

Что такое FreeScout и когда он подходит

FreeScout — это self-hosted helpdesk на PHP (Laravel), сделанный как прямая замена Help Scout после того, как тот закрыл бесплатный тариф. Интерфейс агента — это почтовый ящик: клиент пишет на support@vashdomen.ru, письмо становится тикетом, агенты отвечают из веб-интерфейса, клиент получает обычное письмо и не видит, что за кулисами работает helpdesk.

Из коробки есть:

  • несколько почтовых ящиков (Mailboxes) на разные адреса и отделы;
  • статусы тикетов, теги, заметки для команды (не видны клиенту);
  • автоответы, правила автоматизации, SLA-напоминания;
  • модульная система — часть функций (интеграции, отчёты, чаты) идёт как платные модули от автора, но ядро полностью бесплатно и без ограничения по числу агентов.

Разумные сценарии: техподдержка SaaS-продукта, обработка обращений интернет-магазина, внутренний IT-хелпдеск компании. Если нужен полноценный омниканальный контакт-центр с чатами на сайте и соцсетями "из коробки" — присмотритесь к более тяжёлым системам (Chatwoot, Zammad), FreeScout же силён именно в почтовом сценарии.

Требования по железу скромные: 1 vCPU, 1-2 ГБ RAM хватает на команду до 5-10 агентов и умеренный поток писем. Для более активной нагрузки берите 2 vCPU / 4 ГБ — Laravel и очереди Redis любят память больше, чем CPU.

Подготовка сервера: PHP, MySQL, зависимости

Ставим на чистый Ubuntu 24.04. Дальше все команды — от root или через sudo.

apt update && apt upgrade -y
apt install -y curl wget unzip git software-properties-common

Если вы ещё не разворачивали веб-стек на этом сервере, можно сначала собрать типовой LEMP (Nginx + MySQL + PHP) с нуля по отдельной инструкции — там подробно разобраны нюансы репозиториев и версий. Ниже — версия команд конкретно под FreeScout, если хотите поставить всё вручную здесь же.

FreeScout официально требует PHP 8.1 или новее (на конец августа 2026 актуальны 8.2/8.3, автор поддерживает их официально). Ставим PHP 8.2 из репозитория Ondřej Surý:

add-apt-repository ppa:ondrej/php -y
apt update
apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml \
  php8.2-curl php8.2-zip php8.2-gd php8.2-bcmath php8.2-imap php8.2-intl \
  php8.2-cli mysql-server nginx

Модуль php8.2-imap обязателен — через него FreeScout умеет забирать почту по IMAP как fallback-способ, даже если основной способ приёма — вебхук от вашего почтового провайдера.

Настраиваем MySQL:

mysql_secure_installation

Ответьте на вопросы (задать пароль root, убрать анонимных пользователей, запретить удалённый root-доступ, удалить тестовую БД) — стандартный набор, детали и частые ошибки на этом шаге разобраны в гайде по бэкапу MySQL на сервере, если MySQL для вас новый инструмент.

Создаём базу и пользователя:

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

Пароль генерируйте длинный и случайный — он попадёт в .env и нигде больше руками вводиться не будет.

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

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

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

Установка FreeScout, Nginx и SSL

Скачиваем последний релиз с GitHub и распаковываем в веб-корень:

cd /var/www
git clone https://github.com/freescout-helpdesk/freescout.git freescout
cd freescout

Клонирование через git удобнее прямого архива — потом обновления делаются через git pull плюс встроенный механизм апдейта. Ставим права:

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

Виртуальный хост Nginx для домена support.vashdomen.ru:

server {
    listen 80;
    server_name support.vashdomen.ru;
    root /var/www/freescout/public;
    index index.php;

    client_max_body_size 20M;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
ln -s /etc/nginx/sites-available/freescout /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

client_max_body_size 20M важен — иначе письма с вложениями и скриншотами будут падать с ошибкой 413. Дальше подключаем SSL — Certbot с Let's Encrypt закрывает вопрос одной командой:

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

Если сомневаетесь между Certbot и acme.sh для управления сертификатами на будущее — сравнение подходов есть в статье Certbot или acme.sh: что выбрать для сервера. Для одного домена без экзотики Certbot проще и достаточно.

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

Открываем https://support.vashdomen.ru в браузере — запускается мастер установки FreeScout. Он сам проверит версию PHP, расширения и права на запись, попросит данные подключения к MySQL (хост localhost, база freescout, пользователь и пароль из шага выше) и создаст первого администратора.

После установки веб-мастер обычно просит удалить или защитить public/install — сделайте это сразу:

rm -rf /var/www/freescout/public/install

Дальше в панели администратора (Manage → Mailboxes → New Mailbox) создаём почтовый ящик поддержки: указываем адрес support@vashdomen.ru, имя, подпись агентов по умолчанию.

Приём и отправка почты

Это самая важная и самая частая точка ошибок в FreeScout — стоит разобрать отдельно.

Отправка исходящих писем. По умолчанию PHP mail() часто уходит в спам или вообще не доставляется, потому что письма отправляются без DKIM и с сервера без репутации. Правильный путь — настроить SMTP-relay в Mailbox → Outgoing settings, указав внешний почтовый сервис (или свой почтовый сервер, если он уже поднят) с логином и паролем. Если у вас уже есть полноценный почтовый сервер на этом же VPS или соседнем — например, Postfix, — используйте его как SMTP-relay, это надёжнее внешних сервисов и не тянет лишних абонплат.

Приём входящих. Два рабочих способа:

  1. IMAP-опрос (проще всего для старта): Mailbox → Incoming settings → указываете IMAP-хост, порт, логин-пароль ящика. FreeScout сам, по крону, будет проверять новые письма.
  2. Пересылка (Piping/webhook): почтовый сервер сразу передаёт письмо в FreeScout через скрипт artisan freescout:fetch-emails или прямой pipe — быстрее, но требует доступа к настройке самого MTA (актуально, если ваш Postfix стоит рядом).

Для старта берите IMAP — он не требует прав на конфиг стороннего почтовика и работает с любым провайдером (Яндекс 360, Google Workspace, ваш собственный сервер).

Cron и очереди — без них FreeScout не работает как надо

FreeScout зависит от планировщика Laravel: именно через cron идёт опрос почты по IMAP, отправка отложенных писем, чистка старых данных. Добавляем задачу в crontab пользователя www-data:

crontab -u www-data -e
* * * * * php /var/www/freescout/artisan schedule:run >> /dev/null 2>&1

Если ранее не работали с cron на продакшене или хочется понять типовые грабли (неверный пользователь, отсутствие переменных окружения, конфликт с systemd-таймерами) — см. cron-задачи на сервере: частые ошибки и решения. Без этой строки почта просто перестанет опрашиваться после первого ручного запуска, и найти причину "тикеты не создаются" со стороны интерфейса будет непросто.

Дополнительно рекомендуется вынести очередь на Redis вместо sync-драйвера по умолчанию — это разгружает обработку писем от прямого HTTP-запроса и снижает шанс таймаута при большом вложении. В .env:

QUEUE_CONNECTION=redis

и systemd-юнит для воркера:

[Unit]
Description=FreeScout queue worker

[Service]
User=www-data
ExecStart=/usr/bin/php /var/www/freescout/artisan queue:work --sleep=3 --tries=3
Restart=always

[Install]
WantedBy=multi-user.target
apt install -y redis-server
systemctl enable --now redis-server
systemctl daemon-reload
systemctl enable --now freescout-worker

Резервное копирование и обновление

FreeScout хранит всё в двух местах: база MySQL и файлы (вложения, конфиги, установленные модули) в /var/www/freescout/storage. Бэкапить нужно оба:

mysqldump -u freescout -p freescout > /backup/freescout-db-$(date +%F).sql
tar -czf /backup/freescout-storage-$(date +%F).tar.gz /var/www/freescout/storage

Вынесите это в отдельный крон-скрипт с ротацией старых архивов — вручную такие вещи забывают делать в первую же неделю после того, как всё "заработало и без того".

Обновление до новой версии — через git и встроенный апдейтер:

cd /var/www/freescout
sudo -u www-data git pull origin main
sudo -u www-data php artisan freescout:upgrade

Перед апдейтом на продакшен-инстансе всегда снимайте свежий бэкап базы — миграции необратимы без отката из дампа.

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

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

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

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

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

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

FreeScout правда бесплатный?

Ядро (приём/обработка тикетов, мультиящики, автоматизация) — да, MIT-лицензия, без лимита на число агентов. Часть модулей (интеграция с чатом, отчёты, ряд коннекторов) автор продаёт отдельно единоразово — но базовый почтовый хелпдеск работает полностью без них.

Можно ли перенести историю переписки из Help Scout?

Есть неофициальные скрипты и платный модуль импорта от сообщества, готового решения "в один клик" от разработчика нет. Для небольших объёмов проще выгрузить переписку через API Help Scout и импортировать через artisan-команды или напрямую в БД.

Почему письма из FreeScout попадают в спам?

Почти всегда из-за отсутствия SPF/DKIM/DMARC у домена отправки или использования "голого" PHP mail() вместо нормального SMTP-relay с прогретой репутацией. Настройте отправку через существующий почтовый сервер с корректными DNS-записями.

Нужен ли отдельный сервер под FreeScout или можно на общем с сайтом?

Для небольшой команды достаточно 1 vCPU/2 ГБ, можно разместить рядом с другими лёгкими сервисами. При росте потока писем (сотни в день, вложения) выносите на отдельный VPS — так проще следить за очередями и не зависеть от нагрузки основного сайта.

Как защититься от спама во входящих тикетах?

Включите капчу на форме на сайте (если используете виджет), плюс базовую фильтацию по SPF/DKIM на своём почтовом сервере до того, как письмо попадёт в очередь FreeScout — фильтровать спам постфактум в самом хелпдеске неудобно.

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

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

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