IT・ビッグデータ徒然ブログ

関西でインフラ、データ基盤系のエンジニアになるため、転職活動中。

ブログ移住計画その5~wp-cliでWordPressをインストール~

前回までは普通に、WordPressのファイルを解凍して、それを置くだけだったのですが、これをするとDBの設定とかはGUI上で設定しないといけないので面倒。。。

なので、これを解決するために、wp-cli(WordPressコマンドラインツール)経由でインストールするように、Ansibleを書き換えます。

qiita.com

設定後のディレクトリ構成はこんな感じ

# tree -F
.
├── group_vars/
│   ├── all.yml
│   └── mysql.yml
├── inventory/
│   └── hosts
├── playbook.yml
├── roles/
│   ├── httpd/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   └── templates/
│   ├── mysql/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   └── tasks/
│   │       └── main.yml
│   ├── php/
│   │   └── tasks/
│   │       └── main.yml
│   ├── wordpress/
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   └── templates/
│   │       └── index.php.j2
│   ├── wordpress.backup/
│   │   ├── tasks/
│   │   │   ├── main.yml
│   │   │   └── main.yml.backup
│   │   └── templates/
│   │       └── wp-config.php.j2
│   └── wp-cli/
│       ├── tasks/
│       │   └── main.yml
│       └── templates/
│           └── wp-config.php.j2
└── templates/

相変わらず無駄なディレクトリがありますが、そこはご愛嬌ということで。。。

Playbookの書き換え

まず、Playbookはwordpressの代わりに、wp-cliロールを実行するように設定

- hosts: mysql
  become: yes
  become_user: root
  tasks:
  roles:
    - mysql


- hosts: wp
  become: yes
  become_user: root
  tasks:
  roles:
    - httpd
    - php
    - wp-cli

繰り返しの項目を変数化

設定をいじっていると、同じ設定を加える箇所がいくつか出てきたので、その部分を変数化

# group_vars/all.yml

db:
  host: localhost # DB側ホスト
  name: "hogehoge"  #DB名
  user: "foobar" #DBユーザ名
  password:
    wordpress: "hogehoge" #WordPress用DBのパスワード
    root: "foobar" #DBのルートユーザパスワード

httpd:
  document_root_directory: /var/www/html #wordpressのディレクトリ

wordpress:
  name: wordpress
  title: "blog title"
  locale: "ja"
  admin:
    name: "nyaonyao" #WordPressのAdminユーザ名
    password: "passw@rd" #WordPressのAdmin用パスワード
    mail: "huga@gmail.com"

wp_cli_path: /usr/local/bin/wp #wp-cliのパス

# パスワードとかユーザー名等その時々によって設定は変更
# 適当な名前にしないように

wp-cliでのインストール

# roles/wp-cli/tasks/main.yml


#最新版のwp-cliをbin/wpに入れる
- name: get wp-cli
  get_url:
    url: "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"
    dest: /usr/local/bin/wp
    mode: 0755

#WordPressをインストールする先のディレクトリを作成
- name: create directory
  file:
    dest={{ httpd.document_root_directory }}/{{ wordpress.name }}
    owner=apache
    group=apache
    state=directory
    mode=0755

# WordPressのファイルをダウンロード
- name: install wordpress core
  shell: |
    sudo -u apache {{ wp_cli_path }} core download \
    --locale={{ wordpress.locale }} 
  args:
    chdir: "{{ httpd.document_root_directory }}/{{ wordpress.name }}"

# 変数で指定したディレクトリにダウンロードさせている


# DB情報の設定ファイルをWordPressディレクトリに配布
# wp core configでも設定できるみたいだけど、sudo実行するとパス関係でややこしくなるので、事前に設定したphpを配布するほうが楽かも
# 外からいじられるのはかなり危ないのでパーミッションは400

- name: setup  wp-config.php
  template:
    src: wp-config.php.j2
    dest: "{{ httpd.document_root_directory }}/{{ wordpress.name }}/wp-config.php"
    owner: apache
    group: apache
    mode: 0400


# WordPressをインストール
- name: install wordpress
  shell: |
    sudo -u apache {{ wp_cli_path }} core install \
    --title={{ wordpress.title }} \
    --admin_user={{ wordpress.admin.name }} \
    --admin_password={{ wordpress.admin.password }} \
    --admin_email={{ wordpress.admin.mail }}\
    --url="http://{{ inventory_hostname }}/{{ wordpress.name }}"
  args:
    chdir: "{{ httpd.document_root_directory }}/{{ wordpress.name }}"

ちなみに事前にDB設定を記載しているwp-config.php.j2ファイルをroles/wp-cli/templatesに入れておきます。

これを実行します。

ansible-playbook -i inventory/hosts playbook.yml

こうすると、設定なしでそのままWordPressにログインして日記が書けるはず。

そろそろ本番にデプロイしたいのですが、いろいろ他にも手を出しているので、月末までにはあげたい。。。