Что у вас уже должно быть, чтобы можно было продолжить по этой статье:
- SSH доступ на какой-нибудь сервер с Debian или Ubuntu,
- доступ к учётки суперпользователя на нём — или через sudo, или напрямую SSH в root,
- DNS имя для сайта, указывающее на ip-адреса сервера (IPv4 и/или IPv6).
Как быстро развурнуть web-сервер на Ubuntu/Debian с Nginx + Apache + MySQL + Wordpress с помощью Ansible.
Логинимся на сервер по SSH, желательно не от суперпользователя root.
sudo apt-get update
sudo apt-get --no-install-recommends install software-properties-common # Для add-apt-repository
sudo add-apt-repository ppa:ansible/ansible-2.3
sudo apt-get update
sudo apt-get install ansible
sudo apt-get --no-install-recommends install python-minimal python-aptНастройте ~/.ssh/config, чтобы был доступ к серверу просто по команде ssh имя_сервера, например:
Host srv01.example.com
Port 2222
User myuser
Проверьте доступ:
ssh srv01.example.com sudo whoamiВывод должен быть:
root
mkdir -p ~/git
cd ~/git
git clone git@github.com:vazhnov/ansible_webserver.git
cd ~/git/ansible_webserver/Создание учётных записей с паролями не поддерживается, используйте SSH ключи и беспарольный sudo.
- Создайте файл
group_vars/all/users.ymlприблизительно такого содержания:
# File: group_vars/all/users.yml
---
users:
john_scott:
comment: 'John Scott'
groups: 'adm,sudo,no_passwd_sudo'
first_last:
comment: 'First Last'
groups: 'adm,sudo,no_passwd_sudo'- Создайте файлы вида:
roles/user_access/files/replace_files/john_scott/.ssh/authorized_keysи т.п. с публичными ключами SSH.
- В файл
inventory/production/staticзапишите имя сервера, которое вы указали в~/.ssh/config. - В директории
host_varsсоздайте папку с таким же именем сервера; - В этой папке создайте файл
roles.ymlсо списком ролей для сервера:
---
roles:
- user_access
- nginx
- apache
- php
- mysql- сгенерируйте 16-символьный пароль для БД:
pwgen -s 16 1- в недавно созданной директории вида
host_vars/имя_сервера/создайте файл со спискомall_websites.yml, пропишите в нём ваш DNS сайта и сгенерированный пароль:
---
all_websites:
wordpress.example.com:
apache:
template: lamp
nginx:
template: lamp
root_options:
- client_max_body_size 32m
# For MySQL, used only first 16 symbols of 'user'
user: wordpressexamplecom
db_type: mysql
mysql:
password: j3HJywe4Xutx3FudcXd1at
serveralias:
- www.wordpress.example.comВ первый раз, чтобы установить Python:
ansible-playbook -i inventory/production pre_install.yml --limit=srv01.example.comЕсли для sudo нужен пароль, добавьте опцию --ask-sudo-pass.
Применяем роли:
ansible-playbook -i inventory/production websites_roles.yml --limit=srv01.example.com