Добрый день, Хабр.
Не так давно я начал разбираться в замечательном инструменте для любого DevOps — Ansible. Сегодня я хочу представить на ваш взыскательный суд небольшую вводную статью об использовании этого во многом замечательного инструмента.
Итак, начнем.
Что такое Анзибль
Ansible — это инструмент для автоматизации задач системного администратора и многого другого.Другими словами, это та вещь, которая позволяет автоматически настраивать серверы в пакетном режиме.
Кто-то скажет, что он не нужен, потому что.
есть Шеф, Марионетка и т. д. Я абсолютно согласен с этими людьми.
Если вы можете использовать эти инструменты, отлично.
Эту статью я пишу для тех, кто хочет немного понять, как работает Ansible и как с его помощью можно многое автоматизировать.
Если вы раньше вообще не сталкивались с Ansible, советую прочитать статья компании Селектель .
Отличная статья.
Максимальная автоматизация
Давайте определимся, что нам нужно для запуска Wordpress на VPS-сервере с установленной Ubuntu:- Нгинкс
- MySQL
- PHP5
- Memcached для использования плагина W3Total Cache
- Вордпресс
Структура каталогов для нашей задачи будет такой:
Нгинкс
В каталоге roles/nginx/tasks создайте main.yml со следующим содержимым:Все, что начинается с новой строки, например «- name», является отдельной задачей для Ansible. Давайте посмотрим, что написано пошагово:- name: Add nginx repository apt_repository: repo='ppa:nginx/stable' - name: Install nginx action: apt pkg=nginx-extras state=installed update_cache=true - name: Disable default site file: path: /etc/nginx/sites-enabled/default state: absent
- Добавьте репозиторий nginx (ppa:nginx/stable).
- Установите nginx-extras (При необходимости содержит модуль SPDY и его можно включить в конфиге)
- Удалить символическую ссылку на конфигурацию по умолчанию
- name: restart nginx
service:
name: nginx
state: restarted
Это описание сервиса перезапуска Nginx. Он понадобится нам после установки конфига для нашего Wordpress. Это все, что касается Nginx. Два простых файла позволят нам установить репозиторий в систему, установить веб-сервер, удалить его настройки по умолчанию и определить службу для его перезагрузки.
Давайте двигаться дальше.
MySQL
Я привык устанавливать сервер Percona MySQL. Это лучше или хуже? Спорить можно долго.Я к этому привык и пользуюсь.
Принцип абсолютно тот же.
Файл roles/percona-mysql/tasks/main.yml: - name: Add GPG key for repository
command: apt-key adv --keyserver keyserver.ubuntu.com --recv CD2EFD2A
- name: Add Percona repository
shell:
echo "deb http://repo.percona.com/apt {{ ansible_lsb['codename'] }} main" | tee /etc/apt/sources.list.d/percona.list
creates=/etc/apt/sources.list.d/percona.list
- name: Install Percona MySQL server
apt:
pkg: "{{ item }}"
update_cache: true
with_items:
- percona-server-server-5.5
- percona-server-client-5.5
- python-mysqldb
- name: Change root password (fail is not a problem)
mysql_user:
name: root
password: "{{ mysql_root_password}}"
ignore_errors: yes
Теперь шаг за шагом:
- Добавление ключа репозитория
- Добавляем сам репозиторий и проверяем, что файл /etc/apt/sources.list.d/percona.list создан
- Устанавливаем три пакета:
- перкона-сервер-сервер-5.5
- перкона-сервер-клиент-5.5
- python-mysqldb (необходим для управления сервером MySQL из Ansible)
- Измените пароль root на тот, который указан в переменных (см.
ниже)
PHP5
Поскольку мы не используем Apache, мы будем использовать php с php-fpm. Для этого опишем сервис php5-fpm в файле roles/php5/handlers/main.yml: - name: restart php5-fpm
service:
name: php5-fpm
state: restarted
Мы вызовем его после настройки php5-fpm для перезапуска демона.
Содержимое roles/php5/tasks/main.yml: - name: install php5
apt: pkg={{ item }}
with_items:
- php5
- php5-cgi
- php5-fpm
- php5-memcache
- php5-memcached
- php5-mcrypt
- php5-mysql
- php5-gd
- php5-curl
- php5-xmlrpc
- name: change listen socket
lineinfile:
dest: '/etc/php5/fpm/pool.d/www.conf'
insertafter: 'listen = 127.0.0.1:9000'
line: 'listen = /var/run/fpm.socket'
notify: restart php5-fpm
Первым шагом является установка необходимых пакетов.
Здесь все просто.
Но второй шаг более интересен.
Давайте посмотрим поближе.
В Nginx мы будем использовать связь с php5-fmp через сокет unix. Для этого нам нужно указать в конфиге www пула демона php5-fpm, что он слушает сокет по нужному нам пути.
Модуль lineinfile позволяет нам сделать это:
- «dest» — это путь, по которому необходимо внести изменения.
- «insertafter» — найти в указанном файле строку «listen=127.0.0.1:9000» и вставить после нее то, что указано в «line»
- «notify» — отправить уведомление службе «restart php5-fpm» (именно для этого и понадобилось описание службы php5-fpm)
Мемкеш
С этим сервисом все очень просто.Нужно его установить и всё.
Содержимое roles/memcached/tasks/main.yml: - name: install memcached server
apt:
pkg: memcached
Вордпресс
Здесь мы автоматически установим Wordpress, создадим для него базу данных и конфигурацию nginx. Почему здесь? Это просто.Вы можете взять любую роль и использовать ее в других ваших ansible-проектах.
Или создайте другую роль и разверните не WordPress, а свой проект рядом с WordPress. Те.
это сделано для банального удобства.
Итак, роли/wordpress/tasks/main.yml: - name: creating database
mysql_db:
name: "{{ db_name }}"
state: "present"
login_user: "root"
login_password: "{{ mysql_root_password }}"
- name: creating database user
mysql_user:
name: "{{ db_user }}"
password: "{{ db_password }}"
priv: "{{ db_name }}.
*:ALL"
state: "present"
login_user: "root"
login_password: "{{ mysql_root_password }}"
- name: install nginx configuration
template:
src: wordpress.conf
dest: /etc/nginx/sites-available/wordpress.conf
notify: restart nginx
- name: activate site configuration
file:
src: '/etc/nginx/sites-available/wordpress.conf'
dest: '/etc/nginx/sites-enabled/wordpress.conf'
state: 'link'
- name: download WordPress
get_url:
url: "{{ download_url }}"
dest: "/tmp/latest.tar.gz"
- name: creating directory for WordPress
file:
path: "{{ wpdirectory }}"
state: "directory"
owner: "www-data"
group: "www-data"
- name: unpack WordPress installation
shell: "tar xvfz /tmp/latest.tar.gz -C {{ wpdirectory }} && chown -R www-data:www-data {{ wpdirectory }}"
Теперь пройдемся по каждому пункту:
- Создаем базу данных, указав параметры подключения (рут логин и пароль)
- Создаем пользователя базы данных с паролем, указывая его права на вновь созданную базу данных
- Создаем конфигурацию сервера в Nginx по заранее подготовленному шаблону (см.
ниже) и отправляем сигнал на перезапуск службы Nginx.
- Активируем сервер в Nginx, создав символическую ссылку
- Загрузите версию Wordpress, указанную в переменных.
- Создание каталога для Wordpress
- Распакуйте скачанный архив и установите необходимые права на файлы и каталоги.
server {
listen 80 default_server;
root {{ wpdirectory }}/wordpress;
index index.php index.html index.htm;
server_name {{ domain }};
location / {
try_files $uri $uri/ /index.phpЭq=$uri&$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.
php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock ;
fastcgi_index index.php;
include fastcgi_params;
}
}
server {
listen 80;
server_name www.{{ domain }};
location / {
return 301 http://{{ domain }};
}
}
Описание принципов настройки Nginx — тема для отдельной статьи, а то и не одной.
Оставим этот вопрос для домашнего задания.
Собираем и начинаем установку
Чтобы Ansible знал, что и как запускать, нам нужно написать плейбук wordpress.yml: - hosts: appservers-php
sudo: yes
vars:
- mysql_root_password: "SuperP@S$w0rd"
- domain: "example.com"
- download_url: " http://wordpress.org/latest.tar.gz "
- wpdirectory: "/var/www"
- db_name: "wordpress"
- db_user: "wordpress"
- db_password: "wordpress"
roles:
- { role: nginx }
- { role: percona-mysql }
- { role: memcached }
- { role: php5 }
- { role: wordpress }
Этот файл сообщает Ansible, что выполнять, на каких серверах, в какой последовательности и с какими правами.
- хосты — список хостов из файла hosts (см.
ниже), над которыми должны быть произведены все действия;
- sudo — выполнять ли все действия под sudo;
- vars — переменные, которые используются в ролях:
- mysql_root_password — какой пароль установить для пользователя root в MySQL
- домен — домен сайта, который указан в конфигурации nginx
- wpdirectory — в какую директорию устанавливать Wordpress
- db_* — соответствующие параметры для MySQL
- роли - выполняемые задачи (роли)
[appservers-php]
example.com ansible_ssh_host=10.0.0.2 ansible_ssh_user=ubuntu
Блок в первой строке относится к списку хостов, указанному в wordress.yml. Тогда каждый сервер фактически начинается с новой строки.
Домен сервера указан первым.
Второй указывает IP-адрес сервера, куда Ansible должен заходить по ssh. Этот параметр является необязательным, если ваш домен уже настроен на нужном сервере.
Третий параметр — это имя пользователя, под которым Ansible будет входить на сервер по ssh.
Теперь можно начать установку: ansible-playbook -i hosts wordpress.yml -kK
- k - запрос пароля ssh.
- K — запросить пароль sudo
Надеюсь, это поможет вам немного автоматизировать свою рутину на работе (и дома).
Спасибо за прочтение.
В опросе могут участвовать только зарегистрированные пользователи.
Войти , Пожалуйста.
Что вы используете для автоматизации рутинных задач по настройке сервера? 47,2% Ansible 59 14,4% Chef 18 12% Puppet 15 32,8% Самописные скрипты 41 12% Другое (уточните в комментариях) 15 Проголосовали 125 пользователей.
56 пользователей воздержались.
Теги: #ansible #wordpress #vps #системное администрирование #wordpress
-
Метонимия
19 Oct, 24 -
Как Работает Eigrp
19 Oct, 24 -
Смо – Изобретение Древних Римлян
19 Oct, 24 -
Как Сократить Расходы На Автотесты
19 Oct, 24