[Tool/Web/Other] samp03svr в Docker
#1

Всем привет. Меня давно тут не было, меня мало кто вспомнит, но тем не менее.

Использовать docker-контейнеры на продакшене сейчас модно - удобно поддерживать, удобно разворачивать, удобно передавать. В своей работе пришлось столкнуться с задачей обернуть стандартный samp03svr в контейнер. Чужих реализаций не искал (вернее, посмотрел потом, все равно не устроили), сделал свою.

Что нужно для запуска:
  • понимать, что такое docker и зачем он нужен;
  • docker;
  • docker-compose (на самом деле, можно без него, но с ним удобнее);
  • git
Что входит в контейнер:
  • Основной образ - Ubuntu 18.04 (ubuntu:bionic) с добавленной архитектурой i386 (dpkg --add-architecture i386);
  • s6 overlay для нормального автостарта samp03svr вместе с запуском контейнера;
  • libstdc++6 для корректного запуска бинарника samp03svr.
Инструкция по запуску:
  • склонировать содержимое репозитория на Github;
  • если необходимо - поправить Dockerfile (об этом - ниже в примечаниях);
  • положить в etc/ фильтрскрипты/плагины/гейммоды/server.cfg с сохранением иерархии (ГМы - в etc/gamemodes, ФС - в etc/filterscripts и т.д).;
  • запустить в папке с проектом docker-compose build;
  • поднять контейнер через docker-compose up -d.
Примечания:
  • Качать архив с sa-mp.com необязательно. При сборке контейнера утягивается соответствующий тарболл. Если нужно поменять версию сервера - в Dockerfile поправьте 35 (URL, откуда будет загружаться архив) и 38 (имя скачанного архива) строки;
  • В etc/ можно положить хоть весь дистрибутив сервера целиком, вместе с бинарниками, и теоретически это даже должно работать (chmod +x идет уже после копирования в контейнер содержимого etc/). Но за работоспособность такого решения я не отвечаю;
  • В контейнере нет ничего лишнего, поэтому использование собранных динамически (dynamic linked) so-шек может быть невозможно. Используйте статически собранные или правьте Dockerfile, чтобы при сборке контейнера ставились недостающие пакеты;
  • Чтобы чистый сервер запускался, в Dockerfile на лету sed-ом заменяется rcon_password (если там стоит changeme, процесс попросту завершается). Если в etc/ лежит нужный server.cfg - из Dockerfile перед сборкой можно удалить строки 7, 8, 46 и 47;
  • Чтобы подебажить что-то на лету - влетайте в контейнер через docker exec -it %ИмяКонтейнера% /bin/bash, но учтите, что изменения потеряются после остановки контейнера;
  • server_log.txt внутри контейнера проброшен в /dev/stdout, если при падении процесса samp03svr упадет и контейнер - логи можно получить из docker logs. Если в etc/ будет лежать файл server_log.txt - при сборке образа он будет удален;
  • при любом изменении содержимого папки etc/ придется пересобирать контейнер через docker-compose build --no-cache.
Сборка делалась по большей части как proof-of-concept, но уже в таком виде работоспособна. В качестве теста поднял на 185.50.25.31:7777 чистый сервер с Grand Larceny. Форкать и допиливать можно и нужно, абсолютно не факт, что я буду вообще это поддерживать.
Reply
#2

Quote:
Originally Posted by SHOROOP
View Post
Сборка делалась по большей части как proof-of-concept.
То есть применительно к именно к самп-серверу кроме как удовлетворения упрощения однократного процесса установки/переноса на хост тут ничего больше полезного нет?
Reply
#3

Quote:
Originally Posted by Mutha_X
View Post
То есть применительно к именно к самп-серверу кроме как удовлетворения упрощения однократного процесса установки/переноса на хост тут ничего больше полезного нет?
Да нет, почему же. Я не просто так написал про "понимать, что такое docker и зачем он нужен" =)
Конкретно применительно к самп-серверу в чем профит:
- нет сложностей в отслеживании падения процесса samp03svr и поднятия его обратно. все решения, которые я видел, основывались или на костылях из вики, или зависели от cron или supervisord. у docker есть настройки перезапуска контейнера при его остановке (вот доки), это быстрее.
- если контейнер собран, запустился и работает - он запустится и заработает на любой другой машине. не нужно парить мозг, установлены ли на другом сервере те или иные либы или как работать с yum в CentOS, если ты привык к Debian и apt.
- можно быстро поднять кучу независимых друг от друга копий одного и того же сервера, при этом ресурсов друг друга они не увидят.
и это наверняка не все именно в части эксплуатации в сампе. =)

плюс те же плюсы и минусы, что и для любых других приложений, обернутых в контейнеры. настоятельно рекомендую почитать, например, Хабр, там объясняют лучше меня =)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)