SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian > Релизы/Releases

Reply
 
Thread Tools Display Modes
Old 19/02/2019, 04:53 PM   #1
SHOROOP
Big Clucker
 
Join Date: Feb 2012
Posts: 123
Reputation: 3
Default samp03svr в Docker

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

Использовать 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. Форкать и допиливать можно и нужно, абсолютно не факт, что я буду вообще это поддерживать.

Last edited by SHOROOP; 20/02/2019 at 10:41 AM.
SHOROOP is offline   Reply With Quote
Old 20/02/2019, 05:31 PM   #2
Mutha_X
Gangsta
 
Join Date: Sep 2009
Location: recursion
Posts: 659
Reputation: 37
Default Re: samp03svr в Docker

Quote:
Originally Posted by SHOROOP View Post
Сборка делалась по большей части как proof-of-concept.
То есть применительно к именно к самп-серверу кроме как удовлетворения упрощения однократного процесса установки/переноса на хост тут ничего больше полезного нет?
Mutha_X is offline   Reply With Quote
Old 20/02/2019, 08:09 PM   #3
SHOROOP
Big Clucker
 
Join Date: Feb 2012
Posts: 123
Reputation: 3
Default Re: samp03svr в Docker

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

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

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
./samp03svr & help me please skiplovebra Server Support 4 28/09/2017 01:01 PM
./samp03svr danielpalade Server Support 4 05/11/2015 04:42 PM
[Ajuda] samp03svr _Play_ Portuguкs/Portuguese 3 19/03/2015 09:35 PM


All times are GMT. The time now is 02:59 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.