ansible/docker_container 安裝MySQL/Mongo/Redis
阿新 • • 發佈:2018-12-19
最近在部署類似私有云專案,需要在本地用ansible
自動化工具去建立啟動相關db
,看了一下比較不錯的ansible
模組docker_container
- 安裝ansible
- 安裝docker-ce(版本)
- 安裝docker_container相關依賴包
- 建立
role
專案 - 映象下載及打
tag
- 執行
一、更新映象及安裝相關包和依賴
#``repo``源更新
#可在清華大學映象站進行映象源更新操作
cat /etc/yum.repos.d CentOS-Base.repo
[base]
name=Centos-7.4-Base
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/os/x86_64/
enabled= 1
gpgcheck=0
[update]
name=Centos-7.4-Updates
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/updates/x86_64/
enabled=1
gpgcheck=0
[extras]
name=Centos-7.4-Extras
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/extras/x86_64/
enabled=1
gpgcheck=0
[centosplus]
name=Centos-7.4-Centosplus
baseurl= http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/centosplus/x86_64/
enabled=1
gpgcheck=0
[docker-ce]
name=Docker-Ce-7.4
baseurl=http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/
enabled=1
gpgcheck=0
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
failovermethod= priority
enabled=1
gpgcheck=0
#安裝相關包及依賴
yum clean all && yum repolist
yum -y install ansible docker-ce python-pip
pip install docker-py
#啟動服務
systemctl start docker
#下載相關映象
docker pull docker.io/redis:latest
docker pull docker.io/mongo:latest
docker pull docker.io/mysql:latest
二、建立roles
專案及yaml
編寫
#當前roles目錄結構
tree roles/
├── mongo
│ ├── defaults
│ ├── files
│ │ └── create.sh
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ └── vars
├── mysql
│ ├── defaults
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ └── main.yaml
│ ├── templates
│ └── vars
│ └── main.yaml
└── redis
├── defaults
├── files
├── handlers
├── meta
├── tasks
│ └── main.yaml
├── templates
└── vars
└── main.yaml
2.1 編輯MySQL yaml
#roles/mysql/tasks/main.yaml
- name: 'install mysql database:mysql'
docker_container:
name: mysql #啟動時 --name的名字
image: "docker.hobot.cc/mysql:5.7.23" #映象名稱
pull: no #不需要從外部拉取
volumes:
- "/etc/mysql/conf:/etc/mysql" #本地對映目錄
- "/etc/mysql/data:/var/lib/mysql"
env:
MYSQL_ROOT_PASSWORD: "{{ password }}" #MySQL密碼(vars/main.yaml定義)
ports:
- "3306:3306" #埠對映
state: started #啟動
2.2 編輯Redis yaml
- name: 'install redis database:05b3651ee24e'
docker_container:
name: redis #啟動時 --name的名字
image: "docker.hobot.cc/redis:5.0" #映象名稱
pull: no #不需要從外部拉取
volumes:
- "/etc/redis/conf:/usr/local/etc/redis" #本地對映目錄
- "/etc/redis/data:/data"
env:
REDIS_PASSWORD: "{{ password }}" #redis密碼(vars/main.yaml定義)
ports:
- "6379:6379" #埠對映
state: started #啟動
2.3 編輯mongo yaml
#說說這裡,mongo這塊的許可權有點坑,我下個文章會專門講一下mongo許可權這塊,如果你在env設定賬號密碼,那麼庫必須是admin
#mongo_user模組中是可以建立使用者和密碼以及相關的role許可權,但是database也必須是admin
#你可以完全把mongo_user那部分注視,然後將env也注視,然後預設就是免密登入,
#然後在利用指令碼進行建立你需要的賬號密碼以#及連線的庫
- name: 'install mongo database:05b3651ee24e'
docker_container:
name: mongo
image: "docker.hobot.cc/mongo:3.6.8"
env:
MONGO_INITDB_ROOT_USERNAME: admin #初始化使用者名稱
MONGO_INITDB_ROOT_PASSWORD: asdjcvkjxbcv #初始化使用者密碼
MONGO_INITDB_DATABASE: admin #相關的庫,官網上說的意思是.js檔案可建立
pull: no
volumes:
- "/etc/mongo/configdb:/data/configdb"
- "/etc/mongo/db:/data/db"
ports:
- "27017:27017"
state: started
- mongodb_user:
login_user: super #登入的使用者
login_password: 123456 #登入的密碼
database: admin #需要進入的資料庫(目前測試必須是admin)
name: pangu #需要建立的使用者
password: 123 #需要建立的密碼
state: present #建立狀態
roles: #申請許可權(給pangu使用者的aitc_matrix庫的所有者許可權)
- db: aitc_matrix
role: root
- name: "copy create user script to tmp "
copy:
src=create.sh #按我上面說的話,如果注視了,那麼就執行個指令碼
dest=/tmp/create.sh
- name: "run create user script"
command:
/bin/bash "/tmp/create.sh"
2.4 建立mongo
指令碼及執行ansible-playbook
#roles/mongo/files/create.sh
#!/bin/bash
mongo aitc_matrix --eval "db.createUser({user:\"pangu\",pwd:\"12345\",roles:[{role:\"dbOwner\",db:\"aitc_matrix\"},{role:\"dbOwner\",db:\"aitc_matrix1\"}]})"
#/etc/mongo/configdb/mongo.conf
security:
authorization: enabled
#inventory.ini
[global]
10.31.11.154
#site.yaml
- name: entry main
hosts: 10.31.11.154
roles:
- mongo
- redis
- mysql
#run playbook
ansible-playbook -i inventory.ini site.yaml -vvv