Garry's Mod - Ускоряем загрузку сервера
Этот пост подойдет только тем, у кого сборка запускается на VDS/Dedicated сервере
На сервере с Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
и SSD моя сборка загружается в среднем за 31 сек. Больше всего времени загрузки сервера занимает mount всех аддонов из папки addons, которых сейчас там где-то 30 штук. После изменений в 2 раза быстрее
Для ускорения загрузки мы совместим все аддоны в одну папку. Чтобы не было бардака, нам нужно разделение на dev и production. Они должны быть на одном хосте рядом друг с другом. Ниже визуализация что мы сделаем
На dev у нас все будет в человеческом виде, красиво рассортировано, а когда мы захотим выпустить обнову, то введем только одну команду и dev сервер автоматически "сбилдится" и переместится на production
Зачем нам VDS
С VDS в вашем распоряжении практически второй компьютер, только без монитора. Это дешевле, чем хостинг и вы можете запустить на нем сколько нужно гмод серверов и делать любые автоматизации, подобно этим.
Так выглядит (в верхней части поста по ссылке) процесс разработки на запароленном Dev сервере. Но в соседней папочке с dev сервером есть еще папочка production. Она такая же, как dev, но мы изменяем ее только тогда, когда хотим выпустить обнову для всех игроков, а не только для dev сервера. Для этого там удаляется папка addons и gamemodes, затем с dev копируется свежая.
Мы немножко вмешаемся в этот процесс (процесс деплоя dev на prod)
Склейка аддонов в одну папку
Вот команды, которые и делают всю "магию". Я выделил их отдельно для наглядности. Сам скрипт деплоя находится еще ниже
# Путь к garrysmod папке production сервера
$PROD_DIR=/home/user/gmod/prod/garrysmod
# создаем временную пустую папку, куда будут собраны все аддоны
mkdir $PROD_DIR/superaddon
# склеиваем все аддоны в эту временную папку (30 аддонов станут одним)
cp -r $PROD_DIR/addons/**/* $PROD_DIR/superaddon/
# удаляем все аддоны из addons, ведь мы их уже склеили в superaddon
rm -r $PROD_DIR/addons/*
# перемещаем superaddon в addons. Теперь у на с там только 1 папка
mv -v $PROD_DIR/superaddon $PROD_DIR/addons/
deploy.sh
deploy.sh
это скрипт, который будет копировать аддоны и гейммод с dev на production сервер. После копирования он соберет все аддоны в одну папку, как описано выше
Сам скрипт можно поместить куда угодно. Он у меня в /home/user/gmod/deploy.sh
#!/bin/bash
MMDD=$(date +%m%d)
BASEPATH=$HOME'/gmod'
for serv in "prod"
do
echo "Делаем бэкап $serv сервера"
mv -v "$BASEPATH/$serv/garrysmod/addons" "$BASEPATH/$serv/garrysmod/addons_$MMDD"
mv -v "$BASEPATH/$serv/garrysmod/gamemodes/darkrp" "$BASEPATH/$serv/garrysmod/gamemodes/darkrp_$MMDD"
echo "Копируем dev на $serv сервер"
cp -r "$BASEPATH/dev/garrysmod/addons/" "$BASEPATH/$serv/garrysmod/"
cp -r "$BASEPATH/dev/garrysmod/gamemodes/darkrp" "$BASEPATH/$serv/garrysmod/gamemodes"
echo "Удаляем хвосты на $serv сервере" # из соображений безопасности
rm -rv "$BASEPATH/$serv/garrysmod/addons/.vscode"
rm -v "$BASEPATH/$serv/garrysmod/addons/sftp-config.json"
rm -rv "$BASEPATH/$serv/garrysmod/gamemodes/darkrp/.vscode"
rm -v "$BASEPATH/$serv/garrysmod/gamemodes/darkrp/sftp-config.json"
echo "Склеиваем аддоны в superaddon" # датально описано выше
mkdir $BASEPATH/$serv/garrysmod/superaddon
cp -r $BASEPATH/$serv/garrysmod/addons/**/* $BASEPATH/$serv/garrysmod/superaddon/
rm -r $BASEPATH/$serv/garrysmod/addons/*
mv -v $BASEPATH/$serv/garrysmod/superaddon $BASEPATH/$serv/garrysmod/addons/
echo "$serv обновлен!"
done
Демо процесса деплоя
Что дальше?
Вы можете заниматься эффективной разработкой на dev сервере, как описано здесь, а когда сделаете все, что хотели для обновы, то выполните на хосте sh deploy.sh
, чтобы перенести все на prod сервер. Можно автоматизировать через GitHub Actions, чтобы вручную на сервере вообще не приходилось ничего вводить
Позже я напишу вторую часть поста про то, как значительно усложнить кражу ваших клиентских скриптов ворами. О публикации сообщу в чатике, который ниже.