HighLoad++ 2018

Достаточно спонтанно удалось побывать на HighLoad++ 2018. Предыдущий раз был в 2016 года и мне ни очень понравилось. В этот раз конференция превзошла ожидания.

Как обычно она длится 2 дня, первый день более насыщенный и идет до упора. На второй день выживают не все 😉 Читать далее

Проект — «Последний звонок»

Наткнулся в интернетах на интересный проект — «Последний звонок» от Константина Сёмина и Евгения Спицына. Данный проект рассказывает о текущем положение дел в образование и тех изменениях, который там происходят. Многие из нашего поколения, в скором времени, начнут отдавать своих детей в детские сады и школы и стоит знать, что сейчас там происходит.

Смотрите видео, поддерживайте проект, ставьте лайки, распространяйте информацию, подписывайтесь. Еще не все потеряно.

Ссылка на проект — https://lastcall.su/

Первая серия:

Вторая серия:

Третья серия:

P.S. запасайтесь советскими учебниками 😉

Meetup в Петрозаводске от axmit

Весной с приятелем ездили в Петрозаводск на Meetup и только сейчас дошли руки написать об этом. В очередной раз хочется оживить свой блог)) Пригласили нас знакомые ребята из компании axmit, которые и устраивали Meetup.

Читать далее

From Devoops to DevOps

Интересный доклад от CTO(Chief Trolling Officer) Kris Buytaert о том, что же такое DevOps. Сейчас только ленивый не рассказывает, что же это такое, но на мой взгляд у него получилось достойно.

Выводы с которыми я согласен, что DevOps:

  • Это не о инструментах, которые применяются
  • Это о возможности изменятся
  • Это о людях и их взаимодействии

Доступ на заблокированные сайты в РФ, в частности linkendin

В РФ часто блокируют различные ресурсы, а часть из них полезная, к примеру Linkedin. Существуют множество способов, как пробиться через наш фаервол — это различные прокси и vpn. Если хочется чтобы это работало стабильно, то это будет платное решение. Естественно оно не стоит космических денег)

Для себя я решил это проще, т.к. мой блог хостится за пределами РФ, можно воспользоваться ssh для организации прокси.

Читать далее

Команда docker run из запущенного контейнера

Когда docker контейнеры начинаешь использовать чуть больше, чем просто запустить hello-world, возникают различные задачи. К примеру одна из таких это получить команду docker run из рабочего контейнера. Это сделать не сложно, вся фишка в ключе —format. Создаем файл run.tpl

 docker run \
 --name={{.Name}} \
 {{range $e := .Config.Env}}--env="{{$e}}" \
 {{end}}{{range $p, $conf := .NetworkSettings.Ports}}{{if $conf}}-p {{(index $conf 0).HostIp}}:{{(index $conf 0).HostPort}}:{{$p}} \
 {{end}}{{end}}{{range $network, $conf := .NetworkSettings.Networks}}--net {{$network}} \
 --ip {{$conf.IPAddress}} \
 {{end}}{{range $v := .HostConfig.VolumesFrom}}--volumes-from="{{.}}" \
 {{end}}{{range $v := .HostConfig.Binds}}--volume="{{.}}" \
 {{end}}{{range $l, $v := .Config.Labels}}--label "{{$l}}"="{{$v}}" \
 {{end}}{{range $v := .HostConfig.CapAdd}}--cap-add {{.}} \
 {{end}}{{range $v := .HostConfig.CapDrop}}--cap-drop {{.}} \
 {{end}}{{range $d := .HostConfig.Devices}}--device={{(index $d).PathOnHost}}:{{(index $d).PathInContainer}}:{{(index $d).CgroupPermissions}} \
 {{end}}{{range $v := .Config.Entrypoint}}--entrypoint="{{.}}" \
 {{end}}{{with .HostConfig.LogConfig}}--log-driver="{{.Type}}" \
 {{range $o, $v := .Config}}--log-opt {{$o}}="{{$v}}" \
 {{end}}{{end}}{{with .HostConfig.RestartPolicy}}--restart="{{.Name}}{{if eq .Name "on-failure"}}{{.MaximumRetryCount}}{{end}}" \
 {{end}}{{if .Config.Tty}}-t \
 {{end}}{{if .Config.Hostname}}--hostname {{.Config.Hostname}} \
 {{end}}{{if .Config.OpenStdin}}-i \
 {{end}}{{if not (.Config.AttachStdout)}}--detach=true \
 {{end}}{{if .HostConfig.Privileged}}--privileged \
 {{end}}{{if .HostConfig.AutoRemove}}--rm \
 {{end}}{{.Config.Image}} \
 {{range .Config.Cmd}}{{.}} {{end}}

И выполняем команду:

docker inspect --format "$(<./run.tpl)" target-container

На выходе получаем что-то вроде:

docker run \
    --name=/target-container \
    --env="BRANCH_NAME=split-front" \
    --env="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
    --env="TERM=xterm" \
    --env="DEBIAN_FRONTEND=noninteractive" \
    --env="LC_ALL=C.UTF-8" \
    --env="BUS_VERSION=0.14.11" \
    -p 0.0.0.0:80:80/tcp \
    --net internal-test \
    --ip 172.33.0.2 \
    --entrypoint="/bin/sh" \
    --entrypoint="-c" \
    --entrypoint="/entrypoint.sh" \
    --log-driver="json-file" \
    --log-opt max-file="1" \
    --log-opt max-size="50M" \
    --restart="" \
    -t \
    --hostname build4130.app.test.local \
    --detach=true \
    app:4130

Отмечу, что шаблон не универсальный и выводит только ограниченное количество опций, но в моей практике на данный момент этого хватало.

Ошибка epmd rabbitmq в Docker контейнере

На той недели, при разворачивание тестового окружения, столкнулись с проблемой запуска RabbitMQ в Docker контейнере.

Почему-то rabbitmq падал с ошибкой:

ERROR: epmd error for host build189: address (cannot connect to host/port)

Самое интересное, что проблема воспроизводится не всегда, поэтому отловить и отдебажить ее было проблематично.

Запускали rabbitmq следующей командой(выкинул все лишнее):

docker run -d -h build189.rabbitmq.test.local --name rabbitmq rabbitmq

В гугле много раз упоминается данная проблема, но ни одно из решений нам не помогло. Но раз из ошибки следует, что rabbimq не знает хост build189, мы решили добавить его в /etc/hosts завернув его на 127.0.0.1 и больше баг не проявлял себя.
В Docker’e это делается просто:

docker run -d -h build189.rabbitmq.test.local --name rabbitmq --add-host build189:127.0.0.1 rabbitmq

Отчет о проведенном хаккатоне

У нас прошел первый в компании хакатон. Он проходил два дня в рамках только нашего отдела. В 17:00 второго дня всем необходимо было продемонстрировать результаты своей работы. Темы можно было предлагать любые. В нем приняли участие четыре команды. Наша команда была под номером — 3. О нашем опыте я и расскажу.

Читать далее

Crontab, перевод строки после последней задачи

Маленькая заметка о том, что при размещение задач в crontab необходимо всегда заканчивать их переводом строки, иначе задача не будет выполнена. Не зная этой особенности иногда можно потратить много времени на решение проблемы, почему не выполняется последняя задача из crontab? Будьте внимательны. В сети можно найти валидаторы crontab, онлайн или на каких-либо скриптовых языках. На php тоже есть примеры реализации.