Как сделать тестовый сервер в раст

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Тайм-коды: 0:00 - вступление 0:44 - помощь с видео 1:22 - файлы для создания сервера 3:33 - скачивание и обновление .

My servers: Discord: discord.gg/rGkjnTn Rust server: The Rusty Pommes Its fully vanilla so can be found under the .

Всем привет! Сегодня я расскажу вам как создать свой сервер в Rust. Сервак будет самый простой, без плагинов, чисто .

Это не кликбейт, с моим ПК и интернетом скачивание и установка сервера занимает не более 10 минут. Все зависит от .

Привет! В этом видео я расскажу, покажу как создать свой сервер в расте, локальный сервер на лицензии, не на пиратке!

Загляни в описание. Всем привет! В этом руководстве вы узнаете как можно создать свой сервер Rust с модами на своем .

[RUST ГАЙД] КАК СОЗДАТЬ СВОЙ СЕРВЕР РАСТ | ЛОКАЛЬНЫЙ СЕРВЕР RUST (rust/кгые/hfcn) В этом видео я покажу КАК .

Как создать модифицированный сервер Rust. Как установить Oxide (umod). Как устанавливать плагины. Discord канал: .

СПИСОК КОМАНД Добавить группу: group add VIP [VIP] [1] Удалить группу: group remove VIP ВНИМАНИЕ. после последних .

В этом видео я покажу как создавать свой сервер в Rust. Приятного просмотра! Инструкция по созданию сервера: 1.

Rust Modding Tutorial Series for the Magma API. Plugins are written in the JavaScript programming language. Learn what .


Узнайте как создать свой сервер в Rust, какие сложности вас ожидают, что нужно сделать для выполнения цели, читайте в нашем руководстве.

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

Несмотря на то, что игра Rust вышла несколько лет назад, она по-прежнему является одной из самых популярных игр на выживание на рынке. Игроки по всему миру каждый день заходят в игру, чтобы проверить свои навыки выживания друг против друга и сделать все возможное, чтобы остаться в живых дольше нескольких минут. Игра может быть очень веселой, но часто она становится невероятно разочаровывающей, поскольку за игроком постоянно охотятся его противники.

Как создать свой сервер в Rust

Прежде чем игроки попытаются установить сервер, им сначала нужно решить, будут ли они пытаться запустить сервер через ПК, на котором они планируют играть в игру, или предпочтут запустить его через другой ПК. У обоих методов есть свои плюсы и минусы. Плюсом запуска сервера и игры на одном ПК является то, что игроку не придется беспокоиться о том, что два отдельных ПК занимают место в его доме. Единственная особенность метода с одним ПК заключается в том, что одновременная работа сервера и игры может быть очень тяжелой для системы. Если игрок едва достигает минимальных характеристик, ему стоит подумать об использовании другого компьютера. В любом случае, игроку потребуется как минимум 4 ГБ оперативной памяти для размещения сервера, поэтому, если у игрока нет столько свободного места, этот способ не подойдет.

Для упрощения в данном руководстве предполагается, что игрок будет использовать только один ПК. Если они могут запустить Rust на высоких настройках и имеют приличный объем оперативной памяти, то у них не должно возникнуть проблем. Просто следуйте этим инструкциям, и сервер будет запущен в кратчайшие сроки.

Дальше все становится немного сложнее. Игроку придется загрузить и установить программу SteamCMD. По сути, это альтернативная версия Steam, использующая командную строку, а не стандартный интерфейс, к которому привыкли игроки. Использование SteamCMD может быть чрезвычайно сложным для тех, кто не очень хорошо разбирается в компьютерах или не вырос в эпоху, когда командная строка была стандартным способом навигации по компьютеру. Основная причина использования SteamCMD - ручная установка и обновление серверов в Steam, а это именно то, что понадобится игрокам для создания собственного сервера Rust.

После того, как игрок скачает SteamCMD, ему нужно будет создать на своем компьютере папку специально для своего сервера Rust (назовите ее как-нибудь запоминающе, например "Сервер, где я не умираю постоянно"), а затем извлечь программу в эту папку. Затем игрок может войти в эту папку и получить доступ к SteamCMD, щелкнув на файле с именем "steamcmd.exe". После этого SteamCMD должен открыться и начать обновление. Затем игроку нужно будет войти в игру, но для этого не следует использовать свою основную учетную запись Steam. Вместо этого нужно войти в игру под именем "Аноним", что позволит запустить сервер и одновременно играть в игру, используя свою реальную учетную запись. Чтобы войти в систему, нужно нажать на командную строку и ввести:

Затем игрок может нажать кнопку ввода и продолжить ввод:

Настройка сервера Rust

Когда дело дойдет до создания сервера, игрок должен будет начать с создания файла пакетного скрипта. По сути, пакетный скрипт - это документ, содержащий серию различных команд, которые при активации будут выполняться последовательно. В контексте создания сервера Rust основное назначение пакетного скрипта - позволить игроку поддерживать сервер в рабочем состоянии. Для того чтобы создать такой скрипт, игрок должен войти в папку Rust, которую он создал ранее, и щелкнуть в ней правой кнопкой мыши. Затем выберите "создать новый текстовый документ" и назовите этот документ "UpdateRust.txt". В первой строке этого документа игрок должен ввести ряд команд, как показано на рисунке:

  • steamcmd.exe +login anonymous +app_update 258550 validate +quit

Как только игрок сделает это, он должен сохранить файл и закрыть его. Затем щелкните на нем правой кнопкой мыши и измените имя на "UpdateRust.bat", чтобы превратить его в пакетный файл. Затем игрок должен поднять папку SteamCMD и найти в ней папку под названием "Steamapps", затем открыть в ней папку "common", а в ней папку "Rust_Dedicated". В ней игрок должен добавить новый текстовый документ и назвать его "start.txt". После этого игрок может ввести в документ следующие команды (помните, что каждый пункт должен быть отдельной строкой в документе):

  • echo off
  • :start
  • RustDedicated.exe +batchmode +server.port 28015 +server.level "(?)" +server.seed (?) +server.worldsize (?) +server.maxplayers (?) + server.hostname "(?)"
  • goto start

Перед тем, как игрок сохранит этот файл, он захочет отредактировать третий пункт, где есть (?), и добавить нужные ему опции. Вот варианты для каждого из них:

  • server.level - Это изменит тип карты, которую запускает сервер. Игрок может ввести "Procedural Map", "Barren", "HapisIsland", "SavasIsland" и "SavasIsland_koth".
  • server.seed - когда сервер использует процедурную или бесплодную карту, этот параметр будет изменять ее форму. Игрок может ввести любое число от 0 до 2147483647.
  • server.worldsize - аналогично типу семян изменяет общий размер процедурных и бесплодных карт. Игрок может ввести число от 1000 до 6000.
  • server.maxplayers - Изменение этого числа определяет, сколько игроков смогут присоединиться к игре.
  • server.hostname - Это имя, которое будет отображаться в списке серверов в Rust, поэтому измените его на любое подходящее.

После того как все это будет сделано, нужно сохранить общий файл и переименовать его в "start.bat". Все, что нужно сделать игроку, это открыть этот файл, чтобы запустить сервер, а затем оставить это окно открытым, пока он запускает Rust. Попав в главное меню Rust, игрок может нажать F1, чтобы вызвать командную строку, и ввести фразу "connect localhost:28015", которая должна загрузить игрока прямо на сервер. Дальше игроку остается только пригласить своих друзей в игру.

И это все, что нужно знать о том, как создать свой сервер в Rust.

В этой статье я покажу как создать GraphQL сервер, используя Rust и его экосистему; будут приведены примеры реализации наиболее часто встречающихся задач при разработке GraphQL API. В итоге API трёх микросервисов будут объединены в единую точку доступа с помощью Apollo Server и Apollo Federation. Это позволит клиентам запрашивать данные одновременно из нескольких источников без необходимости знать какие данные приходят из какого сервиса.

Введение

Обзор

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


Каждый компонент архитектуры освещает несколько вопросов, которые могут возникнуть при реализации GraphQL API. Доменная модель включает данные о планетах Солнечной системы и их спутниках. Проект имеет многомодульную структуру (или монорепозиторий) и состоит из следующих модулей:

Существуют две основных библиотеки для разработки GraphQL сервера на Rust: Juniper и Async-graphql, но только последняя поддерживает Apollo Federation, поэтому она была выбрана для реализации проекта (есть также открытый запрос на реализацию поддержки Federation в Juniper). Обе библиотеки предлагают code-first подход.

Стэк технологий

В следующей таблице показан стэк основных технологий, использованных в проекте:

Единая GraphQL точка доступа

Также некоторые использованные Rust библиотеки:

Библиотека для тестирования

Необходимое ПО

Чтобы запустить проект локально, вам нужен только Docker Compose. В противном случае вам может понадобиться следующее:

Diesel CLI (для установки выполните cargo install diesel_cli --no-default-features --features postgres )

LLVM (это нужно для работы крэйта argonautica )

CMake (это нужно для работы крэйта rust-rdkafka )

Реализация

В Cargo.toml в корне проекта указаны три приложения и одна библиотека:

Начнём с planets-service .

Зависимости

Cargo.toml выглядит так:

async-graphql — это GraphQL библиотека, actix-web — web фреймворк, а async-graphql-actix-web обеспечивает интеграцию между ними.

Ключевые функции

Начнём с main.rs :

Эти функции делают следующее:

index — обрабатывает GraphQL запросы (query) и мутации

index_ws — обрабатывает GraphQL подписки

index_playground — предоставляет Playground GraphQL IDE

create_schema_with_context — создаёт GraphQL схему с глобальным контекстом доступным в рантайме, например, пул соединений с БД

Определение GraphQL запроса и типа

Рассмотрим как определить запрос:

Эти запросы получают данные из БД используя слой репозитория. Полученные сущности конвертируются в GraphQL DTO (это позволяет соблюсти принцип единственной ответственности для каждой структуры). Запросы get_planets и get_planet могут быть выполнены из любой GraphQL IDE например так:

Пример использования запроса

Структура Planet определена так:

В impl определяется резолвер для каждого поля. Также для некоторых полей определены описание (в виде Rust комментария) и deprecation reason. Это будет отображено в GraphQL IDE.

Проблема N+1

В случае наивной реализации функции Planet.details выше возникла бы проблема N+1, то есть, при выполнении такого запроса:

Пример возможного ресурсоёмкого GraphQL запроса

для поля details каждой из планет был бы сделан отдельный SQL запрос, т. к. Details — отдельная от Planet сущность и хранится в собственной таблице.

Но с помощью DataLoader, реализованного в Async-graphql, резолвер details может быть определён так:

data_loader — это объект в контектсе приложения, определённый так:

DetailsLoader реализован следующим образом:

Такой подход позволяет предотвратить проблему N+1, т. к. каждый вызов DetailsLoader.load выполняет только один SQL запрос, возвращающий пачку DetailsEntity .

Определение интерфейса

GraphQL интерфейс и его реализации могут быть определены следующим образом:

Здесь вы также можете видеть, что если в структуре нет ни одного поля со "сложным" резолвером, то она может быть реализована с использованием атрибута SimpleObject .

Определение кастомного скалярного типа

Кастомные скаляры позволяют определить как представлять и как парсить значения определённого типа. Проект содержит два примера определения кастомных скаляров; оба являются обёртками для числовых структур (т. к. невозможно определить внешний трейт на внешней структуре из-за orphan rule). Эти обёртки определены так:

В первом примере также показано, как представить гигантское число в виде экспоненциальной записи.

Определение мутации

Мутация может быть определена следующим образом:

Чтобы использовать объект как входной параметр мутации, надо определить структуру следующим образом:

Мутация защищена RoleGuard 'ом, который гарантирует что только пользователи с ролью Admin могут выполнить её. Таким образом, для выполнения, например, следующей мутации:

Пример использования мутации

вам нужно указать заголовок Authorization с JWT, полученным из auth-service (это будет описано далее).

Определение подписки

Клиент API может быть уведомлен об этом событии с помощью подписки, слушающей Kafka consumer:

Пример использования подписки

Подписки должны отправляться на ws://localhost:8001 .

Интеграционные тесты

Тесты запросов и мутаций можно написать так:

Если часть запроса может быть переиспользована в другом запросе, вы можете использовать фрагменты:

Чтобы использовать переменные, запишите тест так:

В этом проекте используется библиотека Testcontainers-rs , что позволяет подготовить тестовое окружение, то есть, создать временную БД PostgreSQL.

Клиент к GraphQL API

Вы можете использовать код из предыдущего раздела для создания клиента к внешнему GraphQL API. Также для этого существуют специальные библиотеки, например, graphql-client, но я их не использовал.

Безопасность API

Существуют различные угрозы безопасности GraphQL API (см. список); рассмотрим некоторые из них.

Ограничения глубины и сложности запроса

Если бы структура Satellite содержала поле planet , был бы возможен такой запрос:

Пример тяжёлого запроса

Сделать такой запрос невалидным можно так:

Стоит отметить, что при указании ограничений выше может перестать отображаться документация сервиса в GraphQL IDE. Это происходит потому, что IDE пытается выполнить introspection query, который имеет заметные глубину и сложность.

Аутентификация

Эта функциональность реализована в auth-service с использованием крэйтов argonautica и jsonwebtoken . Первый отвечает за хэширование паролей пользователей с использованием алгоритма Argon2. Аутентификация и авторизация показаны исключительно в демонстрационных целях; пожалуйста, изучите вопрос более тщательно перед использованием в продакшене.

Рассмотрим как реализован вход в систему:

Посмотреть реализацию функции verify_password можно в модуле utils , create_token в модуле common_utils . Как вы могли бы ожидать, функция sign_in возвращает JWT, который в дальнейшем может быть использован для авторизации в других сервисах.

Для получения JWT выполните следующую мутацию:

Используйте параметры john_doe/password. Включение полученного JWT в последующие запросы позволит получить доступ к защищённым ресурсам (см. следующий раздел).

Авторизация

К ранее показанной мутации create_planet применён следующий атрибут:

Сам гард реализован так:

Определение перечисления

GraphQL перечисление может быть определено так:

Работа с датами

Async-graphql поддерживает типы даты/времени из библиотеки chrono , поэтому вы можете определить такие поля как обычно:

Поддержка Apollo Federation

Одна из целей satellites-service — продемонстрировать как распределённая GraphQL сущность ( Planet ) может резолвиться в двух (или более) сервисах и затем запрашиваться через Apollo Server.

Тип Planet был ранее определён в planets-service так:

Также в planets-service тип Planet является сущностью:

satellites-service расширяет сущность Planet путём добавления поля satellites :

Также вам нужно реализовать функцию поиска для расширяемого типа. В примере ниже функция просто создаёт новый инстанс Planet :

Async-graphql генерирует два дополнительных запроса ( _service and _entities ), которые будут использованы Apollo Server'ом. Эти запросы — внутренние, то есть они не будут отображены в API Apollo Server'а. Конечно, сервис с поддержкой Apollo Federation по-прежнему может работать автономно.

Apollo Server

Apollo Server и Apollo Federation позволяют достичь две основные цели:

создать единую точку доступа к нескольким GraphQL API

создать единый граф данных из распределённых сущностей

Таким образом, даже если вы не используете распределённые сущности, для frontend разработчиков удобнее использовать одну точку доступа, чем несколько.

Существует и другой способ создания единой GraphQL схемы, schema stitching, но пока что я его не использовал.

Модуль включает следующий исходный код:

Авторизация в apollo-service работает так же, как было показано ранее для Rust сервисов (вам надо указать заголовок Authorization и его значение).

Приложение, написанное на любом языке или фреймворке, может быть добавлено в качестве нижележащего сервиса под Apollo Server, если оно реализует спецификацию Federation; список библиотек, добавляющих поддержку этой спецификации доступен в документации.

При реализации модуля я столкнулся со следующими ограничениями:

Apollo Gateway не поддерживает подписки (но они по-прежнему работают в standalone Rust сервисе)

Взаимодействие с БД

Уровень хранения реализован с помощью PostgreSQL and Diesel. Если вы не используете Docker при локальном запуске, то нужно выполнить diesel setup , находясь в директории каждого из сервисов. Это создаст пустую БД, к которой далее будут применены миграции, создающие таблицы и инициализирующие данные.

Запуск проекта и тестирование API

Как было отмечено ранее, проект можно запустить двумя способами:

с использованием Docker Compose (docker-compose.yml)

Здесь, в свою очередь, также возможны два варианта:

режим разработки (используя локально собранные образы)

docker-compose up --build

production mode (используя релизные образы)

docker-compose -f docker-compose.yml up

Запустите каждый Rust сервис с помощью cargo run , потом запустите Apollo Server:

cd в папку apollo-server

определите переменную среды NODE_ENV , например, set NODE_ENV=local (для Windows)

npm run start-gateway

Успешный запуск apollo-server должен выглядеть так:

Лог запуска Apollo Server


Здесь возможно выполнять запросы, мутации и подписки, определённые в нижележащих сервисах. Кроме того, каждый из этих сервисов имеет собственную Playground IDE.

Тест подписки

Во второй укажите заголовок Authorization как было описано ранее и выполните мутацию:

Подписанный клиент будет уведомлен о событии:

CI/CD сконфигурирован с помощью GitHub Actions (workflow), который запускает тесты приложений, собирает их Docker образы и разворачивает их на Google Cloud Platform.

Вы можете посмотреть на описанные API здесь.

Замечание: На "продакшн" среде пароль отличается от указанного ранее, чтобы предотвратить изменение данных.

Заключение

В этой статье я рассмотрел как решать наиболее частые вопросы, которые могут возникнуть при разработке GraphQL API на Rust. Также было показано как объединить API Rust GraphQL микросервисов для получения единого GraphQL интерфейса; в подобной архитектуре сущность может быть распределена среди нескольких микросервисов. Это достигается за счёт использования Apollo Server, Apollo Federation и библиотеки Async-graphql. Исходный код рассмотренного проекта доступен на GitHub. Не стесняйтесь написать мне, если найдёте ошибки в статье или исходном коде. Благодарю за внимание!


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

Несмотря на то, что Rust был выпущен несколько лет назад, он по-прежнему остается одной из самых популярных игр на выживание на рынке. Игроки со всего мира прыгают каждый день, чтобы проверить свои навыки выживания друг против друга и сделать все возможное, чтобы остаться в живых дольше нескольких минут. Игра может быть очень интересной, но в большинстве случаев она очень расстраивает, так как за игроком постоянно охотятся его противники.

По этой причине многие игроки, вероятно, получили бы больше удовольствия, если бы могли играть только с людьми, которых они знают, а не со случайными незнакомцами. Вот почему запуск частного сервера может быть отличной идеей, но это может быть довольно сложным процессом. У игроков, которые не очень разбираются в технологиях, вероятно, будут большие проблемы с выполнением этой работы, поэтому это руководство здесь, чтобы показать игрокам подробное объяснение настройки частного сервера.

Rust: один компьютер или два?

Rust: как разместить частный сервер

Прежде чем игроки попытаются настроить сервер, они сначала захотят решить, собираются ли они попытаться запустить сервер через компьютер, на котором они планируют играть в игру, или они предпочтут запустить его через другой компьютер. У обоих методов есть свои плюсы и минусы. Преимущество запуска сервера и игры на одном ПК заключается в том, что, очевидно, игроку не придется беспокоиться о том, что два отдельных компьютера займут место в его доме. Единственная особенность метода с использованием одного ПК заключается в том, что одновременный запуск сервера и игры может быть очень сложной задачей для системы. Если игрок едва достигает минимальных требований, он может подумать об использовании другого компьютера. В любом случае игроку потребуется как минимум 4 ГБ ОЗУ для размещения сервера, поэтому, если у игрока не так много лишнего, это не сработает.

Для упрощения в этом руководстве предполагается, что игрок предпочитает использовать только один компьютер. Пока они могут запускать Rust с высокими настройками и иметь приличный объем свободной оперативной памяти, у них не должно быть особых проблем. Просто следуйте этим инструкциям, и сервер сразу же заработает.

Rust: загрузка и вход в SteamCMD

Rust: как разместить частный сервер

С этого момента все станет немного сложнее. Игроку нужно будет загрузить и установить программу SteamCMD. По сути, это альтернативная версия Steam, в которой используется командная строка, а не стандартный интерфейс, к которому привыкли игроки. Использование SteamCMD может быть чрезвычайно сложным для тех, кто совсем немного не разбирается в компьютерах или не вырос в эпоху, когда командные строки были стандартным способом навигации по компьютерам. Основная причина использования SteamCMD — это установка и обновление серверов в Steam вручную, а это именно то, что понадобится игрокам для создания собственного сервера Rust.

войти анонимно

Затем игрок может нажать кнопку ввода и продолжить, набрав:

app_update 255850 проверить

Rust: как настроить приватный сервер

Rust: как разместить частный сервер

steamcmd.exe + анонимный вход + app_update 258550 проверить + выйти

Однако, прежде чем игрок сохранит этот файл, он захочет отредактировать третью точку, где есть (?), И добавить нужные параметры. Вот варианты для каждого:

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

server.worldsize — аналогично типу seed, это изменит общий размер процедурных и бесплодных карт. Игрок может ввести число от 1000 до 6000.

server.maxplayers — изменение этого числа определит, сколько игроков могут присоединиться к игре.

server.hostname — это имя, которое будет отображаться в списке серверов в Rust , поэтому измените его на то, что работает.

В Rust можно играть на ПК, Xbox One и PlayStation 4.


Андрей Кольский - помощник редактора. Его страсть к играм началась с его первой консоли (Sega Genesis), и с тех пор он не переставал играть. Его любимые игры: The Legend of Zelda: Ocarina of Time, Team Fortress 2, Rainbow Six Siege, Pok?mon Sword & Shield, Old School Runescape, Skyrim и Breath of the Wild.

Благодаря совершенно новому элементу эволюции игрокам Pokemon Legends: Arceus больше не нужно обменивать свой

Искажения пространства-времени — отличный источник редких покемонов и предметов в Pokemon Legends: Arceus. Вот

Карьера астронавта может быть сложной и дорогостоящей, но это становится довольно просто, когда игроки

Читайте также: