AnsibleとVagrantで開発環境を構築する | さくらのナレッジ
という記事を読んで、開発環境の Ubuntu サーバに MySQL や PostgreSQL をインストールするなら、Vagrant と Ansible を連携させた方がやりやすいな、と思ったのでメモがてらまとめておきたいと思います。
ベースとしては、以前使った Ansible Galaxy を使います。
具体的には、
- MySQL は ANXS.mysql で
- PostgreSQL は ANXS.postgresql で
インストールします。
Vagrant 以外の仮想サーバや通常のサーバに対して、MySQL や PostgreSQL を簡単にインストールする手順については、以下の過去記事を参照してください。
<過去記事>
akiyoko.hatenablog.jp
ホスト
- macOS Sierra 10.12.3
- Vagrant 1.9.1
- VirtualBox 5.1.14
macOS Sierra に Vagrant および VirtualBox をインストールする手順については、以下を参照してください。
<過去記事>
akiyoko.hatenablog.jp
ゲスト
- Ubuntu 14.04
ゲストマシンのプライベート IPアドレスは「192.168.33.10」に設定しておきます。
データベース
- MySQL 5.5.54
- PostgreSQL 9.3.16
インストールと同時に以下の設定もおこなう想定です。
| 項目 | 設定内容 |
|---|---|
| データベース名 | myproject |
| データベースユーザ | myprojectuser |
| データベースユーザパスワード | myprojectuserpass |
ちなみに、MySQL の root のパスワードは「rootpass」となります。
また、PostgreSQL の場合は「postgres」という Linuxユーザが作成されます。
MySQL のインストール
MySQL は ANXS.mysql でインストールします。
$ cd ~/dev/vagrant/ubuntu14 $ mkdir provisioning $ ansible-galaxy install ANXS.mysql -p provisioning/roles
etc_mysql_my.cnf.j2 ファイル内の「character_set_server」および「collation_server」のキーワードを修正します。 *1
$ sed -i '' 's/^character_set_server/character-set-server/g' provisioning/roles/ANXS.mysql/templates/etc_mysql_my.cnf.j2 $ sed -i '' 's/^collation_server/collation-server/g' provisioning/roles/ANXS.mysql/templates/etc_mysql_my.cnf.j2
provisioning/hosts
[db-servers] 192.168.33.10
provisioning/site.yml
- hosts: db-servers become: true user: vagrant vars_files: - vars/mysql.yml roles: - { role: ANXS.mysql }
$ mkdir provisioning/vars
provisioning/vars/mysql.yml
mysql_current_root_password: '' mysql_root_password: rootpass mysql_databases: - name: myproject mysql_users: - name: myprojectuser pass: myprojectuserpass priv: "myproject.*:ALL"
最終的なディレクトリ構成はこのような感じになります。
~/dev/vagrant/ubuntu14/
├── Vagrantfile
└── provisioning
├── hosts
├── roles
│ └── ANXS.mysql
│ ・
│ ・
├── site.retry
├── site.yml
└── vars
└── mysql.yml
Vagrantfile
・
・
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
・
・
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/site.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = "all"
end
provision
サーバを初回起動する際に provision が実行されます。
$ vagrant up
起動済みのサーバには、以下のコマンドを実行することで provision が実行されます。
$ vagrant provision or $ ansible-playbook -i provisioning/hosts provisioning/site.yml -k -vv
後者のコマンドの場合には、vagrant ユーザのパスワードが要求されます。
パスワードを入力したくない場合は、
$ vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config ### 念のためパーミッションを変更 $ sudo chmod 600 ~/.ssh/config
を設定しておけば、
$ ansible-playbook -i provisioning/hosts provisioning/site.yml -vv
で、パスワード無しで実行可能です。
動作確認
$ vagrant ssh or $ ssh vagrant@192.168.33.10
でサーバにログインして、
$ mysql -u root -p
で動作確認します。
書籍
PostgreSQL のインストール
PostgreSQL は ANXS.postgresql でインストールします。
$ mkdir provisioning $ ansible-galaxy install ANXS.postgresql -p provisioning/roles
provisioning/hosts
[db-servers] 192.168.33.110
provisioning/site.yml
- hosts: db-servers become: true user: vagrant vars_files: - vars/postgresql.yml roles: - { role: ANXS.postgresql }
$ mkdir provisioning/vars
provisioning/vars/postgresql.yml
postgresql_databases: - name: myproject postgresql_users: - name: myprojectuser pass: myprojectuserpass postgresql_user_privileges: - name: myprojectuser db: myproject priv: "ALL"
最終的なディレクトリ構成はこのような感じになります。
~/dev/vagrant/ubuntu14/
├── Vagrantfile
└── provisioning
├── hosts
├── roles
│ └── ANXS.postgresql
│ ・
│ ・
├── site.retry
├── site.yml
└── vars
└── postgresql.yml
Vagrantfile
・
・
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
・
・
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/site.yml"
ansible.inventory_path = "provisioning/hosts"
ansible.limit = "all"
end
provision
サーバを初回起動する際に provision が実行されます。
$ vagrant up
起動済みのサーバには、以下のコマンドを実行することで provision が実行されます。
$ vagrant provision or $ ansible-playbook -i provisioning/hosts provisioning/site.yml -k -vv
後者のコマンドの場合には、vagrant ユーザのパスワードが要求されます。
パスワードを入力したくない場合は、
$ vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config ### 念のためパーミッションを変更 $ sudo chmod 600 ~/.ssh/config
を設定しておけば、
$ ansible-playbook -i provisioning/hosts provisioning/site.yml -vv
で、パスワード無しで実行可能です。
動作確認
$ vagrant ssh or $ ssh vagrant@192.168.33.10
でサーバにログインして、
$ psql -U postgres or $ sudo su postgres $ psql
で動作確認します。
おまけ
### ユーザ一覧 postgres=# \du ### データベース一覧 postgres=# \l ### データベース接続 postgres=# \c myproject ### テーブル一覧 myproject=# \d myproject=# \dt ### 終了 myproject=# \q




