SlideShare a Scribd company logo
1 of 20
Download to read offline
Docker
Опыт внедрения автоматизации в PHP проектах
“Автоматизация всего, что только можно автоматизировать, стала важнейшим конкурентным
преимуществом компании” (с) Генри Форд
Документация mysql
mysql> SET @g1 = Point(1,1);
mysql> SET @g2 = Point(2,2);
mysql> SELECT distance(@g1, @g2);
+----------------------------+
| distance(@g1, @g2) |
+----------------------------+
| 1.4142135623730951 |
+----------------------------+
Что оказалось
create function distance(lat1 double, lon1 double, lat2 double, lon2 double)
returns double
RETURN (DEGREES( ACOS( SIN(RADIANS(lat1)) *
SIN(RADIANS(lat2)) +
COS(RADIANS(lat1)) *
COS(RADIANS(lat2)) *
COS(RADIANS(lon1 - lon2)) ) ) *
60 * 1.85315962);
Технологический стек
➢ Laravel 5.*
➢ Php 5.5 - 7.1
➢ Mysql 5.*
➢ Nginx
➢ Apidoc
➢ Node js
Команда
Веб-волки, которые порвут любой проект
PHP
3 шт.
Нормальные ребята
JS Java
2 шт.
Знали консоль на уровне
“npm install”
1 шт.
Не вмешивался в этот
хаос
Ключевое звено
1 шт.
Человек, которому было
искренне интересно
разобраться
Уровень знаний о
виртуализации до
начала
внедрения
Возможные решения
Docker в общих чертах
● Бесплатный
● Виртуалка, но не совсем
● Быстрый
● Используется для linux и под linux
Основные составляющие
Образы == классы.
Примеры: ubuntu:16.04, mysql:5.7, wordpress:4.9.8-php5.6-apache
Контейнеры == объекты классов
Пример первого скрипта. docker-compose.yml
version: '3'
services:
db:
image: "mysql:5.7"
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_DATABASE: database
web:
build: .
ports:
- "80:80"
links:
- db:db_host
volumes:
- ./:/var/www/html
restart: always
depends_on:
- db
volumes:
db_data:
Пример первого скрипта. Dockerfile
FROM ubuntu:17.10
ENV DEBIAN_FRONTEN noninteractive
RUN apt-get clean && apt-get -y update && apt-get
install -y locales curl nano cron git unzip wget 
sudo supervisor software-properties-common
RUN apt-get install -y nginx && 
echo "ndaemon off;" >> /etc/nginx/nginx.conf && 
chown -R www-data:www-data /var/lib/nginx
RUN LC_ALL=en_US.UTF-8 add-apt-repository
ppa:ondrej/php
RUN apt-get update
RUN apt-get install -y php7.1 php7.1-fpm php7.1-cli
php7.1-mysql php7.1-json php7.1-curl php7.1-gd
php7.1-mbstring php7.1-mcrypt php7.1-xsl php7.1-zip
php7.1-xml php-imagick
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
/tmp/* /var/tmp/*
RUN sed -i -e
"s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g"
/etc/php/7.1/fpm/php.ini && 
sed -i -e
"s/upload_max_filesizes*=s*2M/upload_max_filesize
= 100M/g"
COPY ./nginx.conf /etc/nginx/sites-available/default
WORKDIR /var/www/html
CMD service php7.1-fpm start && nginx
Пример первого скрипта. nginx.conf
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
charset utf-8;
access_log off;
client_max_body_size 100m;
location / {
try_files $uri
/index.php?$args;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info
^(.+.php)(/.+)$;
fastcgi_pass
unix:/var/run/php/php7.1-fpm.sock;
fastcgi_param
SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME
$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
location ~*
.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
log_not_found off;
}
}
Что это дало
● Идентичное окружение
● Быстрый деплой
● Отсутствие конфликтов окружения для разных
проектов
● начало страданий...
Первая кровь реакция
“Да ну ** вашу ****, на*** это всё
нужно, работало же нормально б**” ©
программист
Первые сложности
● команда не понимала
зачем это всё
● сложности в устранении
неполадок
Дальнейшее развитие
● написание мануала по часто используемым командам
● создание docker-compose файлов для разных окружений
● добавление xdebug
● добавление ssl
● дробление контейнеров на более мелкие и
специализированные
Чего достигли
● ускорение разработки в среднесрочной перспективе
● снижение кол-ва багов
● стало легче привлечь новых сотрудников
● заказчикам нравятся новые технологии
Чем пожертвовали
● бОльшие затраты на начальном этапе проекта
● увеличение времени обучения новых сотрудников
● джуны могут быстро уходить, получив знания
● нужен человек, который будет помогать и
совершенствовать систему
Этапы развития
и дальнейшие планы
Февраль 2018
Appus начинает
использовать docker
Июнь 2018
Appus начинает
использовать gitlab CI
Сентябрь 2018
Мы сейчас здесь
Декабрь 2018
Appus захватывает
ВЕСЬ МИР
Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек
Спасибо за внимание!

More Related Content

What's hot

aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)Andrey Smirnov
 
Декларативные даги в Apache Airflow
Декларативные даги в Apache AirflowДекларативные даги в Apache Airflow
Декларативные даги в Apache AirflowRamblerML
 
Снижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINXСнижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINXAndrii Podanenko
 
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
 
Симаков Алексей - Системы управления кластерами
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами Yandex
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающихIvan Evtukhovich
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package managercorehard_by
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"FDConf
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into BadooAnton Turetsky
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonSlach
 
Cache GitHub Continous Integration
Cache GitHub  Continous IntegrationCache GitHub  Continous Integration
Cache GitHub Continous IntegrationEduard Lebedyuk
 
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Alexey Lesovsky
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)AvitoTech
 

What's hot (20)

aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)aptly: система управления репозиториями пакетов (РИТ-2014)
aptly: система управления репозиториями пакетов (РИТ-2014)
 
Декларативные даги в Apache Airflow
Декларативные даги в Apache AirflowДекларативные даги в Apache Airflow
Декларативные даги в Apache Airflow
 
Снижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINXСнижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINX
 
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 
Симаков Алексей - Системы управления кластерами
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Ngs 1 2
Ngs 1 2Ngs 1 2
Ngs 1 2
 
"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript""Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
Docker integration into Badoo
Docker integration into BadooDocker integration into Badoo
Docker integration into Badoo
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
Приручаем Git
Приручаем GitПриручаем Git
Приручаем Git
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на python
 
Cache GitHub Continous Integration
Cache GitHub  Continous IntegrationCache GitHub  Continous Integration
Cache GitHub Continous Integration
 
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 2)
 
Переход на Php 7 и итоги
Переход на Php 7 и итогиПереход на Php 7 и итоги
Переход на Php 7 и итоги
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)
 

Similar to "Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"

Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Roman Tsisyk
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017S-Terra CSP
 
Ec2 Rootconf2009
Ec2 Rootconf2009Ec2 Rootconf2009
Ec2 Rootconf2009Liudmila Li
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...it-people
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusCisco Russia
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоFuenteovejuna
 

Similar to "Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)" (20)

Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
DDOS mitigation software solutions
DDOS mitigation software solutionsDDOS mitigation software solutions
DDOS mitigation software solutions
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
Docker в development окружение
Docker в development окружениеDocker в development окружение
Docker в development окружение
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017
 
Ec2 Rootconf2009
Ec2 Rootconf2009Ec2 Rootconf2009
Ec2 Rootconf2009
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
 

More from Artjoker

Is it time to write unit tests?
Is it time to write unit tests?Is it time to write unit tests?
Is it time to write unit tests?Artjoker
 
Redux and React. Learning from giants.
Redux and React. Learning from giants.Redux and React. Learning from giants.
Redux and React. Learning from giants.Artjoker
 
MVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERMVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERArtjoker
 
«Let`s do it right»
«Let`s do it right»«Let`s do it right»
«Let`s do it right»Artjoker
 
«Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» «Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» Artjoker
 
3-е свидание с functional-js, что дальше
3-е свидание с functional-js, что дальше3-е свидание с functional-js, что дальше
3-е свидание с functional-js, что дальшеArtjoker
 
GraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаGraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаArtjoker
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyondArtjoker
 
Первые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыПервые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыArtjoker
 
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»Artjoker
 
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» «Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» Artjoker
 
«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»Artjoker
 
QA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаQA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаArtjoker
 
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsQA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsArtjoker
 
QA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternQA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternArtjoker
 
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Artjoker
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningArtjoker
 
Performance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowPerformance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowArtjoker
 
Productivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsProductivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsArtjoker
 
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Artjoker
 

More from Artjoker (20)

Is it time to write unit tests?
Is it time to write unit tests?Is it time to write unit tests?
Is it time to write unit tests?
 
Redux and React. Learning from giants.
Redux and React. Learning from giants.Redux and React. Learning from giants.
Redux and React. Learning from giants.
 
MVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERMVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPER
 
«Let`s do it right»
«Let`s do it right»«Let`s do it right»
«Let`s do it right»
 
«Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» «Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов»
 
3-е свидание с functional-js, что дальше
3-е свидание с functional-js, что дальше3-е свидание с functional-js, что дальше
3-е свидание с functional-js, что дальше
 
GraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаGraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчика
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyond
 
Первые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыПервые шаги интернет-магазина одежды
Первые шаги интернет-магазина одежды
 
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
 
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» «Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
 
«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»
 
QA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаQA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейса
 
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsQA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
 
QA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternQA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State Pattern
 
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps Evening
 
Performance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowPerformance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshow
 
Productivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsProductivity Hero. Know Your Tools
Productivity Hero. Know Your Tools
 
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
 

"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"

  • 1. Docker Опыт внедрения автоматизации в PHP проектах “Автоматизация всего, что только можно автоматизировать, стала важнейшим конкурентным преимуществом компании” (с) Генри Форд
  • 2. Документация mysql mysql> SET @g1 = Point(1,1); mysql> SET @g2 = Point(2,2); mysql> SELECT distance(@g1, @g2); +----------------------------+ | distance(@g1, @g2) | +----------------------------+ | 1.4142135623730951 | +----------------------------+
  • 3. Что оказалось create function distance(lat1 double, lon1 double, lat2 double, lon2 double) returns double RETURN (DEGREES( ACOS( SIN(RADIANS(lat1)) * SIN(RADIANS(lat2)) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * COS(RADIANS(lon1 - lon2)) ) ) * 60 * 1.85315962);
  • 4. Технологический стек ➢ Laravel 5.* ➢ Php 5.5 - 7.1 ➢ Mysql 5.* ➢ Nginx ➢ Apidoc ➢ Node js
  • 5. Команда Веб-волки, которые порвут любой проект PHP 3 шт. Нормальные ребята JS Java 2 шт. Знали консоль на уровне “npm install” 1 шт. Не вмешивался в этот хаос Ключевое звено 1 шт. Человек, которому было искренне интересно разобраться
  • 6. Уровень знаний о виртуализации до начала внедрения
  • 8. Docker в общих чертах ● Бесплатный ● Виртуалка, но не совсем ● Быстрый ● Используется для linux и под linux
  • 9. Основные составляющие Образы == классы. Примеры: ubuntu:16.04, mysql:5.7, wordpress:4.9.8-php5.6-apache Контейнеры == объекты классов
  • 10. Пример первого скрипта. docker-compose.yml version: '3' services: db: image: "mysql:5.7" ports: - "3306:3306" volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_DATABASE: database web: build: . ports: - "80:80" links: - db:db_host volumes: - ./:/var/www/html restart: always depends_on: - db volumes: db_data:
  • 11. Пример первого скрипта. Dockerfile FROM ubuntu:17.10 ENV DEBIAN_FRONTEN noninteractive RUN apt-get clean && apt-get -y update && apt-get install -y locales curl nano cron git unzip wget sudo supervisor software-properties-common RUN apt-get install -y nginx && echo "ndaemon off;" >> /etc/nginx/nginx.conf && chown -R www-data:www-data /var/lib/nginx RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php RUN apt-get update RUN apt-get install -y php7.1 php7.1-fpm php7.1-cli php7.1-mysql php7.1-json php7.1-curl php7.1-gd php7.1-mbstring php7.1-mcrypt php7.1-xsl php7.1-zip php7.1-xml php-imagick RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php/7.1/fpm/php.ini && sed -i -e "s/upload_max_filesizes*=s*2M/upload_max_filesize = 100M/g" COPY ./nginx.conf /etc/nginx/sites-available/default WORKDIR /var/www/html CMD service php7.1-fpm start && nginx
  • 12. Пример первого скрипта. nginx.conf server { listen 80; server_name localhost; root /var/www/html/public; index index.php index.html; charset utf-8; access_log off; client_max_body_size 100m; location / { try_files $uri /index.php?$args; } location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } location ~* .(js|css|png|jpg|jpeg|gif|ico)$ { expires 1y; log_not_found off; } }
  • 13. Что это дало ● Идентичное окружение ● Быстрый деплой ● Отсутствие конфликтов окружения для разных проектов ● начало страданий...
  • 14. Первая кровь реакция “Да ну ** вашу ****, на*** это всё нужно, работало же нормально б**” © программист
  • 15. Первые сложности ● команда не понимала зачем это всё ● сложности в устранении неполадок
  • 16. Дальнейшее развитие ● написание мануала по часто используемым командам ● создание docker-compose файлов для разных окружений ● добавление xdebug ● добавление ssl ● дробление контейнеров на более мелкие и специализированные
  • 17. Чего достигли ● ускорение разработки в среднесрочной перспективе ● снижение кол-ва багов ● стало легче привлечь новых сотрудников ● заказчикам нравятся новые технологии
  • 18. Чем пожертвовали ● бОльшие затраты на начальном этапе проекта ● увеличение времени обучения новых сотрудников ● джуны могут быстро уходить, получив знания ● нужен человек, который будет помогать и совершенствовать систему
  • 19. Этапы развития и дальнейшие планы Февраль 2018 Appus начинает использовать docker Июнь 2018 Appus начинает использовать gitlab CI Сентябрь 2018 Мы сейчас здесь Декабрь 2018 Appus захватывает ВЕСЬ МИР Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек