Перейти к содержанию

Обзор развертывания панели управления Pterodactyl на сервере

Предварительные требования и базовые условия

Для развертывания панели управления Pterodactyl требуется сервер с операционной системой Ubuntu 22.04 (Jammy). Для установки зависимостей, настройки сервисов и управления правами доступа к файлам необходимы права root. Требуется наличие следующих компонентов:

  • Операционная система: Ubuntu 22.04 (Jammy)

  • Привилегии: Доступ root

  • Домен: Поддомен в зоне hostkey.in

  • Порты:

  • Порт 80 и 443 для веб-трафика (HTTP/HTTPS)

  • Порт 8000 для внутренней коммуникации приложения

  • Порт 12333 для внешнего доступа к прокси Wings

  • Порт 3306 для MariaDB

  • Порт 6379 для Redis

FQDN конечной панели

Полное доменное имя (FQDN) для панели Pterodactyl следует формату: pterodactyl<Server ID>.hostkey.in

Приложение доступно через HTTPS на порту 443 и через прокси Wings на порту 12333.

Структура файлов и каталогов

Файлы приложения, конфигурация и данные организованы в следующих расположениях:

  • Корневая директория приложения: /var/www/pterodactyl

  • Публичные ресурсы: /var/www/pterodactyl/public

  • Директория хранения: /var/www/pterodactyl/storage

  • Кэш Bootstrap: /var/www/pterodactyl/bootstrap/cache

  • Конфигурация Nginx: /etc/nginx/sites-available/pterodactyl.conf

  • Docker Compose для Nginx: /root/nginx/compose.yml

  • Сертификаты SSL: /etc/letsencrypt/live/pterodactyl<Server ID>.hostkey.in

  • Сервисы Systemd: /etc/systemd/system/pteroq.service

  • Задачи Cron: /etc/cron.d/pterodactyl

Процесс установки приложения

Панель Pterodactyl устанавливается с использованием последней версии архива из официального репозитория. Процесс установки включает следующие шаги:

  1. Подготовка системы: Обновление кэша пакетов и установка необходимых зависимостей, включая nginx, mariadb-server, redis-server, php8.2 и composer.

  2. Настройка репозиториев: Добавление PPA Ondrej PHP и официального репозитория Redis для обеспечения установки корректных версий PHP и Redis.

  3. Активация сервисов: Включение и запуск сервисов php8.2-fpm, mariadb, redis-server, nginx и cron.

  4. Развертывание приложения:

    • Скачивание последнего архива panel.tar.gz с GitHub.

    • Распаковка архива в /var/www/pterodactyl.

    • Создание необходимых директорий (storage, bootstrap, bootstrap/cache) и назначение владельца www-data.

  5. Установка зависимостей: Запуск команды composer install для установки PHP-зависимостей.

  6. Инициализация базы данных:

    • Настройка MariaDB для установки пароля root.

    • Создание базы данных panel.

    • Выполнение миграций базы данных и заполнение начальными данными (seed).

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

  8. Настройка воркера очереди: Установка и включение сервиса systemd pteroq для обработки фоновых задач.

  9. Настройка планировщика: Настройка задачи cron для запуска планировщика Laravel каждую минуту.

Права доступа и безопасность

Безопасность обеспечивается через изоляцию сервисов, правила межсетевого экрана и строгие права доступа к файлам.

  • Межсетевой экран (Firewall): Сервер разрешает трафик на портах 80, 443, 8000, 12333, 3306 и 6379.

  • Пользователи:

  • Веб-сервер и файлы приложения принадлежат пользователю и группе www-data.

  • Сервис pteroq работает от имени пользователя www-data.

  • Пользователь root управляет системными конфигурациями и задачами cron.

  • Ограничения:

  • Доступ к скрытым файлам (начинающимся с .) запрещен в конфигурации Nginx.

  • Переменная окружения HTTP_PROXY очищается в конфигурации PHP-FPM для предотвращения атак HTTPoxy.

  • Для всего веб-трафика принудительно используется SSL.

Базы данных

Приложение использует локальный экземпляр MariaDB для хранения данных.

  • Метод подключения: Локальное TCP-подключение.

  • Место хранения: Управляется сервисом mariadb на хосте.

  • Конфигурация:

  • Имя базы данных: panel

  • Хост: 127.0.0.1

  • Порт: 3306

  • Имя пользователя: root

  • Пароль: Определен в системной конфигурации.

Redis используется для кэширования и управления очередями.

  • Хост: 127.0.0.1

  • Порт: 6379

  • Пароль: Не установлен (null).

Контейнеры Docker и их развертывание

Для управления прокси Nginx и сертификатами SSL через Certbot используется контейнер Docker.

  • Образ контейнера: jonasal/nginx-certbot:latest

  • Метод развертывания: Docker Compose

  • Расположение файла Compose: /root/nginx/compose.yml

  • Томы (Volumes):

  • nginx_secrets: Монтирован в /etc/letsencrypt для хранения сертификатов.

  • /data/nginx/user_conf.d: Монтирован в /etc/nginx/user_conf.d для пользовательских конфигураций.

  • /var/www/pterodactyl/public: Монтирован только для чтения в /var/www/pterodactyl/public.

  • Режим сети: Host

  • Политика перезапуска: unless-stopped

Прокси-серверы

В развертывании используется Nginx в качестве обратного прокси с завершением SSL.

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

  • Специальная конфигурация сайта находится в /etc/nginx/sites-available/pterodactyl.conf.

  • HTTP-трафик на порту 80 перенаправляется на HTTPS.

  • PHP-запросы проксируются на локальный сокет PHP-FPM по адресу unix:/run/php/php8.2-fpm.sock.

  • SSL/TLS:

  • Сертификаты получаются и управляются через Certbot в контейнере Docker.

  • SSL включен для домена pterodactyl<Server ID>.hostkey.in.

  • Принудительно используются протоколы TLS TLSv1.2 и TLSv1.3.

  • Прокси Wings:

  • Отдельная конфигурация Nginx обрабатывает трафик демона Wings на порту 12333.

  • Эта конфигурация проксирует запросы на http://host.docker.internal:8000.

  • Включена поддержка WebSocket с заголовками обновления.

Настройки прав доступа

Права доступа к файлам и директориям строго настроены для обеспечения безопасности и корректной работы:

  • Директория приложения: /var/www/pterodactyl принадлежит www-data:www-data с правами 0755.

  • Хранилище и кэш: Поддиректории storage, bootstrap и bootstrap/cache принадлежат www-data:www-data с правами 0755.

  • Конфигурация Nginx: Файлы в /etc/nginx/sites-available и /etc/nginx/sites-enabled принадлежат root:root с правами 0644.

  • Docker Compose: Файл compose по адресу /root/nginx/compose.yml принадлежит root:root с правами 0644.

Расположение файлов конфигурации и данных

Ключевые файлы конфигурации и места хранения данных включают:

  • Файл окружения: /var/www/pterodactyl/.env

  • Конфигурация сайта Nginx: /etc/nginx/sites-available/pterodactyl.conf

  • Конфигурация прокси Wings: Определена внутри контейнера Docker или в конфигурации Nginx хоста для порта 12333.

  • Сервис Systemd: /etc/systemd/system/pteroq.service

  • Задача Cron: /etc/cron.d/pterodactyl

  • Маркер инициализации: /var/www/pterodactyl/.ansible_ptero_initialized

Доступные порты для подключения

Следующие порты настроены для внешнего и внутреннего доступа:

  • Порт 80: HTTP (перенаправляет на HTTPS).

  • Порт 443: HTTPS (Панель Pterodactyl).

  • Порт 12333: HTTPS (Прокси Wings).

  • Порт 8000: Внутренний порт приложения (проксируется).

  • Порт 3306: MariaDB (только локально).

  • Порт 6379: Redis (только локально).

Запуск, остановка и обновление

Управление сервисами осуществляется через systemd для нативных сервисов и docker compose для контейнера прокси.

Нативные сервисы:

  • Запуск/Остановка/Перезапуск Nginx:

    systemctl restart nginx
    

  • Запуск/Остановка/Перезапуск MariaDB:

    systemctl restart mariadb
    

  • Запуск/Остановка/Перезапуск Redis:

    systemctl restart redis-server
    

  • Запуск/Остановка/Перезапуск PHP-FPM:

    systemctl restart php8.2-fpm
    

  • Запуск/Остановка/Перезапуск воркера очереди:

    systemctl restart pteroq
    

Контейнер Docker:

  • Запуск/Остановка/Перезапуск Nginx-Certbot:
    cd /root/nginx
    docker compose up -d
    

Обновление приложения:

  • Очистка и кэширование конфигурации:

    cd /var/www/pterodactyl
    php artisan config:clear
    php artisan config:cache
    php artisan route:clear
    php artisan view:clear
    

  • Запуск миграций (если изменилась схема):

    php artisan migrate --force
    

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×