今回やること
開発に使う各種ソフトウェアのインストール。
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の度に実行されてしまう
これらについても、そのうち直したい。