如何自动在Ubuntu 14.04安装WordPress使用Ansible

介绍

Ansible是一种简单,无代理的方式来自动化您的基础设施。 如果你发现自己重复部署WordPress,Ansible可以节省你很多时间。

使用几行YAML(一种直接标记语言),我们将在一个新鲜的Ubuntu 14.04服务器上自动执行通常乏味的设置WordPress的过程。 我们将按照规定的程序或多或少安装WordPress 本教程中 ,可自动。

我们将使用两个服务器:运行Ansible的构建服务器,以及我们将使用Ansible安装WordPress的目标服务器。

先决条件

为了完成本教程,您需要进行以下设置:

  • 运行Ubuntu 14.04的构建服务器。 我们将在服务器(在本教程作为构建服务器的简称)上安装Ansible。 我们将登录到此服务器,本教程的所有文件和命令都将在此服务器上运行
  • 运行Ubuntu 14.04的目标服务器。 我们将在服务器(在本教程为WordPress的服务器简称)上安装WordPress(通过Ansible)
  • Sudo非root用户配置的两台服务器
  • 构建服务器Sudo用户的SSH密钥添加到你的WordPress服务器的Sudo用户的authorized_keys中。 您可以通过以下设置这 。 您应该运行构建服务器的教程和上传关键看你的WordPress服务器

(可选)无密码sudo访问

它是速度较快,不太安全的使用你的WordPress服务器上的密码的sudo访问。

为了让我们的用户SudoWordPress服务器上这privelege,我们需要编辑sudoers文件。 键入visudo编辑sudoers文件:

visudo

在结尾添加此行:

sammy ALL=(ALL) NOPASSWD: ALL

这必须在该文件中的最后一行 重要的是,这是最后一行,否则它将被覆盖。

注意:使用始终编辑sudoers文件visudo命令。 这将在保存文件之前验证您的更改 - 这可以避免您意外地将自己从机器完全锁定。

一旦你做到了这一点,你应该能够在不提供密码来执行WordPress的服务器上执行以下命令:

sudo echo "Hello"

现在,在本教程中,你可以运行ansible-playbook没有命令-K标志,所以你不必手动输入sudo的密码。

ansible-playbook playbook.yml -i hosts -u sammy

第1步 - 安装Ansible

在本节中,我们将构建的服务器上安装Ansible。

SSH到您的构建服务器 ,并运行此命令安装Ansible:

sudo apt-get install ansible -y 

您可以通过运行以下命令来确保安装了Ansible:

ansible --version

你应该看到类似的输出:

Outputansible 1.5.4

第2步 - 设置文件结构

现在我们已经安装了Ansible,让我们准备Ansible playbook的文件结构。

为我们的剧本创建目录。

cd ~
mkdir wordpress-ansible && cd wordpress-ansible

cd到该目录,并创建两个文件:一个叫playbook.yml (这是我们会写信给安装WordPress的命令)和另一种称为hosts (这告诉Ansible该服务器上运行命令):

touch playbook.yml
touch hosts

最好的做法是将我们的剧本分解成角色。 您可以将角色视为可重用的模块。 对于这个项目,我们将创建四个角色:

  • 服务器
  • php
  • mysql
  • wordpress

从项目的根文件夹( ~/wordpress-ansible ),创建一个目录名为rolescd进去:

mkdir roles && cd roles

我们可以称之为Ansible工具引导我们的角色ansible-galaxy 为此,我们要创建的每个角色,我们将运行ansible-galaxy init

ansible-galaxy init server 
ansible-galaxy init php 
ansible-galaxy init mysql
ansible-galaxy init wordpress

你会注意到,这为我们的每个角色创建了一个完整的文件结构。 这是根据Ansible的最佳做法。 在大多数情况下,我们将关注每一个角色的tasks/main.yml文件。

在这一点上,我们应该有以下文件结构:

[.]
|_ playbook.yml
|_ hosts
|_ [roles]
      |_ [server]
            |_ ...
      |_ [php]
            |_ ...
      |_ [mysql]
            |_ ...
      |_ [wordpress]
            |_ ...                                    

第3步 - 编写手册

在本节中,我们将编写命令在我们的远程服务器上安装WordPress。

库存(主机文件)

Ansible库存通知Ansible我们有什么服务器,我们要安装WordPress的。 我们可以为我们的库存文件(定义的服务器或服务器组运行我们的剧本hosts )。 我们的库存很简单。

编辑hosts

nano ~/wordpress-ansible/hosts

添加行[wordpress] ,并在它下面,你的WordPress服务器的IP地址:

主机
[wordpress]
wordpress_server_ip

你可以把多个不同的IP地址的下[wordpress]组。 这会导致这些命令在这里列出的所有服务器上运行,只要你有机会建立在所有服务器上。 这将允许您同时在多个不同的服务器上安装WordPress。

手册

我们可以想出一个playbook作为我们的WordPress应用程序的定义。 我们的剧本将结合我们创建的角色来配置一个有用的应用程序(在这种情况下是一个WordPress网站)。

编辑剧本文件:

nano ~/wordpress-ansible/playbook.yml

添加这些内容,它告诉Ansible哪些主机上运行(该角色wordpress的那些hosts文件),并运行其中的角色:

playbook.yml
- hosts: wordpress

  roles:
    - server
    - php
    - mysql
    - wordpress

移至您的剧本目录:

cd ~/wordpress-ansible/

让我们确保我们从构建服务器WordPress的服务器的作品通过运行剧本基本连接。 它不会做任何事情; 它只是测试连接:

ansible-playbook playbook.yml -i hosts -u sammy -K

提示时WordPress服务器上你的sudo用户输入sudo的密码。

你应该看到类似的输出:

Outputansible-playbook playbook.yml -i hosts -u sammy -K

PLAY [wordpress] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [188.166.68.134]

PLAY RECAP ******************************************************************** 
188.166.68.134             : ok=1    changed=0    unreachable=0    failed=0 

这表明我们能够连接到服务器。 但是,我们还没有定义任何剧本还没有,所以什么也没有我们的WordPress的服务器上执行。 让我们通过填写我们的四个角色的细节来解决这个问题。

如果这不是成功的,仔细检查,你可以从构建服务器WordPress的服务器使用SSH密钥SSH协议。

第3步 - 创建角色

服务器

第一件事; 让我们设置我们的服务器。 为此,我们将被编辑server角色。

服务器角色将在目标服务器上安装我们所需的所有软件。 编辑此文件:

nano roles/server/tasks/main.yml`

添加以下内容; 确保有只有一个行--- (应该有一个有默认情况下):

roles / server / tasks / main.yml
---
- name: Update apt cache
  apt: update_cache=yes cache_valid_time=3600
  sudo: yes

- name: Install required software
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
    - apache2
    - mysql-server
    - php5-mysql
    - php5
    - libapache2-mod-php5
    - php5-mcrypt
    - python-mysqldb

这执行以下操作:

  • 更新的apt-缓存( apt-get update
  • apt-get install Apache,MySQL和PHP,以及相关的软件

如果你有兴趣,我们正在安装什么样的细节,你可以看看本教程如何手动在Ubuntu 14.04安装LAMP

我们现在可以运行我们的剧本:

ansible-playbook playbook.yml -i hosts -u sammy -K

你应该看到这样的输出:

Outputansible-playbook playbook.yml -i hosts -u sammy -K

PLAY [wordpress] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [188.166.68.134]

TASK: [server | Update apt cache] ********************************************* 
ok: [188.166.68.134]

TASK: [server | Install required software] ************************************ 
changed: [188.166.68.134] => (item=apache2,mysql-server,php5-mysql,php5,libapache2-mod-php5,php5-mcrypt,python-mysqldb)

PLAY RECAP ******************************************************************** 
188.166.68.134             : ok=3    changed=1    unreachable=0    failed=0  

运行此之后,你应该能够访问默认的Apache网页http:// wordpress_server_ip / 真棒。 Apache是目前安装和WordPress的服务器上运行。

如果构建在点无限期挂起TASK: [server | Update apt cache] TASK: [server | Update apt cache] ,这可能表明缺乏目标服务器上的权限。 确保sudo的访问WordPress服务器上正确配置。

PHP

让我们整理出我们的PHP需求。 我们将在PHP角色中这样做。 编辑PHP的主要任务文件:

nano roles/php/tasks/main.yml

添加以下(同样, ---线应该已经在那里):

roles / php / tasks / main.yml
---
- name: Install php extensions
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
    - php5-gd 
    - libssh2-php

这将安装所需的PHP扩展。

MySQL

我们还需要为我们的WordPress网站设置一个MySQL数据库。 我们将在执行此操作mysql作用。

我们将需要一些变量为这一个。 对于一个角色,你可以在任何变量指定默认值defaults/main.yml文件。

nano roles/mysql/defaults/main.yml

添加您的数据库名称,数据库用户名和数据库密码(您要创建的),按此顺序。 请确保你选择一个安全的wp_db_password

roles / mysql / defaults / main.yml
---
wp_mysql_db: wordpress
wp_mysql_user: wordpress
wp_mysql_password: wp_db_password

添加任务以创建我们的数据库和用户来访问它。

nano roles/mysql/tasks/main.yml

添加以下内容:

roles / mysql / tasks / main.yml
---
- name: Create mysql database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create mysql user
  mysql_user: 
    name={{ wp_mysql_user }} 
    password={{ wp_mysql_password }} 
    priv=*.*:ALL

此角色执行以下操作:

  • 创建MySQL数据库
  • 创建MySQL用户
  • 让该用户访问我们的数据库

变量从我们早期的文件中自动提取,因此您不必在此处更改任何内容。

您可能有兴趣加密您的密码。 Ansible提供ansible-vault作为该实用程序,而是一个完整的讨论ansible-vault超出了本教程的范围。

WordPress

现在,我们一直在等待... ... WordPress!

随着服务器要求的安装,我们可以设置WordPress。 我们将编辑wordpress作用。

我们增加了一些不同的任务给roles/wordpress/tasks/main.yml文件,所以把它打开本节。

nano roles/wordpress/tasks/main.yml

首先,我们需要到WordPress下载到/tmp目录下(安全意识你们当中会发现,我们已经禁用证书验证,这将中断下载):

roles / wordpress / tasks / main.yml
---
- name: Download WordPress  get_url: 
    url=https://wordpress.org/latest.tar.gz 
    dest=/tmp/wordpress.tar.gz
    validate_certs=no 
    sudo: yes

下载完成后,我们提取gzip文件,以/var/www ,即Apache使用用于存储网页内容的位置:

roles / wordpress / tasks / main.yml
- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no 
  sudo: yes

提取文件后,让我们更新Apache的默认站点文档根以指向我们的WordPress站点:

roles / wordpress / tasks / main.yml
- name: Update default Apache site
  sudo: yes
  lineinfile: 
    dest=/etc/apache2/sites-enabled/000-default.conf 
    regexp="(.)+DocumentRoot /var/www/html"
    line="DocumentRoot /var/www/wordpress"
  notify:
    - restart apache
  sudo: yes

这将更新DocumentRoot为Apache的默认站点为指向,我们在下载WordPress的文件/var/www/wordpress

在这里你会发现,我们增加了一个notify块。 这是当你需要执行的任务,如重新启动服务后,任务成功完成使用。 notify ,如果我们的任务就是改变了处理器将只通知

我们需要增加我们的处理程序restart apache 保存你所拥有的,到目前为止,开放的roles/wordpress/handlers/main.yml编辑:

nano roles/wordpress/handlers/main.yml

添加这些内容:

roles / wordpress / handlers / main.yml
---
- name: restart apache
  service: name=apache2 state=restarted
  sudo: yes      

当一个指定的任务该处理器将被称为notify: restart apache被改变,从而导致服务器重新启动Apache。

配置WordPress

返回roles/wordpress/tasks/main.yml

最后,我们需要为我们的WordPress网站做一些配置:

首先,我们复制示例配置文件:

roles / wordpress / tasks / main.yml
- name: Copy sample config file
  command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
  sudo: yes

更新此文件中的一些常量以匹配我们的数据库信息:

roles / wordpress / tasks / main.yml
- name: Update WordPress config file
  lineinfile:
    dest=/var/www/wordpress/wp-config.php
    regexp="{{ item.regexp }}"
    line="{{ item.line }}"
  with_items:
    - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}        
    - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}        
    - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
  sudo: yes   

此任务将找到包含行: DB_NAMEDB_USERDB_PASSWORD在我们的配置文件,并与我们的剧本中的变量替换它们。

成功完成上述步骤后,我们的wordpress角色将包含两个感兴趣的文件。

这里是WordPress的完整任务文件:

roles / wordpress / tasks / main.yml
---
- name: Download WordPress  get_url: 
    url=https://wordpress.org/latest.tar.gz 
    dest=/tmp/wordpress.tar.gz
    validate_certs=no

- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no
  sudo: yes

- name: Update default Apache site
  sudo: yes
  lineinfile: 
    dest=/etc/apache2/sites-enabled/000-default.conf 
    regexp="(.)+DocumentRoot /var/www/html"
    line="DocumentRoot /var/www/wordpress"
  notify:
    - restart apache

- name: Copy sample config file
  command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php
  sudo: yes

- name: Update WordPress config file
  lineinfile:
    dest=/var/www/wordpress/wp-config.php
    regexp="{{ item.regexp }}"
    line="{{ item.line }}"
  with_items:
    - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}        
    - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}        
    - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}
  sudo: yes

这里是重新启动Apache的文件(您应该已经创建):

roles / wordpress / handlers / main.yml
---
- name: restart apache
  service: name=apache2 state=restarted
  sudo: yes      

我们完成了! 最后一次运行手册安装和配置WordPress:

ansible-playbook playbook.yml -i hosts -u sammy -K

你应该能够在网上查看你的WordPress网站: http://your_server_ip

WordPress安装表单

您可以从这里完成手动WordPress网站设置。

结论

恭喜! 您现在可以使用一个命令在任何Ubuntu 14.04服务器上安装WordPress站点:

ansible-playbook playbook.yml -i hosts -u sammy -K

所有你需要做的就是增加你的目标服务器的IP地址到你的hosts文件,并确保您的权限设置是否正确。

下一步

这是一个非常快速的介绍,让你开始使用Ansible和WordPress。 您可能有兴趣了解以下改进:

  • 探索Ansible Galaxy,了解如何在银河上主持您自己的角色
  • 自动化设置过程,以便不需要手动配置您的WordPress站点
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏