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

Установка FreeScout Help Desk на Debian 12 с LEMP

• 7 min read • DevOps • Обновлено 24 Nov 2025
FreeScout на Debian 12 — установка LEMP
FreeScout на Debian 12 — установка LEMP

FreeScout — лёгкая и полнофункциональная система поддержки с открытым исходным кодом. В этой инструкции описана поэтапная установка FreeScout на Debian 12 с LEMP (Nginx, MariaDB, PHP-FPM), настройка PHP, создание базы данных, конфигурация Nginx, выпуск SSL от Let’s Encrypt и запуск веб-инсталлятора. Включены советы по безопасности, типичные ошибки и контрольный список для эксплуатации.

Почему эта инструкция полезна

  • Подойдёт для развёртывания внутреннего или публичного helpdesk.
  • Использует проверенный стек: Nginx + MariaDB + PHP-FPM на Debian 12.
  • Покрывает SSL, права файлов и автоматизацию cron.

Содержание

  • Требования
  • Установка зависимостей
  • Настройка PHP-FPM
  • Настройка MariaDB
  • Загрузка кода FreeScout и права
  • Конфигурация Nginx
  • Получение SSL через Certbot
  • Установка через веб-инсталлятор
  • План запуска и cron
  • Резервное копирование и обновления
  • Отладка и часто встречающиеся ошибки
  • Альтернативные подходы и рекомендации по безопасности
  • Краткий словарь терминов
  • Контрольные списки ролей
  • Критерии приёмки

Требования

Перед началом убедитесь, что у вас есть:

  • Сервер с Debian 12.
  • Пользователь с sudo (не root).
  • Доменное имя, указывающее на IP сервера.

Важно: все команды в примерах выполняются от имени пользователя с правами sudo.

Установка зависимостей

FreeScout написан на PHP и может работать с MySQL/MariaDB или PostgreSQL. В этой инструкции используется MariaDB и Nginx (LEMP).

Обновите индекс пакетов:

sudo apt update

Установите Nginx, MariaDB, PHP-FPM и необходимые расширения:

sudo apt install nginx mariadb-server libmariadb-dev git php-fpm php-mysql php-mbstring php-xml php-imap php-zip php-gd php-curl php-intl

Подтвердите установку, нажав y.

Проверьте состояние сервисов:

sudo systemctl is-enabled nginx
sudo systemctl status nginx

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

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

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

sudo systemctl is-enabled php8.2-fpm
sudo systemctl status php8.2-fpm

Проверка статуса PHP-FPM

Проверьте версию PHP и включённые расширения:

php -v
php -m

Версия PHP и расширения

Краткое замечание: инструкции в примере используют PHP 8.2; если у вас иная версия, адаптируйте пути сокета и конфигурационные файлы.

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

Откройте файл конфигурации для PHP-FPM (пример для PHP 8.2):

sudo nano /etc/php/8.2/fpm/php.ini

Измените ключевые параметры под вашу среду:

memory_limit = 512M

date.timezone = Europe/Stockholm

upload_max_filesize = 16M

cgi.fix_pathinfo=0

Совет: укажите корректную временную зону вашего региона, например Europe/Moscow.

Перезапустите PHP-FPM, чтобы применить изменения:

sudo systemctl restart php8.2-fpm

Настройка MariaDB

Защитите сервер MariaDB и создайте базу данных для FreeScout.

Запустите утилиту защиты:

sudo mariadb-secure-installation

Во время выполнения вы будете по шагам выбирать: установить пароль root, удалить анонимных пользователей, отключить удалённый вход для root, удалить тестовую базу и перезагрузить таблицы привилегий. Рекомендуется отвечать утилите утвердительно на вопросы об удалении тестовых сущностей и применении привилегий.

Подключитесь к MariaDB как root:

sudo mariadb -u root -p

Создайте базу данных и пользователя (замените “password” на сильный пароль):

CREATE DATABASE freescout CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON freescout.* TO freescout@localhost IDENTIFIED BY "password";
FLUSH PRIVILEGES;

Проверьте права пользователя:

SHOW GRANTS FOR freescout@localhost;

Проверка прав в MariaDB

Выйдите из клиента командой quit.

Важно: используйте безопасный пароль и по возможности храните его в менеджере секретов.

Загрузка исходников FreeScout и права доступа

Создайте директорию веб-рута и перейдите в неё:

mkdir -p /var/www/freescout; cd /var/www/freescout

Склонируйте репозиторий FreeScout:

git clone https://github.com/freescout-helpdesk/freescout .

Установите владельца www-data, чтобы Nginx и PHP-FPM могли работать с файлами:

sudo chown -R www-data:www-data /var/www/freescout

Установите рекомендуемые права:

find /var/www/freescout -type f -exec chmod 664 {} \;
find /var/www/freescout -type d -exec chmod 775 {} \;

Примечание: если у вас CI/CD или развёртывание через git pull пользователем, отличным от www-data, настройте правильную стратегию обновлений и привилегий.

Конфигурация Nginx

Создайте новый серверный блок:

sudo nano /etc/nginx/sites-available/freescout

Вставьте конфигурацию и замените server_name на ваш домен:

server {
    listen 80;

    server_name howtoforge.local;
    root /var/www/freescout/public;
    index index.php index.html index.htm;

    error_log /var/www/freescout/storage/logs/web-server.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    # Uncomment this location if you want to improve attachments downloading speed.
    # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file.
    #location ^~ /storage/app/attachment/ {
    #    internal;
    #    alias /var/www/freescout/storage/app/attachment/;
    #}
    location ~* ^/storage/attachment/ {
        expires 1M;
        access_log off;
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~* ^/(?:css|js)/.*\.(?:css|js)$ {
        expires 2d;
        access_log off;
        add_header Cache-Control "public, must-revalidate";
    }
    location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
    }
    location ~ /\. {
        deny  all;
    }
}

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

sudo ln -s /etc/nginx/sites-available/freescout /etc/nginx/sites-enabled/
sudo nginx -t

Если тест прошёл успешно, перезапустите Nginx:

sudo systemctl restart nginx

Настройка Nginx

Совет: используйте отдельный лог-файл для веб-сервера приложения, как в примере, чтобы упростить отладку.

Получение SSL/TLS через Certbot

Установите Certbot и плагин для Nginx:

sudo apt install certbot python3-certbot-nginx

Установка Certbot

Запустите Certbot и создайте сертификат (замените email и домен):

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d help.example.io

После успешного выпуска сертификата Certbot обновит конфигурацию Nginx и включит редирект на HTTPS. Сертификаты сохраняются в /etc/letsencrypt/live/your-domain/.

Внимание: проверяйте автоматическое продление Certbot (cron или systemd timer). По умолчанию Certbot устанавливает systemd таймер для автоматического обновления.

Установка FreeScout через веб-инсталлятор

Откройте браузер и перейдите на ваш домен. Если вы заходите по http, Certbot перенаправит на https.

Шаги в веб-инсталляторе:

  1. Нажмите Check Requirements, чтобы проверить PHP-расширения.

Проверка требований

  1. Нажмите Check Permissions и убедитесь, что директория writable.

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

  1. В App URL укажите ваш домен, затем Setup Database.

App URL

  1. Выберите MySQL и укажите имя базы freescout, пользователя freescout и пароль.

Данные БД

  1. Выберите язык и часовой пояс, затем Setup Admin.

Язык и часовой пояс

  1. Создайте администратора, затем нажмите Install.

Настройка администратора

После успешной установки вы увидите подтверждение и рекомендацию добавить cron задачу.

Установка завершена

Настройка cron для планировщика задач

Добавьте cron задачу от имени www-data:

crontab -u www-data -e

Вставьте строку:

* * * * * php /var/www/freescout/artisan schedule:run >> /dev/null 2>&1

Это запустит диспетчер задач Laravel каждую минуту.

Вход и проверка

Откройте страницу входа и используйте созданные учётные данные администратора.

Страница входа FreeScout

После входа вы попадёте на панель управления.

Дashboard FreeScout

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

Резервное копирование состоит минимум из двух частей:

  • Файловой системы /var/www/freescout (исходники, логи и storage).
  • Базы данных MariaDB.

Пример простой стратегии резервного копирования:

  • Раз в день дамп базы: mysqldump freescout > /backup/freescout-$(date +%F).sql.
  • Раз в день архивация каталога storage и важных конфигов.
  • Храните резервные копии off-site или в облаке и проверяйте восстановление.

Обновления FreeScout выполняются через git pull и, при необходимости, composer install/update. Перед обновлением создайте бэкап и протестируйте изменения на тестовой среде.

Безопасность и лучшие практики

  • Отключите доступ к скрытым файлам через Nginx (пример уже содержит deny для dot-files).
  • Ограничьте доступ к административным страницам IP-фильтром при возможности.
  • Используйте только защищённые соединения (HTTPS) и включите HSTS.
  • Регулярно обновляйте пакеты ОС и PHP-расширения.
  • Храните секреты (пароли, API-ключи) в защищённом хранилище.
  • Минимизируйте права файлов: только необходимым пользователям предоставляйте запись.

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

  1. 502 Bad Gateway после установки

    • Причина: PHP-FPM не запущен или сокет другой версии. Проверьте sudo systemctl status php8.2-fpm и путь fastcgi_pass в конфигурации Nginx.
  2. Ошибки прав доступа к storage

    • Решение: sudo chown -R www-data:www-data /var/www/freescout и корректные права на директории.
  3. Ошибка подключения к базе данных

    • Проверьте правильность имени базы, пользователя, пароля и хоста. Проверьте, что MariaDB слушает локально и пользователь имеет привилегии.
  4. Проблемы с почтой

    • FreeScout требует SMTP для отправки писем. Проверьте настройки SMTP в приложении и работоспособность почтового сервера.
  5. Сертификаты не обновляются

    • Убедитесь, что systemd-таймер или cron для certbot работает: systemctl list-timers | grep certbot. Можно принудительно протестировать: sudo certbot renew --dry-run.

Альтернативные подходы

  • Docker и Docker Compose

    • Если вы предпочитаете контейнеры, можно запустить FreeScout через готовый docker-compose с сервисами: nginx, php-fpm, mysql/mariadb. Контейнеры упрощают изоляцию и обновления.
  • Apache вместо Nginx

    • FreeScout совместим с Apache + PHP-FPM. Конфигурация виртуального хоста будет отличаться и может быть проще для тех, кто знаком с .htaccess.
  • PostgreSQL

    • Вместо MariaDB можно использовать PostgreSQL; потребуется адаптация настроек БД при установке.

Проверка готовности системы Критерии приёмки

  • Веб-инсталлятор успешно завершён и вы залогинились как администратор.
  • HTTPS включён и валидный сертификат в браузере.
  • Cron работает: crontab -u www-data -l показывает задачу schedule:run.
  • Папки storage и bootstrap/cache доступны для записи для www-data.
  • Резервная политика документирована и проверена (хотя бы одно восстановление в тестовой среде).

Контрольные списки ролей

Сисадмин

  • Обновить систему и установить зависимости.
  • Настроить MariaDB и создать БД/пользователя.
  • Настроить Nginx и SSL.
  • Настроить регулярные бэкапы.

DevOps/операции

  • Автоматизировать развёртывание (Ansible, Terraform, CI/CD).
  • Настроить мониторинг доступности и логирования.

Администратор FreeScout

  • Создать админ-пользователя и базовую конфигурацию почты.
  • Настроить очереди, шаблоны и права агентов.

Проверочные тесты и критерии приёмки

  • Тест входа администратора: успешный вход в панель.
  • Тест отправки почты: создание тикета через почту и ручной отправки ответа.
  • Тест прав: агент не имеет доступа к настройкам администратора.
  • Тест резервного восстановления: восстановление дампа БД и проверка работоспособности.

Короткая методология развёртывания (шаги)

  1. Подготовить сервер и DNS.
  2. Установить Nginx, MariaDB, PHP и зависимости.
  3. Настроить PHP-FPM и MariaDB.
  4. Склонировать FreeScout и настроить права.
  5. Настроить Nginx и выпустить SSL.
  6. Завершить установку через веб-инсталлятор.
  7. Настроить cron и бэкапы.
  8. Документировать и мониторить сервис.

Факты и важные параметры

  • ОС: Debian 12
  • PHP: рекомендуемая версия 8.2 (в примере)
  • БД: MariaDB или MySQL
  • Веб-сервер: Nginx (в примере)
  • Cron: php /var/www/freescout/artisan schedule:run

Словарь на 1 строку

  • LEMP: стек Linux + Nginx + MariaDB/MySQL + PHP-FPM.
  • PHP-FPM: FastCGI Process Manager для PHP.
  • Certbot: клиент для получения сертификатов от Let’s Encrypt.

Соображения по миграции с других систем

  • При переносе данных из Zendesk/Help Scout используйте экспорт/импорт через CSV/API. Трансформация данных может требовать скриптов.
  • Тестируйте импорт на копии БД и проверяйте сопоставление полей.

Поддержка и дальнейшие шаги

  • Настройте мониторинг (uptime, доступность веба, использование CPU/RAM).
  • Настройте управление логами и реакцию на инциденты.
  • Регулярно проверяйте обновления FreeScout и зависимостей.

Краткое резюме

Вы установили FreeScout на Debian 12 с LEMP, настроили PHP-FPM и MariaDB, настроили Nginx и SSL с Certbot, прошли веб-инсталлятор и добавили cron для планировщика задач. Далее рекомендуются регулярные бэкапы, мониторинг и контроль доступа.

Важно

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

Поделиться: 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 быстро