概要
以前のブログでインストールしたアンシブル(Ansible)のプレイブック(Playbook)を使ってサーバーを構築します。基本的にサーバー構築へ必要なプログラムインストールや設定をするためアンシブルプレイブック(Ansible Playbook)を使う予定です。このブログでは基本的vagrantを使って仮想マシン(guest system)を作ってその中にアンシブル(Ansible)をインストールして進めます。
- vagrantをインストールする方法については以前のブログのvagrantインストールや使い方を確認してください。
- vagrantにアンシブル(Ansible)をインストールする方法についてはアンシブルインストールを見てください。
このブログは上の2つのブログの内容を実行したと仮定して説明します。
アンシブルプレイブック生成
現在Vagrantfileファイルが存在するフォルダへ```ansible``の名前でフォルダを作ります。
|-- ansible
|-- Vagrantfile
生成したansibleフォルダにplaybook.ymlファイルを生成します。アンシブル(Ansible)の全ての内容はヤムル(yml)ファイル形式と文法で作ります。だから、ヤムル(yml)で使える全てのことが使えます。
|-- ansible
| |-- playbook.yml
|-- Vagrantfile
生成したplaybook.ymlファイルはアンシブル(Ansible)のスタート点です。playbook.ymlを下のように作成します。
---
- hosts: localhost
roles:
- init
以前のブログでも紹介したがアンシブル(Ansible)はインフラに関する全般的な自動化ツールです。したがって、ローカルサーバー(local server)以外でもリモートサーバー(remote server)のインフラも管理することが出来ます。hostsはアンシブル(Ansible)を使ってインフラを構築する対象、つまりローカル(local server)やリモートサーバー(remote server)を指定することができます。私たちは現在開発サーバーを構築してるのでhostsにはlocalhostを設定します。
アンシブル(Ansible)は1つのプレイブック(playbook)ファイルで全てのインフラ構築内容を定義することもできますがrolesを使って複数のファイルで管理することも可能です。roles下に分離して管理したいフォルダリストを設定します。このブログではinitフォルダを1つ生成する予定ですので- initを追加しました。
|-- ansible
| |-- init
| | |-- tasks
| | | |-- main.yml
| |-- playbook.yml
|-- Vagrantfile
上のようにansibleフォルダ下へinit/tasks/main.ymlファイルを生成した下記の内容を追加します。
---
- name: Make app directory
file: path=/var/www state=directory mode=0755
- name: Symbolic link
file: src=/vagrant dest=/var/www/vhosts state=link
- name: Set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
update_cache: yes
cache_valid_time: 86400
- name: Add python3.6 repo
apt_repository:
repo: 'ppa:jonathonf/python-3.6'
- name: Install basic packages
become: true
apt:
pkg:
- git
- unzip
- python3.6
- python-pip
- python3-pip
- fabric
state: present
update_cache: yes
アンシブル(Ansible)のコマンドを一つ一つ見てみます。
- name: Make app directory
file: path=/var/www state=directory mode=0755
これがアンシブル(Ansible)の1つのコマンドです。nameは現在のコマンドを区分するためものでこのコマンドはアンシブル(Ansible)のfileコマンドを使ってフォルダを生成する部分です。
- name: Symbolic link
file: src=/vagrant dest=/var/www/vhosts state=link
フォルダを管理をするため/vagrantフォルダと/var/www/vhostsフォルダを連携します。
- name: Set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
ローカルサーバーのタイムゾーン(timezone)を設定します。
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
update_cache: yes
cache_valid_time: 86400
tags:
- packages
Linuxのパッケージ管理ツールのapt-getをアップデートします。become: trueで管理者権限(root)でこのアンシブル(Ansible)コマンドを実行します。
- name: Add python3.6 repo
apt_repository:
repo: 'ppa:jonathonf/python-3.6'
アンシブル(Ansible)のモジュール中でパイソン(python)に依存するモジュールがあってパイソン(python)をインストールする必要があります。パイソン(python)をインストールするためパイソンのレポジトリ(repository)を追加します。
- name: Install basic packages
become: true
apt:
pkg:
- git
- unzip
- python3.6
- python-pip
- python3-pip
- fabric
state: present
update_cache: yes
あとで必要な基本プログラム(git, unzip)とパイソン(python)と関係あるプログラムをインストールします。
Vagrantfile修正
既存のVagrantfileに下記の内容を追加します。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
...
config.vm.provision "shell", inline: <<-SHELL
...
sudo ansible-playbook /vagrant/ansible/playbook.yml
SHELL
config.vm.synced_folder ".", "/vagrant"
end
以前のブログで使ったプロビジョンシェル(provision shell)にansible-playbook /vagrant/ansible/playbook.ymlを追加しました。今からvagrant upまたはvagrant provisionコマンドを実行すると私たちが作ったアンシブルプレイブック(Ansible Playbook)が自動に実行されます。
またconfig.vm.synced_folder ".", "/vagrant"コマンドを使ってローカルマシン(host system)のフォルダを仮想マシン(guest system)の/vagrantへアップロードして同期化(sync)します。今からはローカルマシン(host system)でファイルを修正したら仮想マシン(guest system)へ自動に反映されます。
テスト
今まで作ったアンシブルプレイブック(Ansible Playbook)とVagrantfileを使って自動でサーバーを設定してみましょう。既存の仮想マシン(guest system)が起動中だったら下記のvagrantコマンドで仮想マシン(guest system)を削除します。
vagrant destroy
下のvagrantコマンドで仮想マシン(guest system)を生成します。このように生成したら以前と違って私たちが作成したアンシブルプレイブック(Ansible Playbook)が起動してることをコンソール(console)で確認できます。
vagrant up
生成されたら下記のvagrantコマンドで仮想マシン(guest system)へ接続します。
vagrant ssh
下のコマンドでVagrantfileとアンシブルプレイブック(Ansible Playbook)が上手く動作したかを確認します。
cd /vagrant
ls
git --version
unzip -v
完了
今回のブログではアンシブルプレイブック(Ansible Playbook)を使って仮想マシン(guest system)へ基本的必要なプログラムをインストールしてみました。これを通じてアンシブルプレイブック(Ansible Playbook)をどうやって使うかもみました。またVagrantfileファイルを修正して仮想マシン(guest system)を生成する時アンシブルプレイブック(Ansible Playbook)を自動に実行されるように作ったりVagrantfileが実行されたフォルダと仮想マシン(Ansible Playbook)の/vagrantフォルダと同期化する方法もみてみました。
アンシブルプレイブック(Ansible Playbook)をもっと上手く使う必要がありますが、私たちは単純に使ってるのでちょっと恥ずかしいですね。下にアンシブルのドキュメント(Ansible Document)サイトのリンクを紹介します。そのドキュメントをみってもっと美しくアンシブル(Ansible)を使ってみてください。
次のブログではdockerの開発環境を追加してみます。
参考
- アンシブルドキュメント(Ansible Document): https://docs.ansible.com/
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Dekuが開発したアプリを使ってみてください。Dekuが開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。






