Minecraft server
Про сервер майнкрафта. Сидел я после нового года, 3 января в 2 часа ночи, и решил расслабиться и поднять сервер по майнкрафту. Как хостинг выбрал timeweb, после подключения к серверу я сразу же создал нового пользователя и перезашел с новыми кредами.
Решил я сделать ванильный сервер с парой плагинов, изначально было выбрано ядро Paper, чуть позже я отказался от него.
Скачиваем с их официального сайта файл .jar и запускаем его
java -Xms2G -Xmx2G -jar paper.jar --nogui
Он докачает нужные файлы и сгенерирует новый мир, а также нужно согласиться с правилами отредактировав файл eula.txt
После этого я задумался, что не хватает плагинов и поставил несколько из них
Плагины:
- SkinsRestorer - плагин для восстановления скинов
- TabList - информация в Tab меню
- SinglePlayerSleep - чтобы спал один игрок и ночь пропускалась
- squaremap - вебсервер с картой мира
- WanderingTrades - кастомные трейды у странствующего торговца
- PrometheusExporter - плагин для сбора статистики с сервера
Тут начинается самое интересное, я создаю nginx конфиг, для вебсервера с картой, и вешаю на свой поддомен minecraft.kill-your-soul.ru
Также в паре с прометеем работаю графана, которая делает красивые графики из данных прометея. Тут произошла ошибка, я никак не мог настроить reverse proxy, чтобы url minecraft.kill-your-soul.ru ввел именно на графану. Как итог все, что нужно было сделать, так это настроить конфиг в графане, что и было сделано
[server] root_url = %(protocol)s://%(domain)s/grafana/
Однако развернуть прометей и графану просто так было бы скучно, поэтому я написал(украл) `docker-compose.yml`, чтобы развернуть все это в докере
services:
prometheus:
image: prom/prometheus
container_name: prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
ports:
- 9090:9090
restart: unless-stopped
volumes:
- ./prometheus:/etc/prometheus
- prom_data:/prometheus
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=grafana
volumes:
- ./grafana:/etc/grafana/provisioning/datasources
- ./grafana.ini:/etc/grafana/grafana.ini
volumes:
prom_data:
Итоговый вариант конфига для nginx выглядит так:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server { # listens on port 80 # listen to all addresses on port 80
root /var/www/minecraft.kill-your-soul.ru/html; # sets the root dir
index index.html; # the index file name
server_name minecraft.kill-your-soul.ru; # the name of the server
location /grafana {
rewrite ^/grafana/(.*) /$1 break;
proxy_set_header Host $http_host;
#proxy_pass http://grafana;
proxy_pass http://127.0.0.1:3000;
}
location /grafana/api/live/ {
rewrite ^/grafana/(.*) /$1 break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
# proxy_pass http://grafana;
proxy_pass http://127.0.0.1:3000;
}
location / { # location of your files
try_files $uri $uri/ =404; # if location == null return 404
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/minecraft.kill-your-soul.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/minecraft.kill-your-soul.ru/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = minecraft.kill-your-soul.ru) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name minecraft.kill-your-soul.ru;
return 404; # managed by Certbot
}
Так же был получен сертификат для сайта(ИБ все таки) по этому гайду
https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/
Но пока мы играли вышло так, что сервер начал переодически падать, я зашел на официальный сайт papermc.io и воспользовался разделом с оптимальными флагами, что не сильно помогло, но так как они используются в финальном результате покажу вам их
#!/bin/bash java -Xms2G -Xmx3G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper-1.20.4-370.jar --nogui
Как итог был выбран другой сервер, который является форком от papermc - это purpur, я просто скачал его .jar файл и поменял в запуске paper на purpur