Автоматическая Установка Wordpress На Vps С Помощью Ansible

Добрый день, Хабр.

Не так давно я начал разбираться в замечательном инструменте для любого DevOps — Ansible. Сегодня я хочу представить на ваш взыскательный суд небольшую вводную статью об использовании этого во многом замечательного инструмента.

Итак, начнем.



Что такое Анзибль

Ansible — это инструмент для автоматизации задач системного администратора и многого другого.

Другими словами, это та вещь, которая позволяет автоматически настраивать серверы в пакетном режиме.

Кто-то скажет, что он не нужен, потому что.

есть Шеф, Марионетка и т. д. Я абсолютно согласен с этими людьми.

Если вы можете использовать эти инструменты, отлично.

Эту статью я пишу для тех, кто хочет немного понять, как работает Ansible и как с его помощью можно многое автоматизировать.

Если вы раньше вообще не сталкивались с Ansible, советую прочитать статья компании Селектель .

Отличная статья.



Максимальная автоматизация

Давайте определимся, что нам нужно для запуска Wordpress на VPS-сервере с установленной Ubuntu:
  • Нгинкс
  • MySQL
  • PHP5
  • Memcached для использования плагина W3Total Cache
  • Вордпресс
Именно в таком порядке мы будем писать роли для настройки сервера.

Структура каталогов для нашей задачи будет такой:

Автоматическая установка WordPress на VPS с помощью Ansible



Нгинкс
В каталоге roles/nginx/tasks создайте main.yml со следующим содержимым:
  
  
  
  
  
  
  
  
  
  
   

- 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

Все, что начинается с новой строки, например «- name», является отдельной задачей для Ansible. Давайте посмотрим, что написано пошагово:
  1. Добавьте репозиторий nginx (ppa:nginx/stable).

  2. Установите nginx-extras (При необходимости содержит модуль SPDY и его можно включить в конфиге)
  3. Удалить символическую ссылку на конфигурацию по умолчанию
В каталоге roles/nginx/handlers создайте файл main.yml со следующим содержимым:

- 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

Теперь шаг за шагом:

  1. Добавление ключа репозитория
  2. Добавляем сам репозиторий и проверяем, что файл /etc/apt/sources.list.d/percona.list создан
  3. Устанавливаем три пакета:
    • перкона-сервер-сервер-5.5
    • перкона-сервер-клиент-5.5
    • python-mysqldb (необходим для управления сервером MySQL из Ansible)
  4. Измените пароль root на тот, который указан в переменных (см.

    ниже)

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

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 }}"

Теперь пройдемся по каждому пункту:

  1. Создаем базу данных, указав параметры подключения (рут логин и пароль)
  2. Создаем пользователя базы данных с паролем, указывая его права на вновь созданную базу данных
  3. Создаем конфигурацию сервера в Nginx по заранее подготовленному шаблону (см.

    ниже) и отправляем сигнал на перезапуск службы Nginx.

  4. Активируем сервер в Nginx, создав символическую ссылку
  5. Загрузите версию Wordpress, указанную в переменных.

  6. Создание каталога для Wordpress
  7. Распакуйте скачанный архив и установите необходимые права на файлы и каталоги.

Теперь шаблон конфигурации сервера Nginx — roles/wordpress/templates/wordpress.conf:

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
После окончания работы вы можете зайти на сервер по HTTP и настроить работу Wordpress. Готовый рецепт можно перенести на github .

Надеюсь, это поможет вам немного автоматизировать свою рутину на работе (и дома).

Спасибо за прочтение.

В опросе могут участвовать только зарегистрированные пользователи.

Войти , Пожалуйста.

Что вы используете для автоматизации рутинных задач по настройке сервера? 47,2% Ansible 59 14,4% Chef 18 12% Puppet 15 32,8% Самописные скрипты 41 12% Другое (уточните в комментариях) 15 Проголосовали 125 пользователей.

56 пользователей воздержались.

Теги: #ansible #wordpress #vps #системное администрирование #wordpress

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.