[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


Messages In This Thread
samp03svr в Docker - by SHOROOP - 19.02.2019, 16:53
Re: samp03svr в Docker - by Mutha_X - 20.02.2019, 17:31
Re: samp03svr в Docker - by SHOROOP - 20.02.2019, 20:09

Forum Jump:


Users browsing this thread: 1 Guest(s)