[Часть I] Установка панели Pterodactyl (веб-часть)

NaN

SIGFPE
Команда форума
Сообщения
1,170
Реакции
802
1589684513868.png

Приветствую, юный(или не очень) серверостроитель. Так как многие испытывают некоторые проблемы с установкой панели Pterodactyl, было решено написать данный гайд. Он написан на основе оригинальной документации, доступной на официальном сайте.

Демо-версия панели

0. Что такое Pterodactyl, терминология, плюсы и минусы.
Pterodactyl - это open-source панель для управления игровыми серверами, написанная на PHP7, NodeJS и Go. Разработанная с упором на безопасность, она запускает все сервера в Docker-контейнерах и предоставляет при этом администраторам и пользователям удобный и интуитивно-понятный интерфейс
Теперь можно перейти к плюсам и минусам.

Структура всей системы:
1589714561650.png

Плюсы:
  • Повышенная безопасность. Если кто-то воспользуется каким-либо эксплоитом, позволяющим выполнять произвольный код и/или модифицировать файловую систему, он не сможет ничего сделать на хост машине (за пределами контейнера).
  • Удобный интерфейс управления. Не нужно постоянно подключаться к серверу через SSH, в отличии от LGSM, позволяющего управлять серверами только локально.
  • Легкое масштабирование. Можно легко расширять свою сетку серверов, в том числе на других локациях.
  • Контроль над ресурсами. Благодаря Docker, можно тонко контролировать ресурсы, доступные серверам для использования.
  • Можно использовать для организации хостинга
Минусы:
  • В текущем релизе нет функции для резервного копирования
  • Использование плагинов с жёсткой привязкой по IP немного снижает уровень безопасности, предоставляемый Docker по-умолчанию
  • Сложен для установки простому пользователю
  • Нельзя запускать сервера от root
Docker - ПО для автоматизации развертывания и управления приложениями в средах с поддержкой контейнеризации.

Panelанель)— Обозначает саму панель Pterodactyl, которая позволяет добавлять новые ноды(узлы) и сервера.

Nodeода, узел) — Физическая машина, на которой запущен демон.

Daemon(Демон, сервис) — Сервис, написанный на Nodejs, который соединяет Docker и Панель для безопасного управления серверами через Панель.

Server(Сервер) — В нашем случае, сервер - это конкретный экземпляр игрового сервера, запущенный через Панель. Он создается на Ноде и их может быть некоторое количество штук.

Container(Контейнер) — Каждый сервер запускается внутри изолированного контейнера для применения каких-либо ограничений на ресурсы(например, CPU и RAM) и устранения каких-либо пересечений с другими серверами на той же ноде. Они создаются и запускаются с помощью Docker.

Nest(Гнездо) — Каждое гнездо используется определенным типом игровых серверов, например для Minecraft, Teamspeak или Terraria и могут содержать несколько яиц.

Egg(Яйцо) — Каждое яйцо обычно используется чтобы хранить настройки для конкретного типа игры, например, Vanilla, Spigot или Bungeecord для Minecraft.

1. Требования для установки Pterodactyl
Для начала, вы должны иметь базовые знания в области администрирования Linux. Хотя бы знать для чего используется apt update, и кто такой root пользователь.
Если с этим никаких проблем нет, то самое время ознакомиться с системными требованиями веб-части.
  • Для начала, подразумевается что вы используете свой собственный сервер (будь-то VDS или DS). Работа на shared-хостинге возможна, но не гарантирована.
  • (актуально для VDS) На нодах будет использоваться система виртуализации, отличная от OpenVZ(работа Pterodactyl на OpenVZ не гарантирована)
  • Имеется доменное имя(или поддомен)
Таблица совместимости операционных систем:

Операционная системаВерсияПоддержкаЗаметка
Ubuntu18.04✅Документация написана основываясь именно на этой ОС
20.04✅
CentOS7✅Необходимы доп. репозитории
8✅Все необходимые пакеты есть в репозиториях по-умолчанию
Debian9✅Необходимы доп. репозитории
10✅Все необходимые пакеты есть в репозиториях по-умолчанию
Перейдем к необходимым пакетам/зависимостям:
  • PHP 7.2 со следующими расширениями: cli, openssl, gd, mysql, PDO, mbstring, tokenizer, bcmath, xml или dom, curl, zip, и fpm для nginx
  • MySQL 5.7 ИЛИ MariaDB 10.1.3 и выше
  • Redis (redis-server)
  • Веб-сервер (Apache, NGINX, Caddy, и т.д.)
  • curl
  • tar
  • unzip
  • git
  • composer
Как вы уже поняли, установка панели будет рассматриваться на основе Ubuntu 18.04 LTS, на "чистую" систему. Инструкции по установке зависимостей на иные операционные системы доступны в разделе community-гайдов.

2. Пример установки необходимых зависимостей
Bash:
# Добавление команды "add-apt-repository"
apt -y install software-properties-common curl

# Добавление доп. репозиториев для PHP, Redis
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
add-apt-repository -y ppa:chris-lea/redis-server

# Обновление списка репозиториев
apt update

# Добавляем universe репозиторий на Ubuntu 18.04
apt-add-repository universe

# Установка зависимостей
apt -y install php7.2 php7.2-cli php7.2-gd php7.2-mysql php7.2-pdo php7.2-mbstring php7.2-tokenizer php7.2-bcmath php7.2-xml php7.2-fpm php7.2-curl php7.2-zip mysql-server nginx tar unzip git redis-server
Установка composer
Composer
- это менеджер зависимостей для PHP, который позволяет доставить необходимые функции для панели. Без него продолжить установку невозможно.
Bash:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

3. Скачка файлов панели
Для начала нам необходимо создать папку, где будет находиться наша панель и затем перейти в нее:
Bash:
mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
После этого, необходимо скачать архив с файлами панели используя curl. После загрузки, нужно будет распаковать её и установить корректные права на папки storage/ и bootstrap/cache/ .
Bash:
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/download/%version%/panel.tar.gz
tar --strip-components=1 -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/
%version% необходимо заменить на номер актуальной релизной версии веб-панели Pterodactyl, узнать ее можно в официальной документации


4. Установка панели
Теперь, когда мы скачали все файлы, можно приступить к установке.

ВНИМАНИЕ!
Вам необходимо настроить базу данных MySQL и пользователя к ней с корректными правами. Если вы не знаете как сделать это, воспользуйтесь инструкцией ниже.

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

Bash:
cp .env.example .env
composer install --no-dev --optimize-autoloader

# Запускайте эту команду только если устанавливаете панель
# в первый раз и не имеете никаких данных от неё в базе данных
php artisan key:generate --force
SaIZswlxPj.png

ВНИМАНИЕ!
Сделайте резервную копию своего ключа (APP_KEY в .env файле) так как им шифруются все данные и в случае его утери, вы потеряете все свои данные в базе данных
Настройка окружения

Окружение панели легко настраивать с помощью нескольких CLI команд. Следующие шаги покрывают такие вещи, как сессии, кеширование, данные от базы данных и отправку e-mail сообщений.

Bash:
php artisan p:environment:setup
php artisan p:environment:database

# Чтобы использовать отправку писем, настроенную через PHP (не рекомендуется), выберите "mail".
# Чтобы использовать свой SMTP сервер, выберите "smtp".
php artisan p:environment:mail

Настройка базы данных
Сейчас, панели необходимо создать необходимые таблицы, гнезда и яйца к ним. Команда может выполняться продолжительное время(зависит от вашего сервера). НЕ ПРЕРЫВАЙТЕ этот процесс.
Bash:
php artisan migrate --seed
Добавление первого пользователя
Далее необходимо создать первого пользователя-администратора, с данными которого можно будет войти в панель. Чтобы создать её, выполните команду ниже. В данный момент, пароль должен соответствовать следующим критериям: минимум 8 символов, строчные и прописные буквы, хотя бы одна цифра.
Bash:
php artisan p:user:make
xTow4ScvKZ.png

Установка разрешений
Последним шагом будет установка правильных разрешений на файлы, в зависимости от используемого веб-сервера. Мы будем использовать nginx, поэтому нужно будет выполнить следующее:
Bash:
chown -R www-data:www-data *
5. Настройка работы в фоновом режиме
Для того, чтобы панель работала быстрее, вовремя отправлялись e-mail письма и происходили иные фоновые действия, необходимо выполнить действия ниже.

Настройка crontab
Первое что нужно сделать, это добавить задачу в cron. Она необходима для некоторых вещей, таких как очистка сессий и выполнение запланированных действий на серверах.
Откройте crontab выполнив:
Bash:
sudo crontab -e
И вставьте строку ниже:
Bash:
* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
Настройка демона
Далее вам необходимо создать новый сервис systemd чтобы длительные процессы выполнялись в фоновом режиме. Он отвечает за отправку писем и поддержку многих фоновых действий в панели.
Создайте файл, называющийся pteroq.service в папке /etc/systemd/system
Bash:
sudo nano /etc/systemd/system/pteroq.service
И вставьте следующий код:
Bash:
# Pterodactyl Queue Worker File
# ----------------------------------

[Unit]
Description=Pterodactyl Queue Worker
After=redis-server.service

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3

[Install]
WantedBy=multi-user.target
После, убедитесь что Redis запускается при загрузке системы:
Bash:
sudo systemctl enable --now redis-server
Затем, наконец, включите созданный нами сервис
Bash:
sudo systemctl enable --now pteroq.service

6. Настройка веб-сервера
Оригинальная статья по настройке веб-сервера
Оригинальная статья по созданию SSL сертификатов

Создадим SSL сертификат.


Приступаем к настройке nginx. Первым делом удаляем стандартную конфигурацию:
Bash:
sudo rm -rf /etc/nginx/sites-enabled/default
Создаем свою конфигурацию.
Bash:
sudo nano /etc/nginx/sites-available/pterodactyl.conf
Вставляем туда следующий текст (НЕ ЗАБУДЬТЕ ПОДСТАВИТЬ СВОЙ ДОМЕН И СВОЙ ПУТЬ К СЕРТИФИКАТУ!)
NGINX:
server_tokens off;

server {
    listen 80;
    server_name <domain>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name <domain>;

    root /var/www/pterodactyl/public;
    index index.php;

    access_log /var/log/nginx/pterodactyl.app-access.log;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers on;

    # See https://hstspreload.org/ before uncommenting the line below.
    # add_header Strict-Transport-Security "max-age=15768000; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;

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

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}
Затем, включаем конфигурацию и перезагружаем nginx:
Bash:
sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
systemctl restart nginx
Вторая часть - [Часть II] Установка панели Pterodactyl (серверная часть)
Третья часть - [Часть III] Установка панели Pterodactyl (настройка панели и демона)

Все, установку в целом можно считать оконченной, но есть еще возможность настройки окружения панели, например, чтобы выключить возможность использования MySQL сервера для создания баз данных через панель
Если возникли какие-либо проблемы, ознакомьтесь с возможными решениями здесь.
Также, думаю, можно задавать вопросы в данной теме.
Чуть позже будет написано несколько частей, посвященных таким вещам как: настройка нод(узлов), настройка панели, установка панели на машину, использующую ISPManager.

© NaN. Специально для HLMod.ru. При копировании на другие ресурсы, ссылка на оригинал ОБЯЗАТЕЛЬНА.
 
Последнее редактирование:

Yooki

Участник
Сообщения
408
Реакции
51
Не шарю в Docker, хотел бы узнать, если перенести нынешние серверы на Pterodactyl, то будет ли у сервера другой IP адрес? Работает ли эта вся система, если у меня на каждый сервер разные VDS?
 

NaN

SIGFPE
Команда форума
Сообщения
1,170
Реакции
802
Не шарю в Docker, хотел бы узнать, если перенести нынешние серверы на Pterodactyl, то будет ли у сервера другой IP адрес?
А с чего он изменится? Вы же на той же машине будете держать сервера.
Работает ли эта вся система, если у меня на каждый сервер разные VDS?
Да, каждая VDS будет отдельной нодой, на которой можно установить сервер.

Дополнил статью изображением, показывающим структуру всей системы.
 

DevBT

Участник
Сообщения
153
Реакции
15
Вот такая вот ошибка при попытке выполнить команду
Pawn:
php artisan p:environment:database
Screenshot_2.png
При попытке запуска редиса вот такое вот:
Pawn:
Failed to start redis.service: Unit redis.service not found.
 
Последнее редактирование:

Junkes

случайно удаляю папки из под рута
Сообщения
341
Реакции
129

DevBT

Участник
Сообщения
153
Реакции
15
service redis не найден.
Сам redis установлен?
Pawn:
apt -y install php7.2 php7.2-cli php7.2-gd php7.2-mysql php7.2-pdo php7.2-mbstring php7.2-tokenizer php7.2-bcmath php7.2-xml php7.2-fpm php7.2-curl php7.2-zip mysql-server nginx tar unzip git redis-server
Этой командой было все установлено, в т.ч. и редис.
 

Junkes

случайно удаляю папки из под рута
Сообщения
341
Реакции
129
Pawn:
apt -y install php7.2 php7.2-cli php7.2-gd php7.2-mysql php7.2-pdo php7.2-mbstring php7.2-tokenizer php7.2-bcmath php7.2-xml php7.2-fpm php7.2-curl php7.2-zip mysql-server nginx tar unzip git redis-server
Этой командой было все установлено, в т.ч. и редис.
service redis-server start
 

NaN

SIGFPE
Команда форума
Сообщения
1,170
Реакции
802
Исправил пару мелких недочетов, добавил несколько скринов @Dreizehnt
 

pesos228

Участник
Сообщения
41
Реакции
1
Хочу сделать что бы сайт открывался по адресу: http://адрес сайта/host. Это можно как-то реализовать?
 

xMaZax

Заблокирован
Сообщения
1,234
Реакции
477
  • Легкое масштабирование. Можно легко расширять свою сетку серверов, в том числе на других локациях.
Есть подробная инфа где об этом можно почитать и как это работает?
 

xMaZax

Заблокирован
Сообщения
1,234
Реакции
477
Замени sudo rm /etc/nginx/nginx.conf
на
sudo rm -rf /etc/nginx/sites-enabled/default

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

sudo -H apt-get purge nginx-common nginx-full
потом
apt install -y nginx
Сообщения автоматически склеены:

Так же можно юзать скрипты для автоматической установки

 
Последнее редактирование:
  • Мне нравится
Реакции: NaN

NaN

SIGFPE
Команда форума
Сообщения
1,170
Реакции
802
Замени sudo rm /etc/nginx/nginx.conf
на
sudo rm -rf /etc/nginx/sites-enabled/default

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

sudo -H apt-get purge nginx-common nginx-full
потом
apt install -y nginx
Сообщения автоматически склеены:

Так же можно юзать скрипты для автоматической установки

поменял. про установщик позже мб расскажу, спасибо.
 

xMaZax

Заблокирован
Сообщения
1,234
Реакции
477
Может кому пригодится данный ролик, ставлю на Debian 10 с помощью скрипта. Ролик записывал в 7 утра не спавши, дошли руки выложить..

1.
C++:
apt-get install sudo && sudo apt-get update && sudo apt-get upgrade && sudo apt-get install bash curl wget
2.
C++:
bash <(curl -s https://raw.githubusercontent.com/vilhelmprytz/pterodactyl-installer/master/install-panel.sh)
 

NaN

SIGFPE
Команда форума
Сообщения
1,170
Реакции
802
Может кому пригодится данный ролик, ставлю на Debian 10 с помощью скрипта. Ролик записывал в 7 утра не спавши, дошли руки выложить..

1.
C++:
apt-get install sudo && sudo apt-get update && sudo apt-get upgrade && sudo apt-get install bash curl wget
2.
C++:
bash <(curl -s https://raw.githubusercontent.com/vilhelmprytz/pterodactyl-installer/master/install-panel.sh)
сейчас запилим гайд
 
Последнее редактирование:
Сверху