Установка UVdesk на Rocky Linux 8 с Nginx, MySQL и PHP
UVdesk — открытая SaaS-поддержка для компаний. В этом руководстве показаны все шаги установки на сервере Rocky Linux 8 с Nginx, PHP 8.0, MySQL и SSL от Let’s Encrypt. Следуйте шаг за шагом: подготовка сервера, настройка брандмауэра, установка Nginx и PHP, создание базы данных, настройка SELinux и автоматическое продление сертификатов.
Важно: перед началом сделайте резервную копию важных данных и убедитесь, что домен указывает на ваш сервер.

Кому подходит это руководство
Это руководство рассчитано на системных администраторов и инженеров DevOps с базовым опытом работы в Linux и с веб-серверами. Если вы — менеджер поддержки, используйте разделы «Контрольный список» и «Критерии приёмки».
Основные термины (в одну строку)
- Nginx — легковесный веб-сервер и обратный прокси.
- PHP-FPM — FastCGI-процесс-менеджер для PHP.
- SELinux — механизм политики безопасности на уровне ядра.
- Certbot — клиент для получения сертификатов от Let’s Encrypt.
Содержимое инструкции
- Подготовка сервера
- Настройка брандмауэра
- Установка Nginx, PHP и MySQL
- Конфигурация SELinux и прав
- SSL — установка и автопродление
- Конфигурация Nginx и PHP-FPM
- Установка UVdesk и проверка
- Дополнительно: чек-листы, тесты, отладка, безопасность
Требования
- Сервер с Rocky Linux 8.
- Домен, указывающий на сервер (в примере используется uvdesk.example.com).
- Пользователь с sudo-привилегиями (не root).
- Обновлённая система и базовые утилиты.
Обновите систему:
$ sudo dnf update
Установите базовые утилиты (если они ещё не установлены):
$ sudo dnf install wget curl nano unzip yum-utils -y
Шаг 1 — Настройка брандмауэра
Rocky Linux использует firewalld. Проверьте статус:
$ sudo firewall-cmd --state
running
Покажите текущие сервисы зоны по умолчанию (обычно public):
$ sudo firewall-cmd --permanent --list-services
Разрешите HTTP и HTTPS:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload
Проверьте, что http и https появились в списке служб.
Важно: если вы используете нестандартную зону или дополнительные порты (например, для админ-панелей), разрешите их явно.
Шаг 2 — Установка Nginx
Rocky Linux может поставляться со старой версией Nginx. Добавьте официальный репозиторий Nginx:
Создайте файл /etc/yum.repos.d/nginx.repo:
$ sudo nano /etc/yum.repos.d/nginx.repo
Вставьте содержимое:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Сохраните и установите Nginx:
$ sudo dnf install nginx
$ nginx -v
# nginx version: nginx/1.20.2
$ sudo systemctl enable nginx
Примечание: версия может отличаться. Если у вас есть корпоративный прокси для dnf, настройте его заранее.
Шаг 3 — Установка PHP и расширений
Мы используем репозиторий Remi для установки PHP 8.0. Сначала подключите EPEL и Remi:
$ sudo dnf install epel-release
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Проверьте доступные потоки PHP и включите remi-8.0:
$ dnf module list php -y
# (вывод может содержать потоки 7.2–8.1)
$ sudo dnf module reset php
$ sudo dnf module enable php:remi-8.0
Установите PHP и требующиеся расширения для UVdesk:
$ sudo dnf install php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-cli php-intl php-bcmath php-gd php-tokenizer php-imap php-pear php-mailparse
Проверьте версию PHP:
$ php --version
# PHP 8.0.x (cli)
Короткая рекомендация: поддерживаемые расширения важны для работы почты, импорта писем и генерации архивов.
Шаг 4 — Установка и настройка MySQL
Установите MySQL-server:
$ sudo dnf install mysql-server
$ sudo systemctl enable mysqld --now
Запустите скрипт безопасной настройки:
$ sudo mysql_secure_installation
Выберите включение Validate Password Plugin и уровень STRONG (2) при желании. Затем задайте надёжный пароль для root и ответьте “Y” для удаления анонимных пользователей и тестовой БД.
Создайте пользователя и базу данных для UVdesk:
$ mysql -u root -p
mysql> CREATE USER 'uvdesk'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> CREATE DATABASE uvdeskdb;
mysql> GRANT ALL PRIVILEGES ON uvdeskdb.* TO 'uvdesk'@'localhost';
mysql> exit
Примечание: замените ‘Your_password2’ на надёжный пароль, соответствующий политике.
Шаг 5 — Загрузка UVdesk
Скачайте последнюю стабильную версию UVdesk и распакуйте её в /var/www:
$ wget https://cdn.uvdesk.com/uvdesk/downloads/opensource/uvdesk-community-current-stable.zip
$ unzip uvdesk-*.zip
$ sudo mv uvdesk-community-v1.0.18 /var/www/uvdesk
$ cd /var/www/uvdesk
Отредактируйте файл окружения .env и переключите режим в production:
$ sudo nano .env
# найдите APP_ENV=dev и замените на
APP_ENV=prod
Смените владельца на пользователя Nginx (в Rocky Linux это nginx):
$ sudo chown -R nginx:nginx /var/www/uvdesk
Важно: права на файлы должны позволять веб-серверу читать и записывать необходимые каталоги. В последующих разделах есть подробности по SELinux.
Шаг 6 — Настройка SELinux
Если SELinux включён (рекомендуется), установите правильные контексты:
$ sudo chcon -t httpd_sys_content_t /var/www/uvdesk -R
$ sudo chcon -t httpd_sys_rw_content_t /var/www/uvdesk -R
$ sudo setsebool -P httpd_can_network_connect on
Пояснение: первый контекст делает файлы доступными для чтения веб-сервером, второй — разрешает запись. setsebool разрешает исходящие сетевые соединения от httpd (нужно, например, для отправки почты через внешние сервисы).
Примечание: если вы часто развертываете приложения, рассмотрите создание локальной политики SELinux или использование semanage fcontext для постоянного применения.
Шаг 7 — SSL с Let’s Encrypt и Certbot
Установите Certbot (EPEL уже должен быть подключён):
$ sudo dnf install certbot
Запрос сертификата (standalone):
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d uvdesk.example.com
Сертификаты сохранятся в /etc/letsencrypt/live/uvdesk.example.com.
Сгенерируйте Diffie-Hellman параметры (усиливают безопасность TLS):
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Создайте директорию для webroot-челленджа и cron для автопродления:
$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renew
Вставьте:
#!/bin/sh
certbot renew --cert-name uvdesk.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Сделайте файл исполняемым:
$ sudo chmod +x /etc/cron.daily/certbot-renew
Важно: если Nginx слушает 80 порт, используйте webroot-метод с правильно смонтированной директорией проверки или временно останавливайте Nginx для standalone.
Шаг 8 — Конфигурация PHP-FPM и Nginx
PHP-FPM
Откройте /etc/php-fpm.d/www.conf и смените пользователя/группу на nginx:
$ sudo nano /etc/php-fpm.d/www.conf
Измените строки:
user = nginx
group = nginx
Запустите и включите сервис PHP-FPM:
$ sudo systemctl enable php-fpm --now
$ sudo chgrp -R nginx /var/lib/php/session
Nginx: виртуальный хост для UVdesk
Создайте файл /etc/nginx/conf.d/uvdesk.conf и вставьте конфигурацию:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name uvdesk.example.com;
access_log /var/log/nginx/uvdesk.access.log;
error_log /var/log/nginx/uvdesk.error.log;
# SSL
ssl_certificate /etc/letsencrypt/live/uvdesk.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/uvdesk.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/uvdesk.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 8.8.8.8;
root /var/www/uvdesk/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Pass PHP Scripts To FastCGI Server
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/run/php-fpm/www.sock; # Depends On The PHP Version
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
try_files $uri =404;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name uvdesk.example.com;
return 301 https://$host$request_uri;
}
Обратите внимание: корневая директория должна быть /var/www/uvdesk/public.
Отредактируйте /etc/nginx/nginx.conf и добавьте выше include /etc/nginx/conf.d/*.conf; строку:
server_names_hash_bucket_size 64;
Проверьте конфигурацию и запустите Nginx:
$ sudo nginx -t
$ sudo systemctl start nginx
Шаг 9 — Установка через веб-интерфейс
Откройте в браузере: https://uvdesk.example.com

Нажмите “Let’s Begin” и следуйте мастеру.

Нажмите “Proceed”. Введите данные базы данных из Шага 4.

Создайте супер-администратора в мастере установки.

Настройте префиксы панели участника и клиента (URL маршруты).

Нажмите “Install Now” для запуска финальной установки.

После завершения вы увидите экран с ссылками на админ-панель и фронтенд.

Поздравляем — UVdesk установлен.
Проверки и тесты (Критерии приёмки)
- Веб-интерфейс доступен по HTTPS, валидный сертификат от Let’s Encrypt.
- Админ-панель открывается, можно войти под созданным супер-админом.
- Отправка и получение писем работают (если настроен почтовый транспорт).
- Можно создать тикет через фронтенд и увидеть его в админ-панели.
- Логи Nginx и PHP не содержат критических ошибок при стандартных сценариях.
Тестовый чек-лист (минимум):
- Доступна страница / (HTTP -> перенаправление на HTTPS).
- Перейти в /admin или URL админ-панели и залогиниться.
- Создать тестовый тикет по почте и по форме на сайте.
- Проверить логи: /var/log/nginx/uvdesk.error.log и error_log php-fpm.
Отладка и типичные ошибки
502 Bad Gateway после настройки Nginx
- Проверьте, что php-fpm запущен и сокет
/run/php-fpm/www.sockсуществует. - Убедитесь, что пользователь/группа совпадают (nginx/nginx).
- Проверьте, что php-fpm запущен и сокет
500 Internal Server Error
- Проверьте права файлов и SELinux. Просмотрите журналы Nginx и PHP-FPM.
Ошибки SSL при получении сертификата
- Убедитесь, что порт 80 открыт и домен указывает на сервер.
- Для standalone Certbot временно останавливает Nginx или использует webroot.
Проблемы с правами записи
- Проверьте каталоги
var,publicи папки кеша/логов. Дайте право записи nginx.
- Проверьте каталоги
Рекомендации по безопасности
- Регулярно обновляйте систему и пакеты:
sudo dnf upgrade. - Ограничьте доступ к админ-панели по IP или используйте двухфакторную аутентификацию, если поддерживается.
- Настройте бэкапы базы данных и файлов сайта (ежедневные дампы и архивация).
- Ограничьте права SSH (отключите вход по паролю, используйте ключи).
Резервное копирование и восстановление (мини-SOP)
- Бэкап базы данных:
$ mysqldump -u uvdesk -p uvdeskdb > /root/backups/uvdeskdb-$(date +%F).sql
- Бэкап файлов приложения:
$ tar -czf /root/backups/uvdesk-www-$(date +%F).tar.gz /var/www/uvdesk
- Восстановление базы данных:
$ mysql -u uvdesk -p uvdeskdb < /root/backups/uvdeskdb-2022-01-01.sql
Важно: проверяйте целостность резервных копий и храните их в удалённом хранилище.
Роль‑ориентированные чек-листы
Sysadmin / DevOps:
- Подключение репозиториев (Remi, EPEL, Nginx).
- Настройка SELinux и прав доступа.
- Настройка автопродления сертификатов.
Support Manager:
- Создать тестовый тикет и верифицировать маршрутизацию писем.
- Проверить шаблоны canned replies и Knowledgebase.
Developer:
- Убедиться, что окружение APP_ENV=prod и кэш собран, если требуется.
Альтернативные подходы
- Использовать Apache вместо Nginx — потребуется адаптация конфигураций и прав на sockets.
- Запускать PHP в Docker-контейнерах — полезно для изоляции версий и упрощения миграций.
- Использовать управляемую БД (RDS/Managed MySQL) для упрощения резервного копирования и HA.
Когда этот план не подходит
- Если у вас ограниченный хостинг без root/сервиса systemd — используйте хостинг с поддержкой PHP или Docker.
- Если вам нужна высокая доступность — настройте балансировщик и реплику БД.
Тестовые сценарии и критерии приёмки
- Доступность сайта по HTTPS. Ожидаемый результат: валидный сертификат, HTTP -> HTTPS редирект.
- Авторизация администратора. Ожидаемый результат: успешный вход.
- Создание тикета через email. Ожидаемый результат: письмо создаёт тикет, он видим в UI.
Советы по миграции и обновлению версий
- Перед обновлением UVdesk экспортируйте базу и сделайте резервную копию файлов.
- Протестируйте обновление на staging-сервере.
- Обновления PHP: проведите тесты совместимости на локальном окружении.
Краткий план действий для развертывания в проде (roadmap)
- Подготовить сервер и DNS.
- Установить Nginx, PHP и MySQL.
- Настроить SELinux и права.
- Получить SSL и настроить автопродление.
- Загрузить UVdesk и завершить установку через веб.
- Настроить мониторинг и бэкапы.
Короткое резюме
Вы установили UVdesk на Rocky Linux 8, настроили Nginx, PHP-FPM, MySQL и SSL. Провели базовую проверку и подготовили автопродление сертификатов и рекомендации по безопасности.
Если возникнут вопросы, опишите шаг, на котором появилась ошибка, и приложите логи Nginx и PHP-FPM для ускоренного разбора.
Ключевые файлы и пути
- Веб-корень: /var/www/uvdesk/public
- Конфигурация Nginx: /etc/nginx/conf.d/uvdesk.conf
- PHP-FPM pool: /etc/php-fpm.d/www.conf
- Сертификаты: /etc/letsencrypt/live/uvdesk.example.com/
- SELinux контексты: chcon и setsebool выше
Важно: следите за логами и делайте регулярные бэкапы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента