SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Четвертая конференция
разработчиков ПО«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 контейнера
Нерешенные вопросы
ХЗ
● memory limit
● exim4
● лог-ротатор
● cron
Лень
● распределенный LetsEncrypt
● Запись docker-compose
● Dev/Prod конфигурация

Mais conteúdo relacionado

Mais procurados

С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
Презентация доклада Лавриненко
Презентация доклада ЛавриненкоПрезентация доклада Лавриненко
Презентация доклада Лавриненко
LuxoftTraining
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 

Mais procurados (20)

"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (..."Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов  (...
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
High Availability в жизни обычного разработчика
High Availability в жизни обычного разработчикаHigh Availability в жизни обычного разработчика
High Availability в жизни обычного разработчика
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
 
Презентация доклада Лавриненко
Презентация доклада ЛавриненкоПрезентация доклада Лавриненко
Презентация доклада Лавриненко
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 

Destaque

Destaque (14)

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

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

PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Ontico
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
DrupalCamp MSK
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
DrupalForumZP2012
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 

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

Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Sivko
SivkoSivko
Sivko
 
Rpm5
Rpm5Rpm5
Rpm5
 
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 

Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на 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 контейнера
  • 15.
  • 16.
  • 17.
  • 18. Нерешенные вопросы ХЗ ● memory limit ● exim4 ● лог-ротатор ● cron Лень ● распределенный LetsEncrypt ● Запись docker-compose ● Dev/Prod конфигурация