Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хостинг на 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 конфигурация