
Комментарии 17
докер это конечно хорошо.
Но вместо того чтобы создать нормальный примитивный сервис (как раз systemd с этим очень хорошо справляется), пляски с бубном с докером
в случае с OxideMod, установленном поверх RustDedicated, предполагается, что папка oxide должна быть в корне. Сервис, который вы предлагаете создать, позволяет создать изолированную папку oxide, которая не будет перезаписана другим таким же сервисом ?
как это примерно будет выглядеть, можете, пожалуйста, показать ?
Можно создать два сервиса, и каждому прописать свою WorkingDirectory.
спасибо за пример, смысл понятен. А можете, пожалуйста, подсказать, чем подход с докером хуже, чем ваш ?
а как в вашем случае быть с обновлениями нескольких серверов ? и отдельно интересует, как происходит автоматизация через крон - вы прописываете для каждой директории /var/lib/valheim/XXX отдельное правило в crontab или это можно как-то обобщить (по типу перебора всех подпапок в bash-скрипте, вызова там обновлений и уже этот скрипт вызывать в кроне?)
с моим подходом я устанавливаю обновления всего раз в месяц (force wipe) в одну единственную папку и эти изменения автоматически затрагивают все имеющиеся инстансы серверов.
спасибо за развернутый ответ. Именно это я имел ввиду когда писал что докер излишен в данном случае
и это работало исправно, пока сервер был всего один. Но серверов стало два. И выключение всех серверов каждый раз, когда я выключаю один из них - меня не устраивало. Вот тут-то и появился он.
То есть вместо того, чтобы заменить pkill на kill, и вырубать нужный сервер по его process ID, вы замутили целый докер, а не разобравшись как пробросить каталог внутрь, замутили синхронизацию с рамдиском.
Давайте я решу все ваши проблемы, поправив run-server.sh
#!/bin/bash
WORKDIR=$(dirname $0)
PIDFILE=${WORKDIR}/server.pid
if [ "$1" == "start" ]; then
[ -e ${PIDFILE} ] && echo "Server is already running" && exit 1
SEED=$(cat ${WORKDIR}/server/$IDENTITY/seed.txt)
cp -R ${WORKDIR}/server/$IDENTITY/oxide/* ${WORKDIR}/oxide
./set-permissions.sh &
./watch-oxide-dir.sh &
${WORKDIR}/RustDedicated -batchmode \
+server.hostname "$HOSTNAME" \
+server.identity "$IDENTITY" \
+server.maxplayers $MAXPLAYERS \
+server.worldsize $WORLDSIZE \
+server.seed "$SEED" \
+server.tags "$SERVER_TAGS" \
+server.url "$SERVER_URL" \
+server.port $SERVER_PORT \
+server.queryport $QUERY_PORT &
echo $! > ${PIDFILE}
elif [ "$1" == "stop" ]; then
[ ! -e "${PIDFILE}" ] && echo "Server is not running" && exit 0
read PID<${PIDFILE}
if ps $PID >/dev/null 2>&1; then
kill $PID
else
echo "Server is not running and previous shutdown was not graceful"
fi
else
echo "Usage: $0 start|stop"
fi
если честно, я с этого начинал - пытался запоминать pid, чтобы потом вырубать через kill, только потом у меня в чем-то случилась загвоздка и я не смог этот вариант довести до конца.
замутили целый докер
а можете подсказать, почему использование докера будет избыточно ? кроме того, что нужно устанавливать новый софт.
Ну тем что вам пришлось
1. устанавливать докер
2. докеризировать сервер, что включает в себя и сеть и проброс дисков
3. вместо проброса дисков, вы нашли возможность использовать рамдрайв, но его надо синхронизировать - сделали еще лишний скрипт
4. усложнили поддержку своего сервера.
И вместо всего этого - можно просто удалить процесс по PID.
но корневая папка oxide-то все еще общая в вашем случае. Т.е. если я запущу второй сервер - он перезапишет эту папку и будет конфликт. И в итоге придется вернуться к изначальному подходу - т.е. копировать папку для каждого нового сервера.
Пожалуйста, исправьте меня, если я ошибаюсь.
проброс дисков
можете уточнить, что вы называете "пробросом дисков" ? монтирование (volumes) ? Если да, то несовсем понятен ваш следующий пункт
вместо проброса дисков, вы нашли возможность использовать рамдрайв
я и пробрасываю диск (вся папка Rust_Server) и использую рамдрайв (исключительно для одной подпапки, которая должна быть локальной для каждого запущенного сервера).
Т.е. не "вместо", а "вместе с" в данном случае будет корретнее.
усложнили поддержку своего сервера
можете развить эту мысль ? в чем сложность поддержки ?
Простите, а как вы раньше запускали два сервера?
Если вы хотели сделать какие-то папки общими для всех серверов - сделайте линками. Просто я не знаком с архитектурой серверов, что там можно обобщать, что нельзя. Но я уверен что Докер - это явно не тот инструмент, если вы хотели сэкономить место на дисках, и ln тут будет и быстрее и проще.
Хотите больше игроков? Отключите EAC. Я знаю всего один сервер сейчас где можно играть из-под Линукса, остальные не пускают из-за того что EAC не пашет в wine.
люто
А зачем хранить все файлы RustDedicated и Oxide локально?
Может вынести их установку в Dockerfile, а отдельно хранить только конфиги и каталоги Oxide/plugins для каждого сервера (подключенные к разным веткам git) и подмонтировать их в контейнеры в соответствующие каталоги (через volumes)?
В таком случае при получении изменений с репозитория с плагинами они сразу будут видны в контейнере.
P.S.: с серверами раста сталкивался лет 5 назад, может какие-то моменты не учел.
Facepunch буквально вынудили меня использовать Docker