AnsibleでNginx+PHP7+mariadb+Let’s encrypt(certbot)+wordpressでwordpress環境を構築

Ansibleとは

多数のサーバーや複数のクラウドインフラを統一的に制御できる構成管理ツールです。

構成管理ツールとしてAnsibleを選ぶべき理由-thinkit.co.jp

管理構成ツールは色々ありますが、今回はAnsibleを使ってみます。

Pythonで書かれたソフトウェアですが、設定はYAMLファイルに書くので、Pythonを覚える必要はありません。また、サーバに何かソフトウェアをインストール必要がなく、SSH接続ができれば使うことができるため、ConoHaでVPSを作成した後にすぐ使うことができます。

構成管理ツールAnsibleを使ってみよう-conoha.jp

管理対象のサーバーの環境

管理対象のサーバのシェルは(centos)$と、ローカルの環境は(ubuntu)$と表します。

前提として管理対象のサーバはドメインが割り当てられていて、外部からアクセスできるものとします。

(centos)$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

今回対象のサーバーに導入するもの

  • Nginx:1.10.2
  • Let's encrypt(certbot):0.12.0
  • PHP:7.0.17
  • Mariadb:5.5.52

ローカルの環境

(ubuntu)$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

ローカルの環境にインストールするもの

  • Ansible 2.2.2.0

Ansibleのインストール

PPAを追加してインストール

(ubuntu)$ sudo apt-get install software-properties-common
(ubuntu)$ sudo apt-add-repository ppa:ansible/ansible
(ubuntu)$ sudo apt-get update
(ubuntu)$ sudo apt-get install ansible
(ubuntu)$ ansible --version
ansible 2.2.2.0

使ってみる

ホストの定義

操作する対象のホストを定義します。 ini形式でサーバーのグループとホストを定義します。

[グループ名]
  ホスト名

/etc/ansible/hosts

[web-server]
  server01

このホスト名は~/.ssh/configを参照するのでSSHの設定はそっちでやるほうが賢明です。 記述したホスト名で暗号鍵を使ってSSH接続できるようにしときます。

~/.ssh/config

Host server01
  HostName xxx.xxx.xxx.xxx
  Port 22
  User root
  IdentityFile ~/.ssh/server01-key

IdentityFileに接続先の秘密鍵を格納し、対象サーバーの/root/.ssh/authorized_keysに公開鍵を格納する

接続確認

ansibleコマンドの第一引数に先程定義したグループ名を指定します。

オプションで-mでansibleが実行するモジュールを指定します。 今回はpingを実行してみます。

(ubuntu)$ ansible web-server -m ping
xxx.xxx.xxx.xxx | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

SUCCESSと出たら接続成功です。

PlayBookとは

Ansibleにはplaybookと言う仕組みがあります。YAMLフォーマットで書かれたファイルにサーバに対する操作を定義していき、それをansible-playbookコマンドで実行することで、サーバを常にplaybookで定義した状態にしておくことができます。

構成管理ツールAnsibleを使ってみよう-conoha.jp

実際に作ってみたのでGitHubを参考にしてください

https://github.com/AkashiSN/Ansible-Playbook-Nginx-PHP-7-mariadb-certbot-Wordpress

参考にさせていただいたサイト

Ansible 入門-qiita.com

centos7-php70-nginx-mariadb-ansible-github.com

Let's Encrypt の証明書を Ansible と certbot で Nginx にインストール & 自動更新-blog.yuyat.jp

Centos+nginxでLet’s encrypt(certbot)導入と自動更新まで-blog.potproject.net