- Сообщения
- 1,468
- Реакции
- 1,234

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

Плюсы:
Теперь можно перейти к плюсам и минусам.
Структура всей системы:

Плюсы:
- Повышенная безопасность. Если кто-то воспользуется каким-либо эксплоитом, позволяющим выполнять произвольный код и/или модифицировать файловую систему, он не сможет ничего сделать на хост машине (за пределами контейнера).
- Удобный интерфейс управления. Не нужно постоянно подключаться к серверу через SSH, в отличии от LGSM, позволяющего управлять серверами только локально.
- Легкое масштабирование. Можно легко расширять свою сетку серверов, в том числе на других локациях.
- Контроль над ресурсами. Благодаря Docker, можно тонко контролировать ресурсы, доступные серверам для использования.
- Можно использовать для организации хостинга
- В текущем релизе нет функции для резервного копирования
- Использование плагинов с жёсткой привязкой по IP немного снижает уровень безопасности, предоставляемый Docker по-умолчанию
- Сложен для установки простому пользователю
- Нельзя запускать сервера от root
Docker - ПО для автоматизации развертывания и управления приложениями в средах с поддержкой контейнеризации.
Panel(Панель)— Обозначает саму панель Pterodactyl, которая позволяет добавлять новые ноды(узлы) и сервера.
Node(Нода, узел) — Физическая машина, на которой запущен демон.
Daemon(Демон, сервис) — Сервис(wings), написанный на Go, который соединяет Docker и Панель для безопасного управления серверами через Панель.
Server(Сервер) — В нашем случае, сервер - это конкретный экземпляр игрового сервера, запущенный через Панель. Он создается на Ноде и их может быть некоторое количество штук.
Container(Контейнер) — Каждый сервер запускается внутри изолированного контейнера для применения каких-либо ограничений на ресурсы(например, CPU и RAM) и устранения каких-либо пересечений с другими серверами на той же ноде. Они создаются и запускаются с помощью Docker.
Nest(Гнездо) — Каждое гнездо используется определенным типом игровых серверов, например для Minecraft, Teamspeak или Terraria и могут содержать несколько яиц.
Egg(Яйцо) — Каждое яйцо обычно используется чтобы хранить настройки для конкретного типа игры, например, Vanilla, Spigot или Bungeecord для Minecraft.
Panel(Панель)— Обозначает саму панель Pterodactyl, которая позволяет добавлять новые ноды(узлы) и сервера.
Node(Нода, узел) — Физическая машина, на которой запущен демон.
Daemon(Демон, сервис) — Сервис(wings), написанный на Go, который соединяет 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 не гарантирована)
- Имеется доменное имя(или поддомен)
Операционная система | Версия | Поддержка | Заметка |
Ubuntu | 18.04 | ![]() | Документация написана основываясь именно на этой ОС |
20.04 | ![]() | ||
CentOS | 7 | ![]() | Необходимы доп. репозитории |
8 | ![]() | Все необходимые пакеты есть в репозиториях по-умолчанию | |
Debian | 9 | ![]() | Необходимы доп. репозитории |
10 | ![]() | Все необходимые пакеты есть в репозиториях по-умолчанию |
- PHP 7.3+(рекомендуется 7.4) со следующими расширениями: cli, openssl, gd, mysql, PDO, mbstring, tokenizer, bcmath, xml или dom, curl, zip, и fpm для nginx
- MySQL 5.7.22 (рекомендуется MySQL 8) ИЛИ MariaDB 10.2 и выше
- Redis (redis-server)
- Веб-сервер (Apache, NGINX, Caddy, и т.д.)
- curl
- tar
- unzip
- git
- composer
2. Пример установки необходимых зависимостей
Bash:
# Добавление команды "add-apt-repository"
apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg
# Добавление доп. репозиториев для 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.4 php7.4-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} nginx tar unzip git redis-server mysql-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
Bash:
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/download/%version%/panel.tar.gz
tar -xzvf panel.tar.gz
chmod -R 755 storage/* bootstrap/cache/
4. Установка панели
Теперь, когда мы скачали все файлы, можно приступить к установке.
ВНИМАНИЕ!
Вам необходимо настроить базу данных MySQL и пользователя к ней с корректными правами. Если вы не знаете как сделать это, воспользуйтесь инструкцией ниже.
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Сначала мы копируем стандартный файл с настройками, устанавливаем обязательные зависимости и генерируем ключ для шифрования.
Bash:
cp .env.example .env
composer install --no-dev --optimize-autoloader
# Запускайте эту команду только если устанавливаете панель
# в первый раз и не имеете никаких данных от неё в базе данных
php artisan key:generate --force

ВНИМАНИЕ!
Сделайте резервную копию своего ключа (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

Установка разрешений
Последним шагом будет установка правильных разрешений на файлы, в зависимости от используемого веб-сервера. Мы будем использовать 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. При копировании на другие ресурсы, ссылка на оригинал ОБЯЗАТЕЛЬНА.
Последнее редактирование: