Данный playbook для Ansible устанавливает на удаленный сервер Nginx, PHP и SSL сертификат Let's Encrypt.
Требования для запуска:
- Локальная или удаленная машина на Ubuntu, с которой будет производиться настройка удаленного сервера.
- Установленный на машине, с которой идет настройка, Ansible и несколько пакетов из Ansible Galaxy для Nginx, PHP, Cerbot.
- Удаленный сервер на Ubuntu, который будет настраиваться.
- Сгенерированные SSH ключи для пользователя root и www.
- Доступ к DNS панели и собственный домен, для настройки SSL сертификата.
Арендовать любой сервер на Ubuntu (достаточно 10 Гб диск, 1Гб оперативной памяти, и 1-ядерный процессор 2Ггц).
Купить домен (если необходим), для настройки SSL сертификата. Также необходимо иметь доступ к изменению DNS записей (обычно есть в веб-панели хостера), чтобы прописать ip своего сервера.
Можно установить Ansible на локальную машину с Ubuntu или другим дистрибутивом, который поддерживает Ansible. Также можно все действия проводить в Ubuntu из WSL2 для Windows 10.
- Открываем терминал, переходим в папку с SSH ключами:
cd ~/.ssh/
- Смотрим, что есть в папке, чтобы не перезаписать уже существующие ключи:
ls -la
- Генерируем ключ для пользователя root с удаленного сервера:
ssh-keygen
- Далее нас спрашивают, какое имя файла ключа указать, по умолчанию ставится всегда id_rsa, напишем свое собственное имя, так как ключей может понадобиться больше чем 1. Вы можете указать любое другое имя, которого нет в папке с ключами:
www_root_key
-
После нескольких вопросов (их можно пропустить, либо можете задать свои параметры, если это нужно), будет сгенерировано два ключа:
www_root_key
иwww_root_key.pub
, приватный и публичный соответственно. -
Далее нужно добавить соответствие ключ-пользователь-хост, чтобы SSH понимал, какой ключ использовать для подключения к нужному серверу. Для этого смотрим, есть ли в папке файл
config
, если есть, открываем его с помощью редактора nano (вся информация по нему есть в сети):
nano config
- Если файл уже был, вы можете увидеть там записи подобного плана (все параметры и их назначение можно найти в сети, здесь один из вариантов настройки, если у вас стандартный порт подключения по SSH 22 и тд.):
Host YOUR.OWN.IP.ADDRESS
- указываете ip адрес вашего сервера, куда будете подключаться
HostName YOUR.OWN.IP.ADDRESS
- тоже самое
IdentityFile ~/.ssh/www_root_key
- файл приватного ключа для пользователя root
IdentitiesOnly yes
- использование файлов идентификации только из конфига
User root
- под каким пользователем осуществлять подключение
- Если файла не было, создаем его и уже потом открываем через nano:
touch config
-
Создаем такую же конфигурацию для вашего собственного сервера и SSH ключа, просто добавить запись в файл config ниже существующих через строку.
-
Сохраняем файл config (
ctrl+O -> Enter -> ctrl+X
). -
Точно также как для root создаем файлы ключей для пользователя www и добавляем их в config, указывая
User www
. -
Копируем публичный ключ на сервер для пользователя root (для пользователя www ключ будет копироваться с помощью Ansible):
ssh-copy-id -i ~/.ssh/www_root_key.pub root@YOUR.OWN.IP.ADDRESS
-
Появится запрос пароля для root, введите его.
-
Теперь и вы и Ansible сможет подключаться к серверу по SSH ключу. Чтобы проверить работоспособность ключа, выполните команду:
ssh root@YOUR.OWN.IP.ADDRESS
Если запроса пароля не было и вы вошли на удаленный сервер под пользователем root, то все работает верно.
- Выйдите с удаленного сервера:
exit
Теперь необходимо установить Ansible на локальную машину (важно для Ubuntu версии старше, чем 20.04, возможно потребуется предварительно добавить репозиторий с Ansible):
sudo apt install ansible
- Клонируйте репозиторий с данным playbook в локальную папку ansible:
git clone git@github.com:quoterbox/ansible-start-lemp.git ansible
- Перейдите в папку ansible, отсюда вы чуть позже будете запускать playbook для настройки сервера:
cd ansible/
- Установить нужные вам пакеты из Ansible Galaxy, например, необходимые для этого playbook:
ansible-galaxy install geerlingguy.nginx geerlingguy.php geerlingguy.certbot
- Проверьте работоспособность ansible:
ansible --version
-
Желательно открыть весь код из репозитория в любой IDE (например, PyCharm, PHPStorm и др.).
-
Переименовать файл
hosts.ini.example
вhosts.ini
и вписать туда ip адрес удаленного сервера. -
ansible.cfg
- указать путь к файлу с хостами hosts.ini -
playbook.yml
- раскомментировать/закомментировать ненужные таски и роли -
group_vars/main.yml
- указать домен, пользователя www и путь к его ssh ключам (предварительно их нужно добавить как и для root пользователя), пользователя root и путь к его ключам -
vars/main.yml
- указать нужную версию php, если она отличается от той, что там указана, и прочие настройки для php, nginx и mysql. -
Проверить удается ли пользователю ansible указанному в group_vars/main подключиться с ключом к серверу используя
hosts.ini
файл:
ansible all -m ping
Ответом должно быть pong
с дополнительной meta информацией.
Теперь у вас должны быть настроены ключи доступа к серверу, установлен Ansible и несколько необходимых пакетов из Ansible Galaxy.
Запускаем playbook:
ansible-playbook playbook.yml
Должны пройти все шаги установок без ошибок, ошибки подсветятся красным.
Данным playbook из репозитория будет настроена работа с папкой:
/var/www/ВАШ_ДОМЕН/src/public
, зависит от того, что указано в root директории для nginx в файле /vars/main.yml
в переменных для playbook.
Саму папку домена вы можете создать сами внутри папки /var/www/
. Для проверки работоспособности сервера, вы можете залить файл index.php с содержимым:
<?php phpinfo();
Теперь папка сайта должна быть доступна по адресу http(s)://ВАШ_ДОМЕН