LoginSignup
8
11

More than 5 years have passed since last update.

ansible+vagrantで簡単環境構築してみた際のメモ

Posted at

社内の開発環境を毎回手動で作っていたのでリソースがもったない気がしたのとお気軽導入できそうだったので試した際のメモです

結構前に作ったのでだいぶ忘れているので思い出すためのメモでもあります。。。

構成

.
├── README.md
├── Vagrantfile
├── hosts
├── provision_vagrant.yml
├── roles
│   ├── common
│   │   └── tasks
│   │       └── main.yml
│   ├── composer
│   │   └── tasks
│   │       └── main.yml
│   ├── git
│   │   └── tasks
│   │       └── main.yml
│   ├── mysql
│   │   ├── handlers
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   ├── nginx
│   │   ├── handlers # 再起動taskなどの定義
│   │   │   └── main.yml
│   │   ├── tasks # install taskなどの定義
│   │   │   └── main.yml
│   │   └── templates # サーバにupするテンプレを定義
│   │       └── nginx.conf.j2
│   ├── php
│   │   ├── handlers
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   └── redis
│       ├── handlers
│       │   └── main.yml
│       └── tasks
│           └── main.yml
└── vars
    └── package.yml

基本的にrolesにいろいろなタスクをyaml形式で記述し
packageなどをまとめて定義したい場合は基本的にvarsにpackage.ymlをグルーピングして定義するようにしています。
wgetやvim/opensslなどはcommonタスク内でwith_itemsとしてグルーピングしてyum installを実行するようにしています

playbookファイル定義

  • 簡単なinstall taskを定義してみる
- name: git install # タスク名
  yum: name=git state=installed # ミドルウェア stateにlatestなどを指定すると最新versionがinstallされる

ここではstate=installedを指定していますが最新のansible公式ドキュメントには

present # installされていること
latest # 最新があればupdate
absent # 削除

となっているので presentを使う方がいいと思います。

  • nginxをinstallしてnginx.confをあげてみる
main.yml
#nginxをyumでinstallするためにrpmを登録
- name: nginx rpm update
  yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

- name: nginx install
  yum: name=nginx state=latest

# docrookのディレクトリ作成
- name: docroot mkdir
  file: dest=/var/www group=vagrant owner=vagrant recurse=yes

# confのバックアップ
- name: default nginx conf backup
  shell: mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

# .j2テンプレートで定義したconfのupload
- name: nginx conf
  template: src=nginx.conf.j2 dest=/etc/nginx/conf.d/nginx.conf owner=nginx group=nginx

# service start
- name: start nginx
  service: name=nginx state=started enabled=yes

かなり直感的でわかりやすいです。

とりあえずざっくり思い出せた気がする。

実行

すべてを実行する場合

  • vagrant up

ansibleのタスクのみを実行する場合

  • ansible-playbook -i hosts provision_vagrant.yml

特定タスクのみ実行する場合

  • ansible-playbook -i hosts --tags hogehoge provision_vagrant.yml

出来上がったもの

githubにあげていつでもどこでもplaybook

playbookでのshell実行やtimezoonの変更(replace)など他の細かい部分は下記に定義してあります。

ansiblePlayBook

  • 今回はphp用の環境を構築したがrubyなど他の言語で開発を行う際にもtaskを定義して使用しています。

  • ansiblePlayBookを作成する際に vagrantのplugin saharaに非常にお世話になりました。
    Transaction最高でした。

8
11
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
8
11