Создание своего osu! сервера на базе gulag Итак, привет всем. Сегодня мы будем разбирать такое дело как создание своего осу сервера. Для начала давайте ознакомимся с парой вещей, которые нам надо знать. 1. Ядро сервера Есть разные "ядра" для серверов осу. Вот все ядра, которые мне удалось сходу вспомнить: ripple/pep.py, gulag, ruri, oyasumi, Sora, kuriso, Peace, Chikatto (этот кстати писал я, на момент написания статьи он не закончен). Ядра сервера отличаются по производительности, установке и в целом во многом. Самый распространённый вариант - ripple/pep.py т.к. он в принципе первый, но установить его сложно, а производительность оставляет желать лучшего. Посмотреть сравнения производительности между ripple/pep.py, ruri, gulag и Peace можно тут. Важно знать: ripple/pep.py, ruri, Sora и kuriso не имеют своего скор-сервера и аватар-сервера, потому использовать их надо в связке с ripple-stack (ripple/lets и ripple/avatar-server), а базу данных под эти сервера еще надо постараться найти. Разберём преимущества ядер: ripple/pep.py - преимущество одно: по сути это отец всего, практически самая первая полноценная имплементация банчо. Минусов полно (например корявая поддержка турнирных клиентов), но надо отдать должное. Имеет специально написанный для него хороший фронтенд (сайт), который используют такие сервера как Akatsuki и ripple (ахах) kuriso - написан на modern Python, быстр и асинхронен. Поддерживает весь ripple-stack (включая фронтенд А.К.А сайт) и прекрасно работает турнирный клиент. Сервер разработчика (котрика) - https://kurikku.pw ruri - написан на c++. Всё. Ничего интересного больше нет, кроме поддержки всего рипл стака (и то, тут используется собственная схема привилегий) gulag - написан на modern Python, быстр и асинхронен. Включает в себя скор сервер и аватар сервер. Установка простая, знания нужны минимальные. Довольно дружелюбное комьюнити разработчиков. Имеет какой-никакой фронтенд (сайт), поддерживаемый комьюнити. Пример сервера - https://osu.shizofrenia.pw (мой гага, не реклама) oyasumi - написан на c# (.NET 5, ASP.NET Core), включает в себя скор сервер и аватар сервер. Установка простая, даже база данных создается сама. Нет как такового фронтенда, только сайт-визитка. Считает пп используя osu-lazer (новая эра) Peace - написан на Rust. Асинхронен и быстр. Включает в себя скор сервер и аватар сервер. Установка не сложная. Фронтенда нет. Chikatto - написан на c# мной. Плюсов больше нет, просто выпендриться захотелось( Итак, как можно было понять из заголовка, использовать мы будем ядро gulag, т.к. его вполне просто поднять, а по скорости он чуть ли не самый крутой из всех присутствующих. 2. Установка Для начала вам нужен свой домен и дедик (выделенный сервер) на ubuntu 18.04 (использовать другие версии не рекомендует сам автор ядра) В настройках днс зоны домена надо направить поддомены c, a, assets, osu, b на ip нашего сервера Когда мы убедились, что всё вышеперечисленное у нас есть, давайте приступим к установке. 2.1 Установка зависимостей: Пишем команды на сервере: $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt install git python3.9 python3.9-dev python3.9-distutils mysql-server nginx build-essential certbot $ wget https://bootstrap.pypa.io/get-pip.py $ python3.9 get-pip.py && rm get-pip.py Код $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt install git python3.9 python3.9-dev python3.9-distutils mysql-server nginx build-essential certbot $ wget https://bootstrap.pypa.io/get-pip.py $ python3.9 get-pip.py && rm get-pip.py 2.2 Установка git и установка самого ядра: Опять же пишем команды: $ git clone https://github.com/cmyui/gulag.git && cd gulag $ git submodule init && git submodule update $ python3.9 -m pip install -r ext/requirements.txt $ cd oppai-ng && ./build && cd .. Код $ git clone https://github.com/cmyui/gulag.git && cd gulag $ git submodule init && git submodule update $ python3.9 -m pip install -r ext/requirements.txt $ cd oppai-ng && ./build && cd .. 2.3 Создание базы данных: Пишем: перед тем как написать команду, замените данные на свои $ mysql -u /* замените этот текст именем пользователя */ -p /* вводим наш пароль */ CREATE DATABASE osu; exit; $ mysql -u /* замените этот текст именем пользователя */ -p osu < ext/db.sql /* вводим наш пароль */ Код $ mysql -u /* замените этот текст именем пользователя */ -p /* вводим наш пароль */ CREATE DATABASE osu; exit; $ mysql -u /* замените этот текст именем пользователя */ -p osu < ext/db.sql /* вводим наш пароль */ 2.4 Создаём сертификат для нашего домена: перед тем как написать команду, замените данные на свои $ sudo certbot certonly \ --manual \ --preferred-challenges=dns \ --email ваш@емейл.ру \ --server https://acme-v02.api.letsencrypt.org/directory \ --agree-tos \ -d *.вашдомен.ру Код $ sudo certbot certonly \ --manual \ --preferred-challenges=dns \ --email ваш@емейл.ру \ --server https://acme-v02.api.letsencrypt.org/directory \ --agree-tos \ -d *.вашдомен.ру 2.5 Настройка nginx: пишем: $ sudo cp ext/nginx.conf /etc/nginx/sites-enabled/gulag.conf $ sudo nano /etc/nginx/sites-enabled/gulag.conf Код $ sudo cp ext/nginx.conf /etc/nginx/sites-enabled/gulag.conf $ sudo nano /etc/nginx/sites-enabled/gulag.conf Меняем подчеркнутые данные на свои: Пишем: $ sudo nginx -s reload Код $ sudo nginx -s reload 2.6 Настраиваем конфиг: Пишем: $ cp ext/config.sample.py config.py $ nano config.py Код $ cp ext/config.sample.py config.py $ nano config.py Получаем апи-ключ от осу тут: https://osu.ppy.sh/p/api Меняем выделенные данные на свои. При этом ставим: 'db': 'osu' 'host': 'localhost' 2.7 Запускаем сервер $ ./main.py Код $ ./main.py Всё! Что-бы подключиться к осу, вам нужно создать ярлык с таким содержанием (домен заменить на свой): Регистрация будет доступна из самой игры. Удачи!
keijia, а ок, я уже понял много чего, но думаю что другие не поймут и надо им специально в лицо видос делать:/
ладно я это уже решил, проблема в том что я запускаю серв а мне пишет "Please start your nginx server", запустил но не хуй. и ещё, что в рут писать?
File "main.py", line 126 misc.context.acquire_http_session(glob.has_internet) as glob.http_session, ^ SyntaxError: invalid syntax так и должно быть?