6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vagrant+ansibleで開発環境を構築する(パッケージインストール編)

Posted at

今回やること

開発に使う各種ソフトウェアのインストール。
httpd:nginx
db:MariaDB
lang:php5
editor:emacs

今回作成した設定内容は
https://github.com/ak-ymst/vm_config
にあります。

emacsのインストール

サーバでの作業をスムーズにするために、emacsをインストールする。(Viは手になじまない)

ansible/roles/init/tasks/main.ymlに以下の記述を追加後、プロビジョニング実行。

- name: install emacs
  become: yes
  yum: name=emacs state=installed

- name: copy .emacs.d
  become: yes
  copy: src=~/.emacs.d dest=~/ owner=vagrant group=vagrant

provision実行後、仮想環境にログインし確認。

[vagrant@vagrant-centos7 ~]$ emacs --version
GNU Emacs 24.3.1
[vagrant@vagrant-centos7 ~]$ ls -al 
合計 24
drwx------. 5 vagrant vagrant 4096  2月  2 13:34 .
drwxr-xr-x. 3 root    root      20  8月 12 23:22 ..
drwxr-xr-x  3 vagrant vagrant   16  2月  1 16:55 .ansible
-rw-------  1 vagrant vagrant  351  2月  2 13:33 .bash_history
-rw-r--r--. 1 vagrant vagrant   18  3月  6  2015 .bash_logout
-rw-r--r--. 1 vagrant vagrant  193  3月  6  2015 .bash_profile
-rw-r--r--. 1 vagrant vagrant  231  3月  6  2015 .bashrc
drwxr-xr-x  6 vagrant vagrant  120  2月  2 13:36 .emacs.d
drwx------  2 vagrant vagrant   28  2月  1 16:40 .ssh
-rw-r--r--  1 vagrant vagrant    6 11月  3 00:20 .vbox_version
[vagrant@vagrant-centos7 ~]$ 

.emacsの設定ファイルは単純にホスト側のものをコピーして使うことにしたが、
設定ファイルも複数マシンで同期できるようにgithubかどこかで管理したいと思っているので
そっちから引っ張ってこれるようにしたい。
あと、ディレクトリのコピー先として、当初「dest=~/」と記述していたのですが、
これではうまくコピーされずに、しばらくハマりました。

nginxのインストール

やること

  • パッケージのインストール
  • デフォルトサイトをVirtualHostとして設定
  • 起動設定
  • nginxの再起動

パッケージのインストール

yumを使ってインストールを行う。
nginx関係taskをまとめるために、新しいroleを作り、そちらに記述する。

ansible/roles/nginx/tasks/main.yml

- name: Install Nginx
  become: yes
  yum: name=nginx state=latest

ansible/playbook.ymlにも、ロールを追加

- hosts: all
  become: true
  roles:
     - init
     - nginx

provision実行後、パッケージがインストールされていることを確認する

[vagrant@vagrant-centos7 ~]$ yum list installed | grep nginx
nginx.x86_64                          1:1.6.3-8.el7                   @epel     
nginx-filesystem.noarch               1:1.6.3-8.el7                   @epel     
[vagrant@vagrant-centos7 ~]$ 

起動設定と再起動

centos7では、デーモンの自動起動設定も再起動もsystemctlコマンドを使うように変わっているようなので、そちらを使うように設定する。

ansible/roles/nginx/tasks/main.yml

- name: Set autoload nginx
  become: true
  command: systemctl enable nginx

- name: restart nginx
  become: true
  command: systemctl restart nginx

デフォルトサイトをVirtualHostとして設定

VirtualHostの設定ファイルは/etc/nginx/conf.d以下に配置するようなので、下記のようなテンプレートを用意し、コピーするようにする。

ansible/vars/nginx.yml

vhost_path: /etc/nginx/conf.d
vhost_file: default.conf
template: default.j2

server_name: 192.168.33.100
document_root: /vagrant

ansible/roles/nginx/templates/default.j2

server {
    listen  80;
    server_name {{ server_name }};

    root {{ document_root }};

    location / {
        index index.html;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

ansible/roles/nginx/tasks/main.yml

- name: incled variables for nginx
  include_vars: "nginx.yml"

- name: Set default nginx site
  sudo: yes
  template: src={{ template }} dest={{ vhost_path }}/{{ vhost_file }}

確認

provision実行後、ドキュメントルートに指定した/vagrantに確認用のindex.htmlファイルを作成し
http://192.168.33.100/index.html
でアクセスできたら成功。

#phpのインストール
やること

  • 各種パッケージインストール
  • 設定ファイルの修正
  • php-fpmの自動起動設定

各種パッケージのインストール

nginxと同じように、新しいroleを作り、そちらにtaskを記述する。

ansible/roles/php/tasks/main.yml

- name: Install PHP Packages
  become: true
  yum: name={{ item }} state=latest
  with_items:
      - php
      - php-devel
      - php-fpm
      - php-xml
      - php-mysql
      - php-mbstring
      - php-gd

provision実行後、install済みパッケージを確認する

[vagrant@vagrant-centos7 ~]$ yum list installed | grep php
php.x86_64                            5.4.16-36.el7_1                 @base     
php-cli.x86_64                        5.4.16-36.el7_1                 @base     
php-common.x86_64                     5.4.16-36.el7_1                 @base     
php-devel.x86_64                      5.4.16-36.el7_1                 @base     
php-fpm.x86_64                        5.4.16-36.el7_1                 @base     
php-gd.x86_64                         5.4.16-36.el7_1                 @base     
php-mbstring.x86_64                   5.4.16-36.el7_1                 @base     
php-mysql.x86_64                      5.4.16-36.el7_1                 @base     
php-pdo.x86_64                        5.4.16-36.el7_1                 @base     
php-xml.x86_64                        5.4.16-36.el7_1                 @base     
[vagrant@vagrant-centos7 ~]$ 
[vagrant@vagrant-centos7 ~]$ php --version
PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[vagrant@vagrant-centos7 vagrant]$
[vagrant@vagrant-centos7 ~]$ systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2016-02-02 16:38:51 JST; 7min ago
 Main PID: 5221 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 2, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php-fpm.service
           ├─5221 php-fpm: master process (/etc/php-fpm.conf)
           ├─5223 php-fpm: pool www
           ├─5224 php-fpm: pool www
           ├─5225 php-fpm: pool www
           ├─5226 php-fpm: pool www
           └─5227 php-fpm: pool www
[vagrant@vagrant-centos7 ~]$ 

設定ファイルの修正

  • php.iniのTimezoneの修正
  • php-fpmの実行ユーザの変更

ansible/roles/php/tasks/main.yml

- name: update php.ini for cli
  lineinfile: dest=/etc/php.ini
              regexp=';date.timezone ='
              line='date.timezone = Asia/Tokyo'

- name: Set user to nginx
  lineinfile: "dest=/etc/php-fpm.d/www.conf state=present regexp='^user = apache' line='user = nginx'"

- name: Set group to nginx
  lineinfile: "dest=/etc/php-fpm.d/www.conf state=present regexp='^group = apache' line='group = nginx'"

php-fpmの自動起動設定

- name: Set autoload php-fpm
  become: true
  command: systemctl enable php-fpm

- name: restart php-fpm
  become: true
  command: systemctl restart php-fpm

確認

provision実行後、

[vagrant@vagrant-centos7 ~]$ echo "<?php echo phpinfo() ?>" > /vagrant/index.php

みたいに確認用ファイルを作成し、
http://192.168.33.100/index.php
にアクセスしてPHP_INFOが表示されたらOK

MariaDBのインストール

mysqlでもいいのですが、せっかくなので使ったことのないMariaDBに挑戦。

やること

  • パッケージのインストール
  • 自動起動設定
  • rootユーザのパスワード変更

パッケージのインストールと自動起動設定

nginxと同じように、yumでインストールして, systemctlで自動起動設定を行う

ansible/roles/mariadb/tasks/main.yml

- name: Install MariaDB Packages
  become: true
  yum: name={{ item }} state=latest
  with_items:
      - mariadb
      - mariadb-server
      - MySQL-python

- name: Set autoload mariadb
  become: true
  command: systemctl enable mariadb

- name: restart mariadb 
  become: true
  command: systemctl restart mariadb

MySQL-pythonパッケージは、次に行うパスワード変更の際に必要になるので一緒にインストールしておく。
provision実行後、デフォルトのrootユーザでログインしてみる。

[vagrant@vagrant-centos7 ~]$ mysql --version
mysql  Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1
[vagrant@vagrant-centos7 ~]$ mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

rootユーザのパスワードを変更する

デフォルトのrootユーザはパスワードなしになっているので、一応パスワードを設定しておく

ansible/vars/mariadb.yml

db_root_password: Ahth7Oth
my_cnf_template: my.cnf.j2

ansible/roles/mariadb/tasks/main.yml

- name: incled variables for mariadb
  include_vars: "mariadb.yml"

- name: change root password
  become: true
  mysql_user: name=root host={{ item }} password={{ db_root_password }}
  with_items:
      - 127.0.0.1
      - localhost

- name: create root .my.cnf
  become: true
  template: src={{ my_cnf_template }}  dest=/root/.my.conf owner=root mode=0600

provision実行後、パスワードが変更されていることを確認する。

[vagrant@vagrant-centos7 ~]$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[vagrant@vagrant-centos7 ~]$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

終わりに

これで一通り開発をはじめる準備はできたと思うが、まだまだ問題点はある。

  • emacsの設定ファイルの管理法(最初に一回だけリポジトリから取得みたいな感じにしたい)
  • phpのバージョン(5.6にしておきたい)
  • deamonの自動起動設定が、provisionの度に実行されてしまう
    これらについても、そのうち直したい。
6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?