Skip to content

palchik1985/docker-dev-server-kit

Repository files navigation

docker-dev-server-kit

Docker starter kit and scripts for full dev environment. Nginx, php, databases and additional envs in docker containers for each project on your corporate dev server

Правила работы дев сервера:

Основанием служит palchik1985/docker-php-starter-kit, заточенный под совместное использование некоторых контейнеров.

Требования

  • Установка софта на сервер должна быть сведена к минимуму, всё работает на основании docker контейнеров, для легкого деплоя и переноса между серверами
  • Контейнеры, которые требуются почти на всех проектах или занимают много места (PHP сборка ~500Mb, MySql ~380Mb), должны быть единственными на сервере, остальные проекты подключаются к ним. Nginx также один главный.
  • MySql и postgres контейнеры - по 1 на сервер. Каждый проект подключается к своей бд со своим юзером. В бд чужого проекта MySQL юзер смотреть не может.
  • SSH ключи и доступ к серверу должны менеджиться админ персоналом, а не девопсами. Желательно через панель управления
  • У каждого проекта есть стандартный набор папок в которых хранятся инструменты для деплоя. Каждый проект имеет локальный docker конфиг и dev docker конфиг.
  • Nginx забирает конфиги из папок каждого проекта, которые имеют одинаковое название - project_root/deploy/sitename.conf
  • Реализовано автоматическое обновление проектов по webhook в bitbucket (после обновления ветки, идет автообновление проекта на сервере). Ветка staging обновляется на dev сервере. Prod сервер обновляется с ветки prod
  • В ветку prod пушит только тимлид проекта, либо на основании пул-реквестов
  • В файле project_root/deploy/staging/build.sh (или другое имя, которое берется из ENV настроек скрипта) добавляются любые команды, необходимые для сборки проекта на сервере.
  • Сервер имеет систему мониторинга, на основе https://code-maze.com/top-docker-monitoring-tools/ https://rancher.com/comparing-monitoring-options-for-docker-deployments/
  • Проекты сервера по возможности отделены друг от друга, на основании chroot или docker container (https://github.com/yelp/dockersh/)
  • Рестарт сервисов (PHP, nginx etc) осуществляется не напрямую а через скрипты с правами --x--x--x (никто не может читать и писать, все могут выполнять)

фичи на будущее, о которых необходимо подумать:

  • 3-4 предыдущих версии деплоя хранится на сервере для легкой возможности быстро откатить код назад
  • проброс пользователя в конкретный docker контейнер при подключении, без возможности получить доступ к остальной системе (необходимо учесть возможность подключения по ssh ftp)

Спецификация:

  • все проекты и контейнеры лежат в папке, заданной в файле .env, по умолчанию - /var/www
  • SERVER DOCKER CONTAINERS лежат в папке /ROOTPATH/server/ - docker-compose + docker files + db etc, также есть проброс папки sites-enabled в nginx контейнер
  • сайты лежат в подпапках /var/www/sitename
  • каждый проект содержит папку deploy, где есть файл sitename.conf (nginx конфиг сайта), там же файл build.sh в котором прописаны скрипты на выполнение, с путями от корня проекта.
  • в папке deploy находятся подпапки local, staging, prod с конфигами под все окружения.
  • в папке local находится docker-starter-kit, в папках staging/prod - его версии без php,mysql и других общих модулей сервера
  • local starter kit умеет генерировать конфиги для staging/prod

разворачивание проекта

  • по команде в консоли newproject происходит копирование проекта в подпапку с именем
  • идет проверка на наличие папки deploy и конфигов, в случае нахождения конфигов, создается линка в sites-enabled папки server
  • перезагрузка nginx и поднятие локальных контейнеров
  • nginx добавляется ендпоинт под bitbucket hook (приходит хук, скрипт этого сайта делает git pull ветки и build.sh)
  • build.sh
  • после отработки посылается команда в devops slack чат проекта с выдачей консоли

обновления

  • bitbucket hook на 80 /sitename/deployhook/
  • скрипт делает git pull в том проекте где получен хук
  • запускает build.sh
  • проверяет правильность конфига сервера (отсутствие конфликтов между контейнерами)
  • стопает контейнеры проекта, + docker-compose up --build -d
  • отдает результат консоли в slack чат (настройка через конфиг или build.sh)

мониторинг и АПИ

  • апи умеет отдавать такую инфу о сервере: состояние контейнеров (docker cli) список проектов и их статусы (запущен лежит и тп) список доступов ssh на сервер

About

Docker starter kit and scripts for full dev environment. Nginx, php, databases and additional envs in docker containers for each project on your corporate dev server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors