SlideShare a Scribd company logo
Четвертая конференция
разработчиков ПО«DevParty»
2 апреля 2016 года, Вологда
Полицын Анатолий
Корпоративный хостинг на Докере
Синапс - агентство интернет-
маркетинга.
Конференция разработчиков
«DevParty» 2017
www.devparty.ru
Проект
● Было:
- монолиты с isp-manager
- reg.ru
- 1 клиент = 70% ресурсов
- клиенты на своих серверах
● Минусы:
- isp - дорого
- монолит падает целиком
- универсально = много кнопок
● Реализация 6 мес:
- Настарт (апрель)
- Внимание (июнь)
- Марш (август)
● Стало:
- 150 сайтов, пол тыщи докеров
на нескольких серверах и
полгода продакшена.
- включение сайта 2 клика
- добавление сервера - 15 минут
Задачи
● Хостинг разных сайтов
- место: от визитки до 50гб
- cpu: от ленда до 4к/сутки
● Бекапы
- в другие ДЦ
- 5гб + полное управление
- бэкап-план
● Серверы:
- Европа и РФ
- большие и микро VDS
- клиентские серверы
● Менеджерам
- развертывание в пару кликов
- автоматизация
- тарифы и лимиты
● Программистам
- php 7.0
- drush + drupal-console
- доступ к логам
- единообразие
● DevOps:
- восстановление из бекапа
- миграция между серверами
- Continuous integration
● Безопасность
Концепция
● Drupal 8
- ajax в 3 строчки
● Минимум кликов
- добавление сайта
- развёртывание друпала
● 2 типа команд
- REST: для работы с докером
- FS: mkdir, cp, echo, git clone
Архитектура
nginx-proxy:
● 1-php-fpm ---> 1-mysql
● 2-php-fpm ---> 2-mysql
● 3-php-fpm ---> 3-mysql
● 4-php-fpm ---> 4-mysql
● 5-php-fpm ---> 5-mysql
1. Добавить сайт
2.1 Подготовить хостинг
1. Директория + начальные настройки
- mysql, php, ssmtp, crontab
= git clone
https://github.com/politsin/docker-starter
2. Создание + запуск контейнеров:
- MySQL + php-fpm
= команды через REST
3. Настройки nginx
- запись файла + restart контейнера
2.2 Докеры
MySQL
● db_name и db_user всегда drupal
● root_pass и user_pass разные
● Доступ к mysql только через
сокет, смонтированный к php-fpm
unix:/run/mysqld/mysqld.sock
● 1 база данных = файловое
архивирование и восстановление
Php-fpm
● Supervisor + 3 процесса
- php-fpm, sshd, cron
● сайт всегда /var/www/html
● mysql на привычном месте
● /etc/* в режиме read-only
2.3 Nginx-proxy
● include /etc/nginx/vhosts/*/*.conf;
● root /opt/sites/238-synapse/www-home/html;
error_log /opt/sites/238-synapse/www-home/log/nginx-error.log warn;
access_log /opt/sites/238-synapse/www-home/log/nginx-access.log;
● location ~ .php(/|$) { # Fastcgi php-fpm
fastcgi_pass unix:/opt/sites/238-synapse/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; ####
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
● #$document_root$fastcgi_script_name >> /var/www/html/$fastcgi_script_name
Кнопки
1. Создать приложение
2. Пройтись по процессу
создания сайта
3. Скачать друпал
4. Перейти в установку
Плюсы
1. Друпал!
- доработка функционала
- добавление плюшек
2. Быстро и просто
- создать
- сделать всё что хочешь
- снести и создать новый
3. Кастомные конфигурации
- разные настройки php и mysql
- доработанные имаджи
4. Безопасность by design
+ доступ по ключам и ~/.ssh:ro
5. Единообразие окружения
Минусы
● Ресурсы MEM
- MySql - 200мб (отдельный сервер на каждый сайт)
- Php - 60мб на приложение + opcache
● Старьё и зоопарк:
Пять drupal-6 + 3 клиентские джумлы ушли в лепразорий на reg.ru
Бекапы и восстановление → AWS наше всё!
Бэкап-план
● Ежедневные - 3 дня
● Еженедельные - 15 дней
● Ежемесячные - 70 дней
● Полугодовые - 500 дней
● Навсегда
● s3 конфиг на уровне мастер-
аккаунта
● 5 докеров для бекапа
● s3 lifecicle
● Директория “подготовка к бекапу”
- lifecycle 1 день
● Докер для восстановления
● просто бекап файлов
в том числе и файлов mysql
● базу всегда зовут одинаково, но
пароль разный
Цикл жизни
1. ci: dev-stage-prod
2. dev-prod-del
3. сайт → AWS s3 → сайт2
Dev - режим разработки
● drupal site:mode dev
● ngnix css, js, img* - expires OFF
● mysql - лимиты
● adminer (phpmyadmin)
Prod - продакшен:
● drupal site:mode prod
● www.мойсайт.рф
● https
● ngnix expires ONN
● cron
Del - удаление проекта:
● Чистка: логи, .composer,
.drush/cache, drush-backups
● Бекап на S3
● Удаление контейнеров 7шт
● Удаление файловой системы и
nginx- конфига в корзину
Добавление сервера
1. apt-get install git, apache2-utils, htop
2. Docker + REST
3. Общесистемные контейнеры
- nginx-proxy
- Exim4
4. Имаджи
- docker pull mysql:5.6 tutum/dockup
- docker build docker-php:1.2
Плюшки
● Контроль доступа
● Ссылка на авторизацию менеджерам
● Вызов удаленных команд
● https + LetsEncrypt
● Кастомные конфигурации nginx
● Dev/Prod конфигурация
- php / mysql / ssmtp / supervisord
● Приложения: redmine, mailhog …
● Очистка
● Update контейнера
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на Docker
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на Docker
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на Docker
Нерешенные вопросы
ХЗ
● memory limit
● exim4
● лог-ротатор
● cron
Лень
● распределенный LetsEncrypt
● Запись docker-compose
● Dev/Prod конфигурация

More Related Content

PDF
pgconf.ru 2015.avito postgresql recovery
Михаил Тюрин
 
PDF
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
PDF
Kubasov 1 7_deploy
kuchinskaya
 
PDF
Оптимизация JavaScript в Drupal
Vlad Savitsky
 
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
PDF
Avito Stachka 2012
Roman Pavlushko
 
PDF
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
PPTX
Первые шаги с RabbitMQ
Alexander Svetkin
 
pgconf.ru 2015.avito postgresql recovery
Михаил Тюрин
 
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
Kubasov 1 7_deploy
kuchinskaya
 
Оптимизация JavaScript в Drupal
Vlad Savitsky
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
Avito Stachka 2012
Roman Pavlushko
 
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
Первые шаги с RabbitMQ
Alexander Svetkin
 

What's hot (20)

PDF
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
AvitoTech
 
PDF
HBase on Dev{Highload}
Alex Chistyakov
 
PDF
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Ontico
 
PDF
Linuxvirt seminar-csc-2015
OSLL
 
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
PDF
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 
PPT
Drupal Do
Inna Tuyeva
 
PDF
От Make к Ansible
Ivan Grishaev
 
PPT
Node.js (RichClient)
Serge Shirokov
 
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
PPTX
Применяем Ansible
Alexander Svetkin
 
PPTX
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
PPTX
07 virtual hosts_ru
mcroitor
 
PPTX
High Availability в жизни обычного разработчика
Sumy PHP User Grpoup
 
PPTX
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
Kirill Danilov
 
PDF
Презентация доклада Лавриненко
LuxoftTraining
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PDF
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
MoscowJS
 
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
PDF
Desktop app based on node js and html5
Provectus
 
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
AvitoTech
 
HBase on Dev{Highload}
Alex Chistyakov
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Ontico
 
Linuxvirt seminar-csc-2015
OSLL
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 
Drupal Do
Inna Tuyeva
 
От Make к Ansible
Ivan Grishaev
 
Node.js (RichClient)
Serge Shirokov
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
Применяем Ansible
Alexander Svetkin
 
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
07 virtual hosts_ru
mcroitor
 
High Availability в жизни обычного разработчика
Sumy PHP User Grpoup
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
Kirill Danilov
 
Презентация доклада Лавриненко
LuxoftTraining
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
MoscowJS
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
Desktop app based on node js and html5
Provectus
 
Ad

Viewers also liked (14)

PDF
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Dev_Party
 
PPTX
Елена Никитина, Аналитический центр при Правительстве РФ — Путь питониста, ил...
Dev_Party
 
PDF
Анна Крижановская, Playrix — Продвижение мобильных приложений: Deep Dive
Dev_Party
 
PDF
Александр Чистяков, Git in Sky — Современные тенденции в разработке программн...
Dev_Party
 
PDF
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Dev_Party
 
PDF
Владимир Варнавский, интернет-студия «33 Кита» — Идеальный программист
Dev_Party
 
PDF
Александр Сербул, 1С-Битрикс — Облачный сервис персональных рекомендаций для ...
Dev_Party
 
PDF
Денис Каленбет, АО «Эр-Стайл Софтлаб» — Самокапитализация программиста. Как п...
Dev_Party
 
PDF
Игорь Иванов, Playrix — Статистические предсказания игровой активности
Dev_Party
 
PDF
Игорь Цупко, Notamedia — Документация? Не слышал
Dev_Party
 
PDF
Анастасия Распопина, Percona — Feel at Home в на 90% распределённой компании:...
Dev_Party
 
PDF
Дмитрий Ивакин, ООО «Пайлабс» — Node.js: realtime приложение на примере систе...
Dev_Party
 
PDF
Сергей Яркин, Тензор — RabbitMQ. Насколько ценен мех и вкусно мясо?
Dev_Party
 
PPTX
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Dev_Party
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Dev_Party
 
Елена Никитина, Аналитический центр при Правительстве РФ — Путь питониста, ил...
Dev_Party
 
Анна Крижановская, Playrix — Продвижение мобильных приложений: Deep Dive
Dev_Party
 
Александр Чистяков, Git in Sky — Современные тенденции в разработке программн...
Dev_Party
 
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Dev_Party
 
Владимир Варнавский, интернет-студия «33 Кита» — Идеальный программист
Dev_Party
 
Александр Сербул, 1С-Битрикс — Облачный сервис персональных рекомендаций для ...
Dev_Party
 
Денис Каленбет, АО «Эр-Стайл Софтлаб» — Самокапитализация программиста. Как п...
Dev_Party
 
Игорь Иванов, Playrix — Статистические предсказания игровой активности
Dev_Party
 
Игорь Цупко, Notamedia — Документация? Не слышал
Dev_Party
 
Анастасия Распопина, Percona — Feel at Home в на 90% распределённой компании:...
Dev_Party
 
Дмитрий Ивакин, ООО «Пайлабс» — Node.js: realtime приложение на примере систе...
Dev_Party
 
Сергей Яркин, Тензор — RabbitMQ. Насколько ценен мех и вкусно мясо?
Dev_Party
 
Роман Приходько, Владимир Беспрозванных, «Сбербанк-Технологии» — Платформа ЕФС
Dev_Party
 
Ad

Similar to Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на Docker (20)

PDF
Drupal хостинг
DrupalSib
 
PPTX
Hosting for forbes.ru_
drupalconf
 
PDF
Михаил Боднарчук "Docker для PHP разработчиков"
Fwdays
 
PDF
Локальное окружение на Docker
Михаил Бакулин
 
PDF
Sivko
kuchinskaya
 
PDF
Wodby - хостинг полного цикла
DrupalSib
 
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
PPTX
Жизнь проекта на production
Nikolay Sivko
 
PPTX
Процесс разработки и тестирования с Docker + gitlab ci
Александр Сигачев
 
PPT
Web весна 2013 лекция 3
Technopark
 
PPT
Web осень 2012 лекция 3
Technopark
 
PPTX
Drupal: система для быстрой и комфортной разработки web-сайтов
Alex Barkov
 
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 
PPTX
Введение в Docker
Кузьмицкий Александр
 
PDF
ekbpy'2012 - Данила Штань - Распределенное хранилище
it-people
 
PDF
Web осень 2013 лекция 3
Technopark
 
POT
Снижение нагрузки на сервер с помощью NGINX
Andrii Podanenko
 
PPTX
02 1c-bitrix-cloud-storage
Alexander Demidov
 
PPTX
Docker-контейнеризация: от local до production
Roman Kudlay
 
PDF
Как не стать рабом облака. PaaS 2.0 с Docker
trukhinyuri
 
Drupal хостинг
DrupalSib
 
Hosting for forbes.ru_
drupalconf
 
Михаил Боднарчук "Docker для PHP разработчиков"
Fwdays
 
Локальное окружение на Docker
Михаил Бакулин
 
Wodby - хостинг полного цикла
DrupalSib
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
Жизнь проекта на production
Nikolay Sivko
 
Процесс разработки и тестирования с Docker + gitlab ci
Александр Сигачев
 
Web весна 2013 лекция 3
Technopark
 
Web осень 2012 лекция 3
Technopark
 
Drupal: система для быстрой и комфортной разработки web-сайтов
Alex Barkov
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 
Введение в Docker
Кузьмицкий Александр
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
it-people
 
Web осень 2013 лекция 3
Technopark
 
Снижение нагрузки на сервер с помощью NGINX
Andrii Podanenko
 
02 1c-bitrix-cloud-storage
Alexander Demidov
 
Docker-контейнеризация: от local до production
Roman Kudlay
 
Как не стать рабом облака. PaaS 2.0 с Docker
trukhinyuri
 

Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на Docker

  • 1. Четвертая конференция разработчиков ПО«DevParty» 2 апреля 2016 года, Вологда Полицын Анатолий Корпоративный хостинг на Докере Синапс - агентство интернет- маркетинга. Конференция разработчиков «DevParty» 2017 www.devparty.ru
  • 2. Проект ● Было: - монолиты с isp-manager - reg.ru - 1 клиент = 70% ресурсов - клиенты на своих серверах ● Минусы: - isp - дорого - монолит падает целиком - универсально = много кнопок ● Реализация 6 мес: - Настарт (апрель) - Внимание (июнь) - Марш (август) ● Стало: - 150 сайтов, пол тыщи докеров на нескольких серверах и полгода продакшена. - включение сайта 2 клика - добавление сервера - 15 минут
  • 3. Задачи ● Хостинг разных сайтов - место: от визитки до 50гб - cpu: от ленда до 4к/сутки ● Бекапы - в другие ДЦ - 5гб + полное управление - бэкап-план ● Серверы: - Европа и РФ - большие и микро VDS - клиентские серверы ● Менеджерам - развертывание в пару кликов - автоматизация - тарифы и лимиты ● Программистам - php 7.0 - drush + drupal-console - доступ к логам - единообразие ● DevOps: - восстановление из бекапа - миграция между серверами - Continuous integration ● Безопасность
  • 4. Концепция ● Drupal 8 - ajax в 3 строчки ● Минимум кликов - добавление сайта - развёртывание друпала ● 2 типа команд - REST: для работы с докером - FS: mkdir, cp, echo, git clone Архитектура nginx-proxy: ● 1-php-fpm ---> 1-mysql ● 2-php-fpm ---> 2-mysql ● 3-php-fpm ---> 3-mysql ● 4-php-fpm ---> 4-mysql ● 5-php-fpm ---> 5-mysql
  • 6. 2.1 Подготовить хостинг 1. Директория + начальные настройки - mysql, php, ssmtp, crontab = git clone https://github.com/politsin/docker-starter 2. Создание + запуск контейнеров: - MySQL + php-fpm = команды через REST 3. Настройки nginx - запись файла + restart контейнера
  • 7. 2.2 Докеры MySQL ● db_name и db_user всегда drupal ● root_pass и user_pass разные ● Доступ к mysql только через сокет, смонтированный к php-fpm unix:/run/mysqld/mysqld.sock ● 1 база данных = файловое архивирование и восстановление Php-fpm ● Supervisor + 3 процесса - php-fpm, sshd, cron ● сайт всегда /var/www/html ● mysql на привычном месте ● /etc/* в режиме read-only
  • 8. 2.3 Nginx-proxy ● include /etc/nginx/vhosts/*/*.conf; ● root /opt/sites/238-synapse/www-home/html; error_log /opt/sites/238-synapse/www-home/log/nginx-error.log warn; access_log /opt/sites/238-synapse/www-home/log/nginx-access.log; ● location ~ .php(/|$) { # Fastcgi php-fpm fastcgi_pass unix:/opt/sites/238-synapse/run/php/php-fpm.sock; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; #### fastcgi_param SCRIPT_NAME $fastcgi_script_name; ● #$document_root$fastcgi_script_name >> /var/www/html/$fastcgi_script_name
  • 9. Кнопки 1. Создать приложение 2. Пройтись по процессу создания сайта 3. Скачать друпал 4. Перейти в установку Плюсы 1. Друпал! - доработка функционала - добавление плюшек 2. Быстро и просто - создать - сделать всё что хочешь - снести и создать новый 3. Кастомные конфигурации - разные настройки php и mysql - доработанные имаджи 4. Безопасность by design + доступ по ключам и ~/.ssh:ro 5. Единообразие окружения
  • 10. Минусы ● Ресурсы MEM - MySql - 200мб (отдельный сервер на каждый сайт) - Php - 60мб на приложение + opcache ● Старьё и зоопарк: Пять drupal-6 + 3 клиентские джумлы ушли в лепразорий на reg.ru
  • 11. Бекапы и восстановление → AWS наше всё! Бэкап-план ● Ежедневные - 3 дня ● Еженедельные - 15 дней ● Ежемесячные - 70 дней ● Полугодовые - 500 дней ● Навсегда ● s3 конфиг на уровне мастер- аккаунта ● 5 докеров для бекапа ● s3 lifecicle ● Директория “подготовка к бекапу” - lifecycle 1 день ● Докер для восстановления ● просто бекап файлов в том числе и файлов mysql ● базу всегда зовут одинаково, но пароль разный
  • 12. Цикл жизни 1. ci: dev-stage-prod 2. dev-prod-del 3. сайт → AWS s3 → сайт2 Dev - режим разработки ● drupal site:mode dev ● ngnix css, js, img* - expires OFF ● mysql - лимиты ● adminer (phpmyadmin) Prod - продакшен: ● drupal site:mode prod ● www.мойсайт.рф ● https ● ngnix expires ONN ● cron Del - удаление проекта: ● Чистка: логи, .composer, .drush/cache, drush-backups ● Бекап на S3 ● Удаление контейнеров 7шт ● Удаление файловой системы и nginx- конфига в корзину
  • 13. Добавление сервера 1. apt-get install git, apache2-utils, htop 2. Docker + REST 3. Общесистемные контейнеры - nginx-proxy - Exim4 4. Имаджи - docker pull mysql:5.6 tutum/dockup - docker build docker-php:1.2
  • 14. Плюшки ● Контроль доступа ● Ссылка на авторизацию менеджерам ● Вызов удаленных команд ● https + LetsEncrypt ● Кастомные конфигурации nginx ● Dev/Prod конфигурация - php / mysql / ssmtp / supervisord ● Приложения: redmine, mailhog … ● Очистка ● Update контейнера
  • 18. Нерешенные вопросы ХЗ ● memory limit ● exim4 ● лог-ротатор ● cron Лень ● распределенный LetsEncrypt ● Запись docker-compose ● Dev/Prod конфигурация