只是想在Vagrant中尝试一下Ansible,并记录下来
这是什么?
这是用Vagrant来尝试使用Ansible的简短笔记。
尝试
制作的东西
使用vagrant创建服务器并使用ansible-playbook进行web服务器和数据库服务器的初始设置。
-
- サーバA:ansibleホスト
-
- サーバB:web ansible管理対象サーバ
- サーバC:DB ansible管理対象サーバ
建立
使用Vagrant启动主机、网页和数据库。
-
- vagrant init bento/centos-6.8
vagrantfileを編集
3台上げたいので、↓も部分をIP変えながら3つにコピーする
config.vm.define "host" do |node|
node.vm.box = "bento/centos-6.8"
node.vm.hostname = "host"
node.vm.network :private_network, ip: "aaa.bbb.ccc.ddd"
end
- vagrant up
将Ansible引入主机
-
- wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
-
- rpm -Uvh epel-release-6-8.noarch.rpm
- yum -y install ansible
Ansible主机-目标服务器的SSH连接设置
-
- vagrant ssh host
vi .ssh/config
↓のような感じでweb,dbのIP,hostnameなど設定
Host web
HostName xxx.xxx.xxx.xxx
Host db
HostName yyy.yyy.yyy.yyy
-
- ssh-keygen -t rsa
-
- chmod 777 ~/.ssh/config
-
- ssh-copy-id web
ssh-copy-id db
ホストで秘密鍵・公開鍵を作ってweb、dbに公開鍵を置いているところです
何も考えずに777にしたので意味はありません
创建库存
vi hosts
↓みたいな感じでホストのサーバでhostsファイルを設定
[web]
xxx.xxx.xxx.xxx
[db]
yyy.yyy.yyy.yyy
ansible all -i hosts -m ping
とりあえずansibleコマンドを試す
-i : インベントリファイルの指定
vi ansible.cfg
hostfile = ./hosts
ansible.cfg上でインベントリを指定しておく
ansible all -m ping
インベントリの指定なしでansibleコマンドが実行可能になっている確認
一边调整剧本一边试一试
準備已完成,現在可以從Ansible 主機使用ansible-playbook進行指令操作。
撰写并执行playbook
- ↓みたいな感じでuserをaddするplaybookを書いてみる
---
- hosts: all
tasks:
- name: addUser
user: name=newUser
ansible-playbook playbook.yml
冪等性があるため、「毎回新しいユーザーが増える」わけではない
尝试在网络上安装Apache
ansible-playbook.ymlに追記する
- hosts: web
tasks:
- name: installApache
yum: name=httpd
- name: startApache
service: name=httpd
我试着通过Apache来检查文件。
- vi index.html
<html>
ansible test.
</html>
-
- 下記のことをansible-playbook.ymlに追記する
所有者をvagrantに変更し、index.htmlをcopyする
libselinuxをインストールさせる
- name: installLibselinux
yum: name=libselinux-python
- name: chown
file: dest=/var/www/html owner=vagrant recurse=yes
- name: copyHtml
copy: src=./index.html dest=/var/www/html/index.html owner=vagrant
在网页端安装php。
-
- 下記のことをansible-playbook.ymlに追記する
hello.phpを作成
webサーバでphpをインストールして、hello.phpを表示させる
- name: installPhp
yum: name={{item}}
with_items:
- php
- php-devel
- php-mbstring
- php-mysql
notify:
- notify
handlers:
- notify
service: name=httpd state=restarted
在数据库端安装MySQL。
-
- 下記のことをansible-playbook.ymlに追記する
dbサーバにmysqlをインストール
database作成、ユーザ作成、password設定
- hosts: db
tasks:
- name: installMysql
yum: name=mysql-server
- name: startMysql
service: name=mysqld state=started enabled=yes
可以用ansible-playbook命令来完成这个任务。
-
- webへのapacheのインストール
-
- 自動起動設定
-
- index.htmlの準備
-
- 必要なPHPパッケージのインストール
-
- DBへのmysqlのインストール
- 自動起動設定
应该是可以的。
触动我内心的事情
-
- 冪等性が保たれるおかげで、ansible-playbook.ymlを試しながら少しずつ書き足せる。
webにapacheをインストールするのを書いてansible-playbook実行、OKそうだったらdbにmysqlをインストールするのを書き足して、またansible-playbook実行。と試せる。
この時、webはapacheインストールがもう終わっているので、新しく無駄なことをしない。
给你一小点额外的东西。
-
- mysqlでの確認
ssh db
mysql -u dbuser -p mydb
show databases;