# Продвинутое создание сервера ![image](https://user-images.githubusercontent.com/77334306/146064955-f7458d87-38c0-40dd-8634-e27dc2a150b5.png) ![image](https://user-images.githubusercontent.com/77334306/146064668-abc41204-a41e-40f8-a098-6a5a992ad5be.png) ![image](https://user-images.githubusercontent.com/77334306/146064892-06b3d01d-02fe-48cb-8618-08536de0ad3f.png) ![image](https://user-images.githubusercontent.com/77334306/146582420-c57493a7-decf-49a8-b248-e29add8f8afe.png) ![image](https://user-images.githubusercontent.com/77334306/146582380-00aee364-fe49-4a47-bd7c-fdbf1a10412a.png) ![image](https://user-images.githubusercontent.com/77334306/146998663-f98e5ea0-cf90-4f39-a34a-1f20a2afe4d0.png) ### Создайте свой личный Minecraft Проект с использованием продвинутой и удобной информации` ``` Версия документа v1.6 * Это не последние изменения данного документа, вскоре здесь будет появляться новая информация * Некоторые рекомендации из пунктов могут работать некорректно на некоторых системах За подробной поддержкой обращайтесь в мой дискорд - https://discord.gg/7XkGYJbtZg Для полноценной настройки рекомендую использовать Adoptium OpenJDK LTS Java < ! > ПОЖАЛУЙСТА ЧИТАЙТЕ ВНИМАТЕЛЬНО И НЕ ПРЕДЪЯВЛЯЙТЕ ПРЕТЕНЗИЙ РАЗРАБОТЧИКУ < ! > ``` # Основные ссылки на контент [OpenJDK](https://adoptium.net/) __| Java |__ [FabricMC](https://fabricmc.net/) __| Fabric |__ [PaperMC](https://papermc.io/) __| Server Software |__ [PurPur](https://purpurmc.org/) __| Server Software |__ [Pufferfish](https://ci.pufferfish.host/) __| Server Software |__ [Velocity](https://velocitypowered.com/) __| Proxy Software |__ # Настройка выделенных и виртуальных серверов ### Базовые компоненты, архивация файлов, настройка безопасности - Базовые компоненты для вашего сервера - Все команды выполняются от ~ root пользователя, либо через sudo ### Обновление пакетов машины ``` sudo apt update sudo apt upgrade ``` ### Специально для Linux (CentOS 8) ``` yum yum update yum upgrade dnf sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm dnf install htop dnf install screen ``` ### Полезные утилиты для вашего сервера ``` sudo apt install htop - Утилита для мониторинга всех запущенных процессов (Подобно top, но красивее) sudo apt install screen - Важная утилита для создания сессий на вашей серверной машине sudo apt install zip unzip - Утилита для архивации файлов в .zip sudo apt install iptables - Полезная утилита для настройки IPv4 и IPv6 флагов (Firewall) (Можно управлять портами) apt install neofetch - Утилита для красивого отображения вашей ОС и некоторых параметров ``` - Обычно предустановлена на Ubuntu, но в нашем случае Debian ОС. Выполняет команды от имени root ``` apt install sudo ``` - Если потребуется подтвердить установку, то подтвердите отправив консоли Y (y) ### Специально для Oracle Cloud - откройте порт UDP/TCP 25565 ``` sudo apt install firewalld sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp sudo firewall-cmd --permanent --zone=public --add-port=25565/udp sudo firewall-cmd --reload # Важно! В конфиге server.properties нужно указывать IP: 0.0.0.0 # Если у вас Bungeecord / Velocity, укажите в конфиге Bungeecord / Velocity IP: 0.0.0.0:25565 ``` ### Установка Java на вашу серверную машину - Вы научитесь легко и просто устанавливать и удалять Java с вашего сервера - Для начала зайдите в SFTP клиент и перейдите в раздел ~/opt (Можно любой, но этот в качестве основы) - В Linux изначально придумана команда для упаковки архивов и распаковки архивов - Использовать команду tar можно с использованием следующих параметров: ``` # -c | --create — создать архив # -a | --auto-compress — дополнительно сжать архив с компрессором который автоматически определить по расширению архива. # -r | --append — добавить файлы в конец существующего архива # -x | --extract, --get — извлечь файлы из архива # -f | --file — указать имя архива # -t | --list — отобразить список файлов и папок в архиве # -v | --verbose — выводить список обработанных файлов # -u | --update — Обновить архив новыми файлами # -d | --diff, --delete — Проверить начилие архивов, удалить файл из архива ``` - Пример перемещения файлов по системе Linux (Не выполняйте эти команды просто так!) ``` # < ! > НЕ ОБЯЗАТЕЛЬНЫЕ КОМАНДЫ < ! > mv /home/others/Test /others2 # Также вы можете использовать флаг* -v чтобы увидеть подроную информацию о процессе # ~ — тильда, дает понять системе, что это корневой каталог root (~) # Т.е ~/others2 и т.д mv -v ~/home/others/Test ~/others2 # Вы можете также использовать приставку sudo к команде mv # Теперь вы знакомы с командой для перемещения файлов, но рекомендуется еще раз закрепить материал # Попробуйте данные команды на каком-то пустом сервере, либо можете установить WSL2 на вашу систему # Рекомендуемый дистрибутив ОС — Ubuntu,Debian ``` ### Начало процесса установки Java на ваш сервер - Установка и распаковка архива при помощи "tar" — встроенный архиватор в Linux ``` # Архив уже должен быть установлен / перемещен в выбранную вами директорию # Чтобы установить архив, вы можете использовать в качестве передачи файлов SFTP приложение # WinSCP, либо же скачать сразу из консоли - wget # Команду писать без <> # Теперь давайте его распакуем — после распаковки появится папка с нашей Java # Выполните команду: tar xf ИМЯ.tar.gz # Обычно все пакеты имеют расширение .tar.gz # Но мы ведь как раз используем "tar" ;) # Например архив с Java называется: OpenJDK16U-jdk_x64_linux_hotspot_16.0.1_9.tar.gz # < ! > Название может быть иное, пожалуйста узнайте это < ! > # Для распаковки архива потребувется ввести всего одну команду: tar xf OpenJDK16U-jdk_x64_linux_hotspot_16.0.1_9.tar.gz # На момент создания статьи последняя Java, которую лично я проверял у себя на Проектах # Выполните данные команды для скачивания архива: cd ДИРЕКТОРИЯ sudo wget ССЫЛКА ... Далее команды распаковки и все действия выше # ССЫЛКУ брать отсюда - https://adoptium.net/releases.html # Если все сделано верно, то вы успешно распаковали Java в директорию ``` ### Создание "Линка" для нашего файла Java в папке с самой Java - Вы можете подробно изучить про команду ln и ее параметры ``` # Линки — тоже самое что ярлык, те кто когда либо имели систему Windows / MacOS # Могут знать про создание ярлыка при помощи клика ПКМ по файлу # Но у нас ведь нет интерфейса, поэтому будем использовать команду "ln" # *Кстати можно делать линки также через WinSCP — Клиент SFTP, FTP . . . # Создаем ярлык (линк) для нашего исполняемого файла # Выполните команду: ln -svf /opt/.../bin/java /usr/bin/java # Заместо ... пишем название папки с Java — /opt/jdk-16.0.1+9/bin/java ln -svf /opt/jdk-16.0.1+9/bin/java /usr/bin/java # Если вы все сделали правильно, то вы успешно установили Java на вашу машину ``` ### Удаление Java с нашего сервера - Многие скажут, что есть команда sudo apt remove *java* и т.д, но это самый простой способ — можно также и через команды ``` # Для начала перейдем в корень сервера ~ # Далее переходим по пути ~/usr/bin # Используем удобный вам способ для поиска файлов — мне было удобно через WinSCP Клиент # Находим файл "Java" — он должен быть единственный в данной директории! # Спокойно без боязни удаляем его — Готово вы удалили активную Java с вашего сервера, однако # Она все еще существует как папку и архив по пути ~/opt # Можно сделать это через команды cd usr cd bin sudo rm java # Проверить наличие активной Java, можно введя команду java -version # При успехе, у вас должно написаться, что Java не найдена ``` ### Настройка безопасного входа на сервер - Linux - В качестве альтернативы простым паролям, мы будем использовать rsa_keys шифрование SHA - Генерация и установка ключей на сервер ``` # Для Windows: # Открываем приложение PowerShell, либо другое из того, что у вас может быть ssh-keygen ssh-keygen -b 4096 # Генерация более надежного ключа # Далее внимательно читаем логи, вы уже почти создали пару ключей на вашем ПК ~/users/ВашЮзер/.ssh # Чтобы передать ключ на наш сервер, воспользуемся данной командой (Вам потребуется войти с использованием "старого" пароля) cat ~/.ssh/id_rsa.pub | ssh USER@IP "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys" # ... USER@IP ... # Подставьте ваши данные заместо шаблона # USER — Логин, ваш пользователь на серверной машине # IP — Ваш IP от серверной машины # ВНИМАНИЕ! Мы начинаем отключать парольную аутентификацию на сервере, будьте аккуратны # *Автор не несет ответвенности, если вы вдруг сломаете вход на вашу серверную машину, # Обязательно создавайте бэкапы ваших игровых серверов* # Перед этим убедитесь, что у вас установлены пакеты: apt install sudo apt install nano # sudo — Нужно использовать если у вас основной user != root # nano — Удобный редактор текста через SSH # Как сохранить файл через nano # CTRL + X , Y (yes), ENTER # Готово, теперь вы умеете сохранять файлы, но все таки перейдем к отключению парольной авторизации # Вводим команду: sudo nano /etc/ssh/sshd_config # Вам нужно найти или написать данную строчку: PasswordAuthentication no # После сохраняем файл (Мы используем nano в качестве редактора текстовых файлов) # Далее нам необходимо перезагрузить SSH клиент # < ! > Советуем проверить доступ к SSH < ! > # Вернитесь в PowerShell и введите ssh USER@IP ssh USER@IP -i ./ключ # ... USER@IP # Подставьте ваши данные заместо шаблона # USER — Логин, ваш пользователь на серверной машине # IP — Ваш IP от серверной машины # Далее если все хорошо, перезагружаем ssh sudo systemctl restart ssh # Готово, теперь зайти на вашу серверную машину через пароли не получится, используем только ключи авторизации (rsa) ``` ### Различные команды и бенчи, которые возможно вам понадобятся - В основном подойдет для мониторинга и наблюдения за жизнедеятельностью вашей серверной машины ``` # Информация по системе # Через бенчмарк sudo wget -qO- bench.sh | bash # Через неофетч (Удобнее чем 1-ый вариант, однако данный вариант не сможет показать скорость) apt install neofetch neofetch ``` ### IPTables - Закрытие порта SSH, SFTP (22) - На самом деле не рекомендую делать такое с динамическим IP, иначе вы рискуете потерять доступ к вашей серверной машине ``` # Базовые настройки IPTables | Запрет пинга на ваш дедик | Запрет входа с других айпи по SSH (только ваш) iptables -A INPUT -s IP/32 -p icmp -j DROP # Разрешить свой айпи для входа через SSH,SFTP - ПУНКТ ДЕЛАТЬ ПЕРВЫМ ИЗ ВСЕХ! iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT # Дропнуть порт 22 (aka SSH, SFTP). < ! > ДЕЛАТЬ ПОСЛЕ РАЗРЕШЕНИЯ < ! > iptables -A INPUT -p tcp --dport 22 -j DROP # Установка apt-get install iptables-persistent # Правила iptables необходимо создать, затем выполнить следующую команду service iptables-persistent start # Поскольку утилита является демоном — прекратить ее работу нельзя, однако можно очистить список правил service iptables-persistent flush # Обновить правила, если persistent уже был установлен dpkg-reconfigure iptables-persistent ``` ### IPTables - Закрытие портов на нескольких серверных машинах - Здесь вы подробно узнаете как легко и быстро закрыть порты ``` # Представим что у нас есть два сервера VDS / VPS # Первый сервер под маркой X - Это у нас будет Proxy сервер (Фильтр различных ботов, пакетов (TCP)) # Второй сервер под маркой Y - Это у нас будет Survival сервер (Основное выживание) # На сервере X пропишите следующие команды в данном порядке, как они даны (Свреху вниз) iptables -A INPUT -s -j ACCEPT iptables -A INPUT -s 127.0.0.1 -j ACCEPT # На сервере Y пропишите следующие команды в данном порядке, как они даны (Сверху вниз) iptables -A INPUT -p tcp -s --dport -j ACCEPT iptables -A INPUT -p tcp --dport -j DROP # После манипуляций на каждом VDS / VPS нужно ввести данную команду apt install iptables-persistent # Если у вас он уже был установлен, то просто обновите правила используя команду dpkg-reconfigure iptables-persistent # Если хотите можете также ознакомиться со списком ваших правил iptables на каждой из виртуальных машин iptables --list # Узнать номера всех правил iptables -L --line-numbers # Удалять правила можно следующим способом iptables -D INPUT ЧИСЛО ``` ### "WinRar" - Известный архиватор, но для Linux ``` # Установка apt install zip unzip # Там где нужно будет создать архив - у меня это папку /home cd home # Архивирование папки/файла | Можно находиться в любом пути (Вы указываете конкретно путь до папки/файла , который нужно заархивировать) zip -r NAME.zip /home/BungeeCord # Для примера в моем случае # /home - дирректория папки с сервером # /BungeeCord - сама папка с банджей, можно любую например: Survival, Anarchy, SkyBlock. zip -r surv.zip /home/Survival # Если имеется SkyBlock папка с сервером, то введите эту команду # Указывать можно любой сервер, также вы можете например хранить сервер по пути /servers/BungeeCord # Не обязательно использовать /home раздел для серверов! zip -r sb.zip /home/SkyBlock # Либо используйте встроенный tar ``` ### MySQL - Для Linux ``` # Установка sudo apt install mysql-server # Вход в саму БД sudo mysql # Создать БД CREATE DATABASE IF NOT EXISTS DATABASE_NAME; # Удалить БД DROP DATABASE IF EXISTS DATABASE_NAME; # Список БД SHOW DATABASES; # Создать юзера CREATE USER IF NOT EXISTS 'DATABASE_USER'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'DATABASE_USER_NEW_PASSWORD'; # Изменить пароль юзеру ALTER USER 'DATABASE_USER'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'DATABASE_USER_NEW_PASSWORD'; # Удалить юзера DROP USER IF EXISTS 'DATABASE_USER'@'localhost'; # Список юзеров SELECT user, host FROM mysql.user; # Выдать права юзеру на определенную БД GRANT ALL PRIVILEGES ON database_name.table_name TO 'DATABASE_USER'@'localhost'; # Выдать все права юзеру на все БД GRANT ALL PRIVILEGES ON *.* TO 'DATABASE_USER'@'localhost'; # Список всех прав юзера БД SHOW GRANTS FOR 'DATABASE_USER'@'localhost'; # Сделать дамп всей БД mysqldump -uDATABASE_USER -pDATABASE_USER_PASSWORD --all-databases > DATABASE_CUSTOM_DAMP_NAME.sql # Сделать дамп определенной БД mysqldump -uDATABASE_USER -pDATABASE_USER_PASSWORD DATABASE_NAME > DATABASE_CUSTOM_DAMP_NAME.sql # Если вы хотите скопировать ваш дамп БД в другое место cp /var/lib/mysql/DATABASE_CUSTOM_DAMP_NAME.sql /home/testuser/ ``` # О создании игрового сервера в Minecraft ### Рекомендуемое ПО для запуска сервера - Если вы планируете разрабатывать модовый сервер, то определенно рекомендую __[Fabric](https://fabricmc.net/)__ > Моды можно найти [здесь](https://modrinth.com/mods) или [здесь](https://www.curseforge.com/minecraft/mc-mods) - Если вы планируете разрабатывать обычный сервер, то определенно рекомендую __[PaperMC](https://papermc.io/) | [PurPur](https://purpurmc.org/)__ > Рекомендуемое ПО Для разработки ___Proxy___ сервера __[Velocity](https://velocitypowered.com/) | [Velocity с сайта PaperMC](https://papermc.io/)__ ### VDS/DEDICATED или PANEL HOSTING? - __Автор__ данного поста не поддерживает панельные хосты из-за их ограничений пользования. Если вы хотите создать качественный Проект, то пожалуйста придерживайтесь использовать выделенных или виртуальных серверо с полным доступом к __SSH__ протоколу # Об авторе ### Какое ПО используется для разработок игровых проектов (Сервер-сайд) - Я пользуюсь этими ПО: __[Fabric](https://fabricmc.net/) | [PaperMC](https://papermc.io/) | [PurPur](https://purpurmc.org/) | [Pufferfish](https://ci.pufferfish.host/) | [Velocity](https://velocitypowered.com/)__ > __Pufferfish Links:__ _[Docs](https://docs.pufferfish.host/) | [Github](https://github.com/pufferfish-gg/Pufferfish)_ ### Какое ПО используется для разработок игровых клиентов (Клиент-сайд) - Я пользуюсь этим ПО: __[Fabric](https://fabricmc.net/)__ ### Какое ПО используется для подключения к серверу по SSH, SFTP - Я пользуюсь этими ПО: [Termius (SSH Полностью бесплано, SFTP Пробная версия, потом платно](https://termius.com/) [WinSCP (SFTP Полностью бесплатно)](https://winscp.net/eng/download.php) ### На чем создаю Проекты (ПК/Ноут, OS) - Для многих это покажется странно, но я разрабатываю все свои Проекты на ноутбуке - Работаю в данный момент на Windows 11 (Планирую создать образ для Linux)