Собрал свои разбросанные записки в два скрипта, с помощью которых за 10 минут из «чистой» системы Centos7 получается готовый к дальнейшему использованию хост. Под готовым в первом приближении я понимаю следующее:
- Все обновлено
- Вход только по сертификатам
- Закрыт удаленный вход рутом, сделан другой пользователь с правами sudo
- Поставлен файрвол с пропуском http и https
- Установлен и работает ntp
- Поставлены и работают:
- Nginx
- PHP-fpm
- MySQL, а точнее — Percona, что в общем то же самое
Собственно, первый скрипт делает пункты с 1 по 5 и загружает второй, который устанавливает nginx, php-fpm и mysql. Такое разделение продиктовано тем соображением, что пункты с 1 по 5 по уму нужно делать на любом сервере, даже если там будет совершенно другой стек технологий.
Получить рабочий хост моими скриптами — проще простого. Но я подразумеваю, что Вы умеете хотя бы минимально пользоваться консолью, PuTTY и знаете что такое SSH с аутентификацией по ключу.
Сперва мы инициируем сервер с «голым» Centos7, например на SimpleCloud или vScale. И любым способом заходим в него рутом. Затем берем прямо отсюда копипастим команды в командную строку (можно сразу всей кучей):
wget pavlyuts.ru/tools/init.sh
chmod +x init.sh
./init.sh
Собственно, скрипт обновляет систему, доставляет утилиты, и, в частности, ставит последний openssh (7.5b1) с обходом всех подводный камней как я описал здесь.
Затем запрашивает имя пользователя, который будет потом на этом сервере всему голова. Имя должно начинаться с буквы, может в себя включать буквы, цифры и знак подчеркивания, при этом обратите внимание — все только в нижнем регистре.
Следом за именем он попросит ввести открытый ключ, который дальше и будет использоваться в SSH. Проще всего скопипастить его из окна PuTTY Key Generator, это окошко в верхней части, озаглавленное «Public key for passing into…». Скрипт проверяет его по формату и если он получает не открытый ключ, а нечто другое — то он опять и опять просит дать ему именно открытый ключ.
Когда имя и ключ заданы, будет создан пользователь и после этого надо задать для него пароль. Этот пароль не будет использоваться для входа на сервер, вход — по сертификату. Он нужен для того, чтобы перейти к полномочиям root командой sudo. Позволять «перескакивать» в root без пароля — плохая идея, так что пароль надо придумать и ввести, причем такой чтобы точно его не забыть.
В результате скрипт попросит Вас открыть другой терминал и проверить, что вы можете зайти по SSH с этим именем и этим ключом, а так же войдя на сервер успешно сделать sudo -s, ввести пароль и получить консоль root (символ в командной строке изменится с $ на #). Это важно, потому что следующим шагом удаленный доступ root блокируется, и если Вы чего-то сделали не так — быть беде. Поэтому если не получается — то лучше сказать скрипту нет и запустить его еще раз, с большим вниманием.
Дальше мы задаем имя хоста и это последний вопрос в этой части истории.
Следом будет установлен и активирован firewalld и настроен на пропуск http и https, а также если памяти 1Гб или меньше — будет создан своп-файл. Как показала практика, это единственная возможность сохранить стабильность работы системы с таким набором софта.
Собственно, все, первая фаза настройки завершена! По ее окончании предлагается перезагрузка, потому что обычно среди обновлений есть и обновления ядра.
Собственно, если Вы собираетесь использовать сервер для других стеков технологий — то на этом все.
Чтобы закончить установку nginx, php-fpm и MySQL — надо зайти по SSH с именем пользователя и ключом, заданным на первом этапе и запустить второй скрипт, который первым уже аккуратно положен в домашний каталог пользователя. Но поскольку мы уже не root, то и запускать его надо через sudo, вот так:
sudo ./setup.sh
В этом случае сервер попросит пароль, помните, переход в полномочия root защищен им.
Этот скрипт так же спрашивает, уверены ли Вы что хотите его запустить. Он ставит и запускает следующее:
- Nginx из моего репозитория repo.pavlyuts.ru. Дело в том, что Nginx в оригинальном репозитории по каким-то причинам собран с очень старой версией openssl. В моем репозитории лежит сборка с последней версией openssl, поддерживающая HTTP/2
- PHP-fpm одной из версий на выбор: 5.4, 5.5, 5.6, 7.0 или 7.1. Версии 5.5 и старше берутся из репозитория webtatic.com. Пожалуйста, будьте внимательны при выборе.
- Percona for MySQL (клон MySQL) из оригинального репозитория percona.com
Все необходимые репозитории подключаются автоматически. Для обнволения установленных пакетов достаточно стандартно использовать yum [ update | upgrade]
Последним шагом скрипт находит в логах и показывает временный пароль MySQL root и запускает такую нужную штуку как mysql_secure_installation, для которой этот пароль и нужен. Там надо поменять пароль root, убрать анонимный доступ и удаленный доступ для root, удалить демо-базы, ну в общем — стандартная процедура от MySQL, описанная в документации.
Все, готово! В зависимости от скорости работы серверов и сети вся эта история на круг занимает от семи до пятнадцати минут и почти полностью избавляет от геморроя.
Оттестировано на серверах на SimpleCloud или vScale. Должно также работать на любых «базовых» сборках Centos7, возможно — Centos7, а так же на всех ветвях RHEL, которые для управления репозиторием используют yum.
Enjoy! С вопросами, комментариями и предложениями — пишите, звоните, стучитесь в чаты!