docker

Всем привет. Сегодня я решил продолжить тему Docker. В данной статье я планирую рассмотреть данный инструмент немного с другой стороны. А именно на примере создания маленького dev-сервера. Если до сих пор вы не сталкивались с Docker, советую почитать предыдущий пост о сборке dev-окружения на базе vagrant и docker. Как и предыдущая, данная статья носит ознакомительный характер, по этому многие моменты я пропущу, и постараюсь просто показать возможности на одном примере.

Исходные

Имеем маленькую железяку на Core I3 с 4Gb памяти и жестким диском на 500 GB. Не много, но и не мало. Необходимо запустить сервер внутри локальной сети, который будет хостить gitlab и youtrack , можете дополнить список под ваши нужды.

Для начала, нужно скачать и установить систему. Я уже давно пользуюсь «бубунту server». Отступать от традиции не буду. Я использую ubuntu 14.04LTS, но вполне вероятно, что к моменту прочтения вами этой статьи актуальной будет уже другая версия системы, ничего страшного в этом нет.

После того как вы скачали и установили систему необходимо установить сам докер.

#!/bin/bash
#

echo "[Info] Installing docker"
sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get -y install docker-engine
sudo apt-get -y install python-pip

echo "[Info] Installing docker-compose"
sudo pip install -U docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Для ubuntu 15.10 можете взять готовый скрипт для автоматической установки.

Тут есть пара нюансов. По скольку сам gitlab предоставляет ssh доступ к репозиториям, нам потребуется пробросить 22й порт на host-машину, по этому порт sshd стоит сменить изначально. Так же, вполне возможно, что при попытке спуллить контейнер вы получите ошибку типа «status 0 while fetching image layer docker». Если эта ошибка у вас появилась смените dns сервер в настройках сети, например на 8.8.8.8.

Читать далее

docker

Docker для меня технология новая, по этому, если у вас возникнут замечания или поправки прошу отписать в комментарий. Я разделю эту статью на секции, чтобы вы могли пропустить то, что вам не интересно. Будут изложены некоторые размышления на тему «почему я начал использовать докер» и описан ряд «основ» на живом примере. Данный пост написан как продолжение вот этого: «Вагрант автоматизация развертывания среды разработки«. Все, что я буду использовать на стороне Vagrant вы сможете найти там.

Начну с предыстории.

Я достаточно давно занимаюсь разработкой web приложений. Преимущественно использую php в качестве back-end. Vagrant — отличное средство унификации и инкапсуляции рабочего окружения. В рамках задач поставленных перед моими командами данного инструмента более чем достаточно, но время не стоит на месте и технологии тоже.

Не так давно у меня возникла задача разделить проект на несколько составляющих подпроэктов. Исходя из требований, разные подпроэкты были построены с использованием разных технологий в server-side, а именно php и node.js. Следует отметить, что в дополнение к этому мы используем ряд вспомогательных систем таких как rabbitMq и др.

Как вы уже поняли, проект был распилен на сервисы. И тут встал вопрос об оптимизации рабочего окружения с учетом новой архитектуры проекта. Погуглив определенное время я пришел к выводу что стоит попробовать Docker. Но как, безболезненно, перевести всю команду на работу с новой технологией?? Тут и появилась идея интеграции с docker окружения в vagrant.

Зачем Docker?

Все наше рабочее окружение замечательно работало на Vagrant и могло бы и дальше так работать, но как то оно затратно в плане поддержки. Команд несколько и каждой конкретной команде ни к чему код всех подпроектов. С другой стороны, есть ещё серверы, которые требуют поддержки и обновления кода. Тут идея завернуть все в контейнер и собирать рабочее окружение из контейнеров, как конструктор, выглядит очень даже привлекательно. Этот же подход можно и к серверам применить.

Что такое Docker?

Большинство статей предлагают нам какую то шелуху ориентированную скорее на менеджеров, чем на разработчиков.

Сравнение с морской логистикой не очень помогает пониманию технологии.

Я воспринимаю докер как технологию дающую нам ряд возможностей таких как:

  • Дешевая виртуализация
  • Инкапсуляция компонентов проекта друг от друга и от хост системы
  • Возможность максимально унифицировать составляющие части
  • Упрощение развертывания и обновления проекта (особенно полезно если вы используете load-balancer-ы и несколько интстансов с кодом)
  • Возможность обойти так называемый vendor-lock

Можно ещё немало полезных «фишек» перечислить, я лишь выбрал наиболее весомые на мой взгляд.

Читать далее

ACL (Access Control List) является неотъемлемой частью современных web приложений. Как только у вас возникает необходимость скрыть часть функционала от  посторонних глаз, вы уже начинаете задумываться о контроле доступа, а такая необходимость возникает практически всегда.

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

В этой публикации я опишу самый базовый уровень управления доступом для web приложений построенных на базе Zend Framework 2, так называемый «MVC ACL layer». Реализация контроля доступа на более высоких уровнях тема отдельной статьи, вероятно, даже не одной.

Сперва определим ключевые понятия. Их у нас три:

  • Пользователь (объект, совершающий действие)

  • Ресурс (объект, над которым совершается действие)

  • Действие, которое совершается

 

Читать далее

ZF2-Logo

Современные php web приложения, в подавляющем большинстве имеют модульную структуру. Этот подход очень удобен, так как позволяет отделить функциональные части друг от друга. Этот принцип используется и в Zend Framework.

Помимо функционального назначения ваши модули могут, сильно отличаться внешним видом, скажем модуль авторизации может сильно отличаться макетом от остального сайта, а панель управления, и подавно, живет своей жизнью.

В этой заметке я описываю один из самых простых способов, как можно задать разным модулям разные layout-ы.

Читать далее

vagrant

Прошло немало времени с момента публикации предыдущих статей  о vagrant, и о минимальной настройке окружения. Я наблюдал за разработчиками и решил данную тему расширить.

Хочу задать задать вопрос читателю: Скажем вы прочли обе эти статьи и поклацали все своими руками. Не появилось ли после этого ощущение, что нехватает какой то автоматизации процесса?

Оказывается, у многих разработчиков, такого ощущения не возникло.

Как и обе предыдущие статьи, данная носит ознакомительный характер. Я не буду публиковать здесь перевод мануала, а приведу более менее близкий к реальности, пример.

Читать далее

JavaScript-logo

Часто мне приходится отвечать на вопросы типа «как отладить этот долбаный скрипт». Отвечать уже задолбался, по этому решил изложить основы отладки клиентских скриптов в данном блоге. Это первая публикация из планируемой серии она посвящена консоли. Изложенный мною материал не претендует на уникальность в том или ином виде его можно найти на разных интернет ресурсах.

Отладчики Javascript

  • firebug — Mozilla Firefox
  • Chrome developer tools — Chrome, Safari
  • Dragonfly — Opera
  • Developer Tools, Microsoft Script debugger — IE
  • Firebug light (https://getfirebug.com/firebuglite) — cross browser

По личному опыту мне близок firebug. Именно этот инструмент был одним из первых действительно полезных отладчиков.

Отладочная панель в Chrome обладает очень большим объемом возможностей но требует времени на освоение и привыкание. Данный инструмент заслуживает отдельной публикации.

Opera всегда была «особенным» браузером. Даже если вам кажется что dragonfly это какой то «унылый капец» — вы очень заблуждаетесь. Без этого инструмента отладка многих «специфичных» для Оперы вещей станет ночным кошмаром.

Об отладчиках под IE можно спорить долго, но если вы не занимаетесь поддержкой IE6, то Developer Tools покроет большинство ваших нужд по отладке в этом «гениальном» творении microsoft.

Firebug light обладает достаточно скромными возможностями, но, может вас очень выручить во многих случаях. В основном, когда нет возможности использовать один вышеупомянутых отладчиков.

Немало полезной информации вы можете найти здесь http://learn.javascript.ru/browsers

Console

console — это не стандарт, так что не факт что заработает везде. В некоторых браузерах console доступен только при открытом/включенном отладчике, например firebug, dragonfly, в других консоль доступна всегда, например chrome. Читать далее

mysql

Всем доброго времени суток. В рамках этого поста хочу рассказать о Pivot Table. Если вы знаете что это такое и как его готовить, можете смотреть другие интересные посты. Если нет — запаситесь попкорном. Для начала, чтобы вы поняли о чем речь, предлагаю поставить задачку.Читать далее

zf-logo-mark

Как часто вам приходится использовать разного рода Rich-Editor-ы в Ваших проектах? Например, почти в каждом пришедшем  ко мне проекте встроен tinyMce, CKEditor, Innova или  что- нибудь более экзотическое. Зачем нужен Rich-Editor —  вопрос риторический. В данном посте я планирую рассмотреть, как стоит и как не стоит его использовать в контексте Zend_Form. Тема рассматривается применимо к Zend Framework 1.x. Предполагаю, что Вы в полной мере используете функционал Zend_Form без изощрений.Читать далее

php

Достаточно тривиальная, на первый взгляд, задача вычитать csv файл у многих разработчиков порождает немало сомнительных велосипедов. Мне часто приходится пересматривать код написанный другими разработчиками а так же доделывать чужие проекты. Иногда встречаются сомнительные реализации тривиальных задач. Вот несколько примеров того как некоторые разработчики реализовывают парсинг csv файлов.

Как не надо делать

Вариант номер раз. Заслуживает почетного места на говнокод.ру ))

    $delimiter = ',';
    $csvContent = file($csvPath);
    foreach($csvContent as $row){
        $row = explode($delimiter, $row);
        ..........
    }

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

  • Что будет если данный код попытается вычитать csv файл  количеством строк скажем в 1 миллион? А если при этом файл ещё и содержит 1-2 сотни столбцов? Сколько памяти израсходует данный код?
  • А что будет если в одном из столбцов попадется строка содержащая символ разделителя?

Читать далее

phpunit-300x300

Возникла задача покрыть тестами проект на Zend Framework 1 + Doctrine. Как движок тестов был выбран PHPUnit версии 3.7.*. Что из этого получилось — под катом.

Технологии используемые при написании статьи

  • php 5.4
  • xDebug
  • composer
  • ZendFramework 1.x
  • Doctrine 2

Читать далее