• Не могу приконектится к elasticsearch используя докер, в чем может быть причина?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Что такое второй конфиг? 0.0.0.0 - хост указывается только в параметрах сервера эластика, чтобы он "слушал" по всем адресам, а не на каком-то конкретном. В клиенте надо указывать ЛИБО айпи адрес эластика (хоста или контейнера), ЛИБО имя контейнера (сервиса) - если эластик запущен в контейнере

    localhost и 127.0.0.1 для контейнера - это, вполне логично, этот же самый контейнер. В котором ЕСТЕСТВЕННО эластик не запущен. Поэтому так делать бессмысленно. Но есть исключение - когда контейнеры запускаются без изоляции сети (--net host)
    Ответ написан
    Комментировать
  • Почему Docker контейнер не отправляет логи?

    gecube
    @gecube
    системный администратор, программист... все дела..
    1. если у вас грейлог - можете использовать GELF драйвер
    2. чтобы грейлог принимал логи - надо настроить т.н. INPUT с соответствующими параметрами - раз, два - разрешить подключения к ним снаружи файрволлом или, если грейлог в контейнере, добавить соответствующие порты к пробросам
    3. при прочих равных я рекомендую пользоваться journald драйвером, т.к. он не ломает docker logs команду - можно будет логи смотреть локально + в нем есть еще куча штуковин вроде rate limit, ротации и прочего, что позволяет обеспечить минимальное влияние логов на хостовую систему. А уж из journald можно настроить пересылку в грейлог - как бонус получите сообщение с самой хост машины (будто ее логи никому не интересны)
    Ответ написан
    1 комментарий
  • Что за ошибка докера?

    gecube
    @gecube
    системный администратор, программист... все дела..
    ну, все написано - когда монтируете, то можете только файл на файл или каталог на каталог монтировать. Иногда бывает, что если в volume слева указан файл, который на хосте не существует, то докер сходит с ума. И создает вместо него каталог с правами root:root.
    Какое может быть решение? Для начала прекратить пользоваться упрощенным синтаксисом -v в docker run или volumes в docker-compose, а использовать расширенный синтаксис mount (который с --mount). Тогда, если на хосте нет нужного файла, то докер контейнер ТУПО не стартанет и будет внятное сообщение об ошибке вроде:

    docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /home/local/georg.gaal/formulas.
    See 'docker run --help'.


    При этом Вы еще бонусом и получаете то, что докер не будет пытаться изменить права на каталог. А создаваемые внутри файлы будут с теми правами, которые установлены внутри контейнера - сплошная лепота. Минус в том, что все необходимые каталоги и файлы для запуска контейнера надо создавать заранее. Т.е. уже коллегам надо отдавать докер-компоуз файл плюс bash-скрипт
    Ответ написан
    2 комментария
  • Как правильно организовать разработку с использованием docker?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Черновой ответ, потому что у всех детали могут отличаться - делайте как Вам удобнее.

    1. Есть принципиально два подхода. Первый - один репозиторий - один артефакт. Он достаточно удобен, т.к. позволяет раздавать доступы на репозитории разным командам, если они пилят разные модули. Так же это в рамках гита позволяет удобно реализовать разные релизные циклы для разных модулей. С другой стороны - сразу получаете проблему интеграции всех этих репозиториев в единую систему. Обычно решается каким-то мета-репозиторием, который знает как собрать проект из кусочков. Или инклюдит все остальные репозитории как субмодули. Еще если маленьких репозиториев очень много и нужно вносить параллельные изменения в несколько сразу - это очень неудобно для разработчиков. Вторая крайность - это монорепозиторий. Когда ВЕСЬ проект состоит из одного репозитория. Это очень удобно в ситуации, когда у Вас только ОДНА, крайняя версия продукта. Т.к. всегда все собирается из одного коммита и либо все сразу срастается и есть гарантии совместимости всех модулей, либо надо исправлять код ) При этом зачастую приходится очень четко продумывать структуру проекта (например, раскладывать каждый отдельный модуль в отдельный каталог), теряете возможность работы с внешними подрядчиками (придется им заводить отдельные репки + настраивать синхронизацию), делать всякие обертки, чтобы не собирать весь проект, а только изменившиеся части, т.к. сборка всего может быть очень долгой. Но, да, этот подход тоже имеет право на жизнь. Тем более пока не попробуете сами - точно не сможете понять, что лучше
    docker-compose - это хорошо для разработки и моделирования кучки сервисов. Для продакшена не очень хорошо.

    2. Идеально - один контейнер - один сервис. Но для целей разработки можно использовать контейнеры как средство доставки чего бы то ни было и там рождаются кадавры с несколькими сервисами в одном контейнере. Но для продакшена это не очень.

    3. ansible, gitlab-ci

    4. все имеет значение. Зависит от ваших возможностей и задач. Точно стоит избегать всяких OpenVZ, лучше всего деплоится на настоящие виртуальные машины. Как правило они на KVM технологии. По операционной системе - лучше брать то, с чем умеете работать, либо можете привлечь специалистов. Т.е. популярные варианты - centos, ubuntu, debian. Все остальное можно рассмотреть только в случае каких-либо _особых_ требований. Например, очень крутая штука CoreOS, если запускать ТОЛЬКО лишь контейнеры - ничего лишнего, атомарные обновления, но хорошо это работать будет только на виртуалках, а если надо запускаться на железном сервере ? То тут уже нюансы

    5. никак. Она с докерами никак не дружит.

    6. Думать. Проектировать. Очень важно понимать как будет запускаться приложение, сколько будет реплик, как они будут взаимодействовать, делить общие ресурсы (файлы, записи в БД, очереди и пр). Касательно файлов - для докер-контейнеров - чтобы обеспечить их сохранность, все нужное нужно писать либо в bind mount, либо в volume - тогда данные не пропадут при удалении контейнера.

    > Насколько я понимаю, при разворачивании очередного релиза старые контейнеры сносятся и ставятся новые - это так?

    Совсем высокоуровнего - да, так.
    Ответ написан
    4 комментария
  • Для чего нужны директивы препроцессора на языке С и С++?

    gecube
    @gecube
    системный администратор, программист... все дела..
    О, это сложно объяснить. Но кратко - Си в изначальном варианте не поддерживал условную компиляцию. Ты не мог написать один файл, который компилировался на любой поддерживаемой платформе одинаково. Пришлось бы держать отдельную копию исходного файла под каждую целевую платформу. Поэтому возникла идея языка шаблонов или точнее - метапрограммирования, что реализуется препроцессором Си. Он берет исходный файл и по определённым правилам согласно своих директив превращает его в то, что пойдет на вход компилятору. И директива `#include` позволила подключать библиотеки кодов. А потом препроцессор исторически перекочевал в С++ из необходимости обеспечения совместимости.

    Сейчас в современном С++ иногда приходится прибегать к этой магии макросов, например, при написании переносимого кода, если не хватает штатного функционала языка - шаблонов, рефлексии и пр. Но при прочих равных активное использование макросов считается не очень хорошим тоном, т.к. вменяемых средств их отладки нет и сообщения об ошибках могут быть весьма запутанными.
    Ответ написан
    Комментировать
  • How to run docker on read-only filesystem?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Не получится на ro.
    Докер хранит свое состояние в /var/lib/docker
    Туда же идут образы, данные и конфигурации контейнеров и пр. пр. пр.

    Какие варианты я вижу:

    1. Монтировать указанный каталог на tmpfs
    2. Отказаться от использования docker, поставлять сервисы "запеченными" в основной образ с ОС на RO ФС
    3. Перейти на альтернативные технологии контейнеризация типа systemd-nspawn
    Ответ написан
  • Mikrotik не работает с симкартой?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Попробуйте симку в телефоне после того, как она перестает работать в микротике. Я не очень верю, что микротик портит симки, но ненулевая вероятность это есть. Так же попробуйте не обычную симку с тарифом мобильной связи, а специальную - с тарифом роутера, т.к. опсосы достаточно умны, чтобы банить пользователей, которые выходят с одной симки с нескольких компов.
    Ну, и если Вы не нарушали условий обслуживания, то всегда можно обратиться в СЦ ОпСоса и уточнить, что происходит.
    Ответ написан
    1 комментарий
  • Как в GitLab удалить коммиты старше 1года?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Это плохая идея, т.к. у вас каждый последующий коммит зависит от предыдущего. И у всех коммитов после схлопывания изменится sha.
    Коллеги уже выше дали информацию как пользоваться командой rebase для этой цели.
    Это означает, что после "схлопывания" нужно будет всем пользователям репозитория у себя его полностью перекачать, а старые копии удалить.
    Само по себе количество коммитов как правило не является лимитом или ограничением при работе с большим репозиторием. Есть ограничение по размеру в самом Гитлабе, но обычно его хватает за глаза для проекта любого разумного размера. А если у Вас монорепозиторий и он вылез за границы лимиты, то либо переезжаете на свой инстанс гитлаба, либо пора проект делить на модули, каждый в отдельном репозитории.

    Ещё хочу добавить, что у git clone есть чудесный параметр depth, который позволяет ограничить глубину клонирования репозитория, если хочется сэкономить трафик и история с самого начала не нужна.
    Ответ написан
    1 комментарий
  • Что такое докер на простом примере?

    gecube
    @gecube
    системный администратор, программист... все дела..
    docker - это не про бекап сервера. Если хочется контейнеризацию операционки, то нужен LXC/LXD.
    А в Вашем случае нужен рефакторинг всего содержимого сервера. Короче - докер поможет структурировать эту свалку из сервисов и более удобно ею управлять. Но для этого нужно приложить усилия.
    Ответ написан
    Комментировать
  • Как правильно работать с пользователями в Docker-контейнерах?

    gecube
    @gecube
    системный администратор, программист... все дела..
    > Как работает параметр user при запуске докер-контейнеров и, самое главное - как обрабатывать его при написании своих Dockerfile'ов?

    никак. Параметр user это костыль, который позволяет софт запускать не от root'ового пользователя. Объяснять почему запускать в докере под пользователем 0 (root) что-либо - долго, но если кратко, то это очень плохо и не секурно. Соответственно, правильный путь Вы уже поняли:

    1. определять entrypoint контейнера как свой самописанный docker-entrypoint.sh скрипт
    2. в docker run оставить возможность передать ключ (точнее - переменную среды) USER
    3. в docker-entrypoint.sh его (ее, переменную среды) подхватывать и изменять через chmod/chown нужные файлы в bind-mount (каталогах, доступных и в контейнере, и на хосте) и через утилиту gosu переключаться в нужного пользователя
    4. и только как завершающий этап - запускать свой сервис в докере


    Что еще добавить. Все эти проблемы с chown/chmod возникают только если необходимо перегонять файлы между контейнером и хостом. Если этой задачи не стоит, то и все приседания и не нужны. А если все-таки нужно, то есть еще два способа это сделать без колдования с правами:
    • команда docker cp
    • использование pipe: docker exec container_name cat MY_FILE > path_on_host или аналогично
    Ответ написан
    4 комментария
  • Порекомендуете книги по С++ для самых новичков?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Я вообще думаю, что с++ не очень удачный язык для обучения с нуля. Все принципы ООП и функционального программирования будут спрятаны за сложностью самого синтаксиса языка. Я уж не говорю, что наштамповали кучу стандартов и язык за последние 10 лет очень изменился, а ещё есть очень большая разница с каким фреймворком его использовать. Так с++ + mfc это совсем не то же, что и c++/qt или .netовский с++.
    Рекомендую изучить основные концепции программирования на более лёгких языках (тот же python) и потом уже по необходимости переходить на кресты.
    Касательно литературы полностью поддержу ответ коллеги выше. Страуструповская книга будет очень тяжела для чтения. Она скорее как она справочник хороша.
    Ответ написан
  • Как сделать на микротике, чтобы физическая сеть и виртуальная (VLAN) видели друг друга?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Tl;dr
    Ничего не поменял, рекомендую расписать более подробно, что же хотите на самом деле. И зачем нужен маскарад на адреса в vlan для меня загадка. Как будто пахнет оверинжинирингом.
    Касательно сути вопроса - обычно достаточно нужные интерфейсы (vlan, vpn, ethernet, wifi..) тупо засунуть в бридж и внутри микротика заработает АВТОМАГИЯ
    Ответ написан
    1 комментарий
  • Почему в одном случае установка pip пакета через ansible в Vagrant требует sudo прав, а в другом нет?

    gecube
    @gecube
    системный администратор, программист... все дела..
    1. В первом плейбуке два become. Это преднамеренно так сделано?
    2. Покажи свой ansible.cfg
    3. Ну, и вообще по уму везде должен быть беспарольный судо или правильные настройки ansible.cfg (поэтому и родился п.2).
    4. При прочих равных всегда лучше устанавливать питон пакеты через родной пакетный менеджер оси, чем через pip. Да, бывают ситуации, когда это невозможно или нежелательно, но в принципе можно сделать те же пакеты самому, если их в официальном дистрибутиве ОСи нет
    Ответ написан
    Комментировать
  • Что на сегодня лучше для нового проекта, GitLab vs GitHub vs bitbucket?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Из всех трех мне больше нравится ГитЛаб. Из-за общего набора возможностей и активного развития проекта. Возможны какие-то дополнительные требования - например, работа на стеке Атлассиан (JIRA+Confluence), тогда стоит присмотреться к битбакету (хотя в том же ГитЛабе достаточно вменяемая интеграция с JIRA)

    ГитХаб исторически был лучше для опен-сурс проектов. И до сих пор часть вещей работают только с ним. Но если речь именно про приватные репозитории - Гитлаб интереснее будет.
    Ответ написан
    Комментировать
  • Брут MySQL сервера: mysqld: [Warning] access denied for user 'xxxxxx'@xx.xx.xx.xx стоит ли переживать?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Для начала надо понять - а есть ли необходимость держать mysql сервер открытым на весь интернет. Это плохая практика. Что можно сделать ? Если нужно - закрыть файрволлом по белому списку IP. Закрыть VPNом.
    Ответ написан
    Комментировать
  • Должен ли я компилировать .cpp для репозитория на GitHub?

    gecube
    @gecube
    системный администратор, программист... все дела..
    В репозитории должны быть только исходные коды.
    Если хотите делиться бинарниками, то для этого есть такая штука как GitHub releases.
    Ответ написан
    Комментировать
  • Почему зависает система наглухо и stress-ng?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Такие проблемы могут быть вызваны неисправным или неподходящим БП. При высокой нагрузке, БП начинает выдавать напряжения, которые недостаточны для питания компонентов ПК, что приводит к различного рода сбоям. И, что хуже всего, количество ватт на этикетке БП далеко не всегда говорит о его качестве или способности питать мощный ПК. С годами проблема только усугубляется.
    По логу stress-ng, к сожалению, ничего подсказать не могу.
    Ответ написан
    3 комментария
  • Python.GitHub.Автообновление скрипта, есть идеи?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Ещё вариант:
    сделать минимальный CD-процесс.
    Как это выглядит?
    1. Развернуть репозиторий на GitLab
    2. Установить gitlab-runner на целевой машине
    3. И подключить к репозиторию
    4. В репозитории создать файл .gitlab-ci.yml и в нем описать шаги по обновлению кода.

    Если сервер доступен извне, то можно п.2 пропустить и в скрипте, который описывается в шаге 4, попросту подключиться по ssh к серверу и проделать все необходимые действия.

    Ну, либо, как советуют выше, использовать watcher'ы, которые будут следить за кодом в репозитории и при обновлении обновлять код автоматически на целевой машине
    Ответ написан
    Комментировать
  • Сборка libtorrent под CentOS 7?

    gecube
    @gecube
    системный администратор, программист... все дела..
    Для начала - попробуйте более свежую тулинга (компилятор, заголовочные файлы и т.п.) для сборки.
    Второй совет - теоретически, если все зависимости упаковать внутрь, то можно собрать библиотеку на какой-нибудь убунте, а потом перенести на ЦентОСь.
    Ответ написан
    1 комментарий
  • Как настроить автозапуск SoftEther VPN Server через systemd?

    gecube
    @gecube
    системный администратор, программист... все дела..
    я бы сделал как: тупо украл из интернета юнит-файл, а не писал его с нуля.
    Ещё очень неплохо написать на какой операционной системе происходит действие, т.к. systemd-дистрибутивов до чёртиков.
    Что до root cause - я пока что предполагаю, что в окружении чего-то не хватает. В отличие от запуска через пользователя.
    Ответ написан
    Комментировать