Ещё один сервис по управлению серверами по SSH

Pavel Buchnev
4 min readNov 7, 2019

--

Всем привет!

Чем занять себя программисту вечерами? Конечно же реализацией своих идей! Часто приходится заниматься настройкой веб-серверов для себя, друзей и клиентов и сам процесс настройки занимает обычно много времени, нервов в усидчивости.

Со временем, я подготовил для себя скрипт на gist в котором собрал самое основное, но все равно приходилось тратить время, пользоваться консолью, а если ее нет под рукой?

Хотелось минимум усилий, возможность некоторым функционалом управлять даже если консоли под рукой нет. Слово за слово и решил сделать себе интерфейс, через который можно было бы настраивать сервера. Т.к. всем нужно разное ПО, версии ПО, например одному нужен php7.2, другому php7.3, третьему вообще php5.6 или различные комбинации модулей и т.д. то я подумал, а почему бы не вынести возможность выбора устанавливаемых модулей на страницу добавления сервера, который нужно настроить.

Ну собственно со временем мой сервис по настройке серверов заработал, сервера настраивались. Со временем он оброс набором модулей, из которых можно выбрать необходимые: Fail2Ban, Memcache, MongoDB, MySQL PostgreSQL, MariaDB, PHP (5.6–7.3), Redis, Supervisor, Composer, Deployer, NodeJs, Nginx и т.д. Каждый модуль представляет из себя набор bash скриптов, которые отправляются на сервер и там исполняются, так что добавление модулей сводится к написанию скриптов и упаковки в модуль.

Управление сервером

  1. Управление серверов производится по SSH, поэтому указывается IP адрес сервера и порт SSH
  2. Для сервера генерируется пара ключей и ссылка на скрипт, который необходимо запустить на сервере. Данный скрипт добавит эти ключи на сервер, при этом сохранив существующие и запустит процесс установки выбранных модулей.
  3. Включается firewall и блокируются все порты кроме ssh
  4. Блокируется доступ на сервер по паролю. Остается доступ только по ключам. Через сервис можно управлять пользователями на сервере.

Некоторые модули имеют простейший интерфейс управления.

MySQL можно создавать базы данных

Страница управления MySQL

в Supervisor создавать демоны

Страница управления демонами Supervisor

Добавлять задачи в планировщик

Страница управления cron задачами

Для каждой задачи создается файл с логом, в который будут складываться результаты.

Управлять открытыми портами ufw

Страница управления ufw

При установке модулей они могут самостоятельно открывать для себя порты, например nginx. Но при желании их можно закрывать.

Управлять конфигурациями сайтов

Страница управления сайтами

Причем с сайтами все достаточно не просто, т.к. система модульная, то в качестве веб сервера может быть nginx, apache, caddy и т.д., а запросы обрабатывать может php-fpm, python, nodejs и в различных ситуациях должна быть своя конфигурация.

На данный момент сервером может быть nginx, а обработчиком php-fpm либо обычный прокси с указанием url.

После создания конфигурации для сайта, можно приступить к развертыванию исходного кода проекта на сервер (ручному или автоматическому). Все мои проекты разрабатываются на Laravel, поэтому на текущий момент весь упор именно на его особенности.

Страница настроек сайта

Для этого связываем свой профиль с сервисом github или bitbucket

добавляем в репозиторий публичный ключ сервера для доступа к репозитория на стороне сервера. Также можно настроить переменные окружения, которые будут загружены на сервер.

Сам деплой основан на инструменте deployer, который очень гибок и предоставляет Zero downtime deployment, что поможет избежать перебоев работы сайта в момент обновления.

При выполнении любой команды на сервере для неё создается задача, которая содержит скрипт, который будет исполнен на сервере, код ответа и сам ответ от сервера.

Список запущенных задач на сервере
Страница конкретной задачи

Используемые инструменты для разработки сервиса

  1. Laravel 6.x
  2. VueJS
  3. TailwindCSS
  4. Laravel Echo
  5. Laravel Horizon
  6. Laravel Passport
  7. Laravel Socialite
  8. Deployer
  9. Redis
  10. MySQL
  11. Pusher
  12. Algolia

В будущих статьях постараюсь рассказать что нибудь конкретное про сервис.

Планы на будущее

На текущий момент сервис достаточно сырой для широкой массы, но если очень интересно, то могу предоставить доступ поиграться. Обратная связь нужна и полезна.

В планах довести его до ума, пофиксить баги, доработать верстку для мобильных устройств, улучшить интерфейсы управления модулями, добавить возможность создавать и запускать пользовательские скрипты и возможность делать их публичными. В общем обычные программистские задачи.

Очень интересно услышать ваше мнение по поводу данного сервиса!

Спасибо!

--

--

Pavel Buchnev
Pavel Buchnev

Written by Pavel Buchnev

Senior PHP Developer | Contributor to Spiral Framework 🚀 | Enthusiast of RoadRunner & long-running applications | Creator of Buggregator

No responses yet