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

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

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

Continue reading

Weblancer скидочный купон

Всем привет!
Weblancer на почту закинул скидочный купон на 50%, действует в течение 7 дней (до 17.04.2017). Кому надо забирайте.

Код для получения скидки: 8B4E52

Команда 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. О нашем опыте я и расскажу.

Continue reading

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

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

Hackaton — первый день

Подходит к концу первый день хакатона. Небольшой отчет по первому дню.

Что получилось сделать за этот день:

  • Реализовали прототип удаленного управления нашими стробоскопами. С помощью него каждый может попробывать поиграться с нашим прототипом, заходите сюда, единственное задержка на нашем канале youtube примерно 30 секунд. Реализованы две веб-морды на PHP — Silex’e и Boostrap’e и Erlang — Chicago Boss. К этому всему добавилась логика в Arduino nano и магия с настройками сетей)
  • Убедились, что ethernet-кабелю можно запитывать лампы. По ним мы будем питать наши лампы.

Проблемы с которыми сегодня столкнулись:

  • Для работы Arduino ей необходимо какое-то время на инициализацию, соотвественно не возможно с ней работать по схеме сервер-клиент, клиенту приходится выставлять таймауты, что есть очень ни очень. Решили проблему, написав небольшой сокет сервер, который по сути открывает блочное устройство на чтение \ запись и вещает на свободный порт. Все внешние приложение уже общаются с портом прозрачно.
  • Инфраструктура. Из нас ни кто не имеет реального опыта в работе с arduino и вообще железом. Приходится подтягивать мат.часть на ходу.
  • Не успели все, что хотели подготовить к завтрашнему дню по аппаратной части.

Завтра должно быть продакшен решение, поэтому будет жарко. Смотрите за нами на нашем канале и нашими друзьями.

Vagrant box маппинг на существующую виртуальную машину VirtualBox

Иногда есть необходимость указать Vagrant’у, чтобы он запускался на существующей виртуальной машине VirtualBox’a. Стандартный кейс, когда Vagrant при старте создал новую виртуальную машину, а вам нужна старая, к примеру из-за того, что вы увеличили \ уменьшили количество оперативной памяти для VM. Поскольку сам столкнулся с этим в очередной раз, решил написать заметку.

Continue reading

Полезные команды для переноса данных между серверами linux

Есть у меня один проект на phpBB и на днях решил его перенести с сервера на сервер и за одно обновить ему версию. Проект не сложный и требовалось перенести только БД и само приложение. Больше проблем возникло с переходом на более новую версию phpBB, пришлось поковыряться, но об этом я не буду рассказывать. А расскажу о полезных linux командах, которые помогают совершить такой перенос. Continue reading