vagrant工具就是使用本地的虚拟化软件(virtual box-推荐, vmware),根据vagrant file的配置来创建一个或者多个虚拟机,并可以对创建的虚拟机进行配置。
下载:Install | Vagrant | HashiCorp Developer
vagrant 镜像地址: Discover Vagrant Boxes - Vagrant Cloud (vagrantup.com)
常用命令:
1. 使用 vagrant up (vm name) 命令就可以创建或启动(指定名字的)虚拟机。
2. 使用 vagrant halt (vm name)命令就可以对(指定名字的)虚拟机进行关机。
3. 使用 vagrant destroy (vm name) 命令就可以删除(指定名字的)虚拟机。
4. 使用 vagrant ssh (vm name) 命令就可以ssh登录到指定名字的虚拟机。
使用vagrant创建2台虚拟机,并设置互相免密。node1虚拟机安装docker, docker-compose, python2等。
vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|###创建第一个虚拟机
config.vm.define "node1" do |node1|
node1.vm.box = "debian/bullseye64"
node1.vm.box_check_update = false
node1.vm.boot_timeout = 600
node1.vm.hostname = "node1"
node1.vm.network "private_network", ip: "192.168.99.101"
node1.vm.synced_folder ".", "/vagrant"
node1.vm.provider "virtualbox" do |v|
v.name = "node1"
v.gui = false
v.memory = "2048"
end
node1.vm.provision "shell", inline: <<-SHELL
sed -i 's/#\s*alias ll=/alias ll=/g' /home/vagrant/.bashrc
sudo sed -i 's/#\s*alias ll=/alias ll=/g' /root/.bashrc
sudo sed -i 's/set mouse=a/set mouse-=a/g' /usr/share/vim/vim82/defaults.vim
sudo sed -i 's/^\*\.emerg/#*.emerg/g' /etc/rsyslog.conf
sudo systemctl restart rsyslog
sudo sed -i 's/PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sudo sed -i 's/#\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
echo " UserKnownHostsFile /dev/null" |sudo tee -a /etc/ssh/ssh_config
echo " StrictHostKeyChecking no" |sudo tee -a /etc/ssh/ssh_config
sudo systemctl restart sshd
echo 'y' | ssh-keygen -t rsa -f /home/vagrant/.ssh/id_rsa -N ''
sudo chmod 400 /home/vagrant/.ssh/id_rsa*
sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa*
cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
echo "192.168.99.101 node1" >> /etc/hosts
echo "192.168.99.102 node2" >> /etc/hosts
cp /home/vagrant/.ssh/id_rsa* /vagrant/
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common net-tools vim python2 lrzsz unzip
#sudo wget https://bootstrap.pypa.io/get-pip.py #for python3, 可以使用 python3-pip 模块替代
cd /usr/bin/ && sudo wget https://bootstrap.pypa.io/pip/2.7/get-pip.py #for python2
sudo python2 get-pip.py
pip install xlrd==1.2.0 PYYAML
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose
sudo usermod -aG docker vagrant
echo ">>Finished...."
SHELL
end
###创建第二个虚拟机
config.vm.define "node2" do |node2|
node2.vm.box = "debian/bullseye64"
node2.vm.box_check_update = false
node2.vm.boot_timeout = 600
node2.vm.hostname = "node2"
node2.vm.network "private_network", ip: "192.168.99.102"
node2.vm.synced_folder ".", "/vagrant"
node2.vm.provider "virtualbox" do |vb|
vb.name = "node2"
vb.gui = false
vb.memory = "2048"
end
node2.vm.provision "shell", inline: <<-SHELL
sed -i 's/#\s*alias ll=/alias ll=/g' /home/vagrant/.bashrc
sudo sed -i 's/#\s*alias ll=/alias ll=/g' /root/.bashrc
sudo sed -i 's/set mouse=a/set mouse-=a/g' /usr/share/vim/vim82/defaults.vim
sudo sed -i 's/^\*\.emerg/#*.emerg/g' /etc/rsyslog.conf
sudo systemctl restart rsyslog
sudo sed -i 's/PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sudo sed -i 's/#\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
echo " UserKnownHostsFile /dev/null" |sudo tee -a /etc/ssh/ssh_config
echo " StrictHostKeyChecking no" |sudo tee -a /etc/ssh/ssh_config
sudo systemctl restart sshd
cp /vagrant/id_rsa* /home/vagrant/.ssh/
rm -f /vagrant/id_rsa*
sudo chmod 400 /home/vagrant/.ssh/id_rsa*
sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa*
cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
echo "192.168.99.101 node1" >> /etc/hosts
echo "192.168.99.102 node2" >> /etc/hosts
SHELL
end
end
基于vagrant 也可以使用docker-compose安装zabbix, 只需要提供docker-compose.yaml文件即可。
下面提供zabbix 的docker-compose文件:
1. zabbix 4.0的docker-compose.yaml文件:
version: "3"
services:
zabbix-server:
image: "zabbix/zabbix-server-mysql:centos-4.0.4"
container_name: "zabbix-server"
restart: "always"
environment:
- "DB_SERVER_HOST=mariadb"
- "MYSQL_USER=root"
- "MYSQL_PASSWORD=zabbix"
- "MYSQL_DATABASE=zabbix"
volumes:
- "zabbix-server-data:/var/lib/zabbix/"
- "zabbix-server-scripts:/usr/lib/zabbix/"
depends_on:
- "mariadb"
ports:
- "10051:10051"
#- "10052:10051"
extra_hosts:
- "mysql.bboysoul.com:10.10.10.200"
zabbix-web:
image: "zabbix/zabbix-web-nginx-mysql:centos-4.0.4"
container_name: "zabbix-web"
restart: "always"
environment:
- "DB_SERVER_HOST=mariadb"
- "MYSQL_USER=root"
- "MYSQL_PASSWORD=zabbix"
- "ZBX_SERVER_HOST=zabbix-server"
- "PHP_TZ=Asia/Shanghai"
#- "ZBX_SERVER_PORT="
#- "DB_SERVER_PORT="
- "MYSQL_DATABASE=zabbix"
#- "ZBX_SERVER_NAME="
depends_on:
- "zabbix-server"
- "mariadb"
ports:
- "8082:80"
#extra_hosts:
# - "mysql.bboysoul.com:10.10.10.200"
mariadb:
image: "mariadb:10.2.22"
container_name: "mariadb"
restart: "always"
environment:
- "MYSQL_ROOT_PASSWORD=zabbix"
- "MYSQL_DATABASE=zabbix"
#- "MYSQL_USER="
#- "MYSQL_PASSWORD="
#- "MYSQL_ALLOW_EMPTY_PASSWORD="
#- "MYSQL_RANDOM_ROOT_PASSWORD="
#ports:
# - "3306:3306"
command:
--character-set-server=utf8
--collation-server=utf8_bin
volumes:
- "mariadb-data:/var/lib/mysql/"
volumes:
zabbix-server-data:
mariadb-data:
zabbix-server-scripts:
GUI访问zabbix地址: http://虚拟机的ip:8082/
2. zabbix 6.0的docker-compose.yaml文件:
version: '3'
services:
zabbix-server:
image: zabbix/zabbix-server-mysql:6.0-centos-latest
container_name: zabbix-server
restart: always
ports:
- 10051:10051
environment:
DB_SERVER_HOST: db
MYSQL_DATABASE: zabbix
MYSQL_USER: root
MYSQL_PASSWORD: zabbix
volumes:
- "zabbix-server-data:/var/lib/zabbix/"
- "zabbix-server-scripts:/usr/lib/zabbix/"
depends_on:
- db
extra_hosts:
- "mysql.bboysoul.com:10.10.10.200"zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:6.0-centos-latest
container_name: zabbix-web
restart: always
ports:
- "80:8080"
environment:
DB_SERVER_HOST: db
MYSQL_DATABASE: zabbix
MYSQL_USER: root
MYSQL_PASSWORD: zabbix
ZBX_SERVER_NAME: zabbix-server
PHP_TZ: Asia/Shanghai
depends_on:
- zabbix-server
- db
db:
image: mariadb:10.6.5
container_name: zabbix-db
restart: always
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: root
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: zabbix
volumes:
- mariadb-data:/var/lib/mysql
command:
--character-set-server=utf8
--collation-server=utf8_binvolumes:
zabbix-server-data:
mariadb-data:
zabbix-server-scripts:
另外一个版本:
version: '3.7'
services:
mysql-server:
image: mysql:8.0.31
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_DATABASE: zabbix
command:
--character-set-server=utf8mb4
--collation_server=utf8mb4_bin
--default-authentication-plugin=mysql_native_password
volumes:
- "/etc/localtime:/etc/localtime"
- "/zabbix6.0/mysql:/var/lib/mysql"
security_opt:
- seccomp:unconfined
ports:
- "3306:3306"
networks:
- zbx_net
restart: alwayszabbix-server:
image: zabbix/zabbix-server-mysql:6.0-centos-latest
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ports:
- "10051:10051"
depends_on:
- "mysql-server"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- "zabbix:/var/lib/zabbix"
networks:
- zbx_net
restart: alwayszabbix-web:
image: zabbix/zabbix-web-nginx-mysql:6.0-centos-latest
volumes:
#- ./simsun.ttc:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf
- /etc/localtime:/etc/localtime
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
PHP_TZ: Asia/Shanghai
ZBX_SERVER_HOST: zabbix-server
ports:
- 8088:8080
depends_on:
- mysql-server
- zabbix-server
networks:
- zbx_net
restart: alwaysnetworks:
zbx_net:
volumes:
zabbix:
# 安装完后,mysql-server 应该会一直restart, 此时docker logs 查看报错annot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?), GUI上报错Unable to select configuration#mysql -uroot -p
#>drop database zabbix;
#
# >create database zabbix character set utf8 collate utf8_bin;
#
# > grant all privileges on zabbix.* to 'zabbix'@'%' ;
#
# > flush privileges;
#root@node2:~# find / -name create.sql.gz
#cp /var/lib/docker/overlay2/37b310eac2ee5e6fb4bc706bf133f74d3e587dfd11c4440420e3ec2e90defd1d/diff/usr/share/doc/zabbix-server-mysql/create.sql.gz zabbix60_mysql-server_1:/tmp#进入容器,解压gz
# gunzip /tmp/create.sql.gz
#进入mysql数据库,导入初始化数据
#use zabbix;
#> source /tmp/create.sql;
GUI访问zabbix地址: http://虚拟机的ip:8088/