vagrant基础

Chapter 1 - vagrant简介

  • vagrant 官网:https://www.vagrantup.com/
  • vagrant 官方文档: https://www.vagrantup.com/docs
  • vagrant image box:https://app.vagrantup.com/boxes/search

vagrant基本概念

vagrant可方便地管理各种类型的虚拟机,包括virtualbox、hyper-v、docker、vmware、kvm。它是vmware/virtualbox/hyperv等虚拟化管理工具的上层集成式管理工具、虚拟机自动化配置工具、虚拟机批量管理工具。支持Windows、MAC以及Linux。

vagrant

vagrant管理虚拟机常用子命令功能介绍

vagrant的子命令不少,可使用vagrant -h列出vagrant默认支持的子命令,使用vagrant list-commands查看vagrant支持的所有子命令(包括因安装插件而增加的子命令)。

这里只是简单概括常用子命令的功能。

子命令功能说明
box管理box镜像(box是创建虚拟机的模板)
init初始化项目目录,将在当前目录下生成Vagrantfile文件
up启动虚拟机,第一次执行将创建并初始化并启动虚拟机
reload重启虚拟机
halt将虚拟机关机
destroy删除虚拟机(包括虚拟机文件)
suspend暂停(休眠、挂起)虚拟机
resume恢复已暂停(休眠、挂起)的虚拟机
snapshot管理虚拟机快照(hyperv中叫检查点)
status列出当前目录(Vagrantfile所在目录)下安装的虚拟机列表及它们的状态
global-status列出全局已安装虚拟机列表及它们的状态
ssh通过ssh连接虚拟机
ssh-config输出ssh连接虚拟机时使用的配置项
port查看各虚拟机映射的端口列表(hyperv不支持该功能)
  1. vagrant box
    1. vagrant box list
    2. vagrant box add [options] <name, url, or path>
      1. vagrant box add generic/centos8 --provider=docker
      • [virtualbox/libvirt/docker...]
  2. vagrant init [options] [name [url]]
  3. vagrant up [options] [name|id]
  4. vagrant destroy [options] [name|id]
  5. vagrant status [name|id]
  6. vagrant global-status
  7. vagrant ssh [options] [name|id] [-- extra ssh args]
  8. vagrant ssh-config [options] [name|id]

Chapter 2 - 安装vagrant

安装vagrant

要安装Vagrant,请先找到适合您系统的软件包并下载。Vagrant被打包为特定于操作的程序包。运行系统的安装程序。安装程序将自动添加 vagrant到您的系统路径,以便在终端中可用。

wget wget https://releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_x86_64.deb
dpkg -i vagrant_2.2.14_x86_64.deb

安装libvirt插件

# 需要安装 libvirt 开发包
sudo apt install libvirt-dev
vagrant plugin install vagrant-libvirt --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

设置VAGRANT_HOME

vagrant在执行子命令box add、init、up等命令时,都可能会去下载所需的虚拟机镜像文件,即Box image。

这些镜像文件默认放在~/.vagrant.d目录(Linux)

echo 'export VAGRANT_HOME="/data/.vagrant.d"' >>~/.bashrc

命令自动补全

vagrant autocomplete
source ~/.bashrc

一些常用的插件

vagrant-hostmanager - 各个虚拟机之间,及虚拟机与host之间互信认证

vagrant-rsync-back - guest虚拟机数据同步回主机

Chapter 3 - 使用vagrant创建虚拟机示例

使用vagrant创建虚拟机centos 8示例

Download CentOS 8 Vagrant box

使用下面的命令下载适合自己虚拟环境的Vagrant box

# kvm 虚拟机
vagrant box add centos/8 --provider=libvirt

# virtualbox
vagrant box add centos/8 --provider=virtualbox

# VMware
vagrant box add generic/centos8 --provider=vmware_desktop

由于外网访问慢,可以下载后再添加

wget https://cloud.centos.org/centos/8/vagrant/x86_64/images/CentOS-8-Vagrant-8.3.2011-20201204.2.x86_64.vagrant-libvirt.box

vagrant box add centos/8 ./CentOS-8-Vagrant-8.3.2011-20201204.2.x86_64.vagrant-libvirt.box

Create Vagrantfile for CentOS 8

创建Vagrantfile

$ mkdir -p ~/vagrant/centos8 && cd ~/vagrant/centos8
$ vim Vagrantfile
  • kvm
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'

Vagrant.configure("2") do |config|

  ##### DEFINE VMS #####
  config.vm.define "centos8" do |config|
  config.vm.hostname = "centos8"
  config.vm.box = "centos/8"
  config.vm.box_check_update = false
  end
  config.vm.provider :libvirt do |v|
    v.memory = 1024
    v.cpus = 2
  end
end
  • virtualbox
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/8"
  config.vm.box_check_update = false
  config.vm.hostname = "centos8"
  config.vm.provider "virtualbox" do |vb|
  # Display the VirtualBox GUI when booting the machine
     vb.gui = false
     vb.memory = "2048"
     vb.cpus = 2
  end
end

创建好 Vagrantfile,启动vm

vagrant up

测试ssh

vagrant ssh

Chapter 4 - 批量创建虚拟机示例

创建虚拟机集群

编写Vagrantfile配置文件

Vagrant.configure("2") do |config|
	config.vm.define "master" do |master|

	end
	config.vm.define "node-1" do |node_1|

	end
	config.vm.define "node-2" do |node_2|

	end
	config.vm.define "docker-register" do |docker-register|

	end
end

最终结果

Vagrant.configure("2") do |config|
	#####################################################################
	# 全局配置
	#####################################################################
	config.vm.box = "centos/8"
	config.vm.network "public_network", bridge: "eth0"

	#===================================================================#
	# 互信认证
	#===================================================================#
	# 激活hostmanager插件
	config.hostmanager.enabled = true

	# 在宿主机上的hosts文件中添加虚拟机的主机名解析信息
	config.hostmanager.manage_host = true

	# 在各自虚拟机中添加各虚拟机的主机名解析信息
	config.hostmanager.manage_guest = true

	# 不忽略私有网络的地址
	config.hostmanager.ignore_private_ip = false
	#===================================================================#

	# libvirt相关配置
	config.vm.provider "libvirt" do |v|
		# 设置虚拟机的内存大小
		v.memory = 2048
		# 设置虚拟机的CPU个数
		v.cpus = 1
	end

	# 使用shell脚本进行软件安装和配置
	config.vm.provision "shell", inline: <<-SHELL
     echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
     sed -in 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
     systemctl restart sshd
	SHELL
	#####################################################################

	#####################################################################
	# 局部配置
	#####################################################################
	config.vm.define "master" do |master|
		# 设置虚拟机的主机名
		master.vm.hostname="k8s-master"
		# 设置虚拟机的IP 192.168.121.*/24
		master.vm.network "private_network", ip: "192.168.121.11"
		# 使用shell脚本进行软件安装和配置
		master.vm.provision "shell", inline: <<-SHELL
			yum -y install docker
		SHELL
	end
	#####################################################################
	config.vm.define "node-1" do |node_1|
		node_1.vm.hostname="k8s-node-01"
		node_1.vm.network "private_network", ip: "192.168.121.12"
	end
	config.vm.define "node-2" do |node_2|
		node_2.vm.hostname="k8s-node-02"
		node_2.vm.network "private_network", ip: "192.168.121.13"
	end
	config.vm.define "docker-register" do |register|
		register.vm.hostname="k8s-docker-register"
		register.vm.network "private_network", ip: "192.168.121.14"
	end
end


Chapter 5 - 如何制作vagrant image box

  1. 通过ks自动化安装虚拟机 https://git.centos.org/centos/kickstarts/blob/master/f/CentOS-8-Stream-x86_64-Vagrant.ks

  2. 使用脚本 create_box.sh qcow2 打包为box https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/tools/create_box.sh

maven基础

rust学习

参考文档

目录结构

快速入门-环境搭建

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Cheat Sheet

httpd 相关

添加登录认证

  • 参考链接: https://blog.51cto.com/llk726/121365
  1. 第一步:修改httpd配置

    修改Apache的配置文件/etc/httpd/conf/httpd.conf,对需要认证的资源所在的目录进行配置。具体配置如下:

    vim /etc/httpd/conf/httpd.conf
    
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        Allowoverride AuthConfig
        Order allow,deny
        Allow from all
    </Directory>
    

    其中,Allowoverride AuthConfig /var/www/html目录下的内容进行用户认证

  2. 第二步: 在限制访问目录/var/www/html下创建文件.htaccess,其内容如下:

    vim /var/www/html/.htaccess
    AuthName " my share web"
    AuthType Basic
    AuthUserFile /var/www/html/.htpasswd
    require valid-user
    #AuthName 描述,随便写
    #AuthUserFile /var/www/html/.htpasswd
    

    密码文件推荐使用.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一点哦。 说明:文件.htaccess中常用的配置命令有以下几个:

    • AuthName命令:指定认证区域名称。区域名称是在提示要求认证的对话框中显示给用户的
    • AuthType命令:指定认证类型。在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5。
    • AuthUserFile命令:指定一个包含用户名和密码的文本文件,每行一对。
    • AuthGroupFile命令:指定包含用户组清单和这些组的成员清单的文本文件。组的成员之间用空格分开,如: managers:user1 user2
    • require命令:指定哪些用户或组才能被授权访问。如:
      1. require user user1 user2(只有用户user1和user2可以访问)
      2. requiresgroupsmanagers (只有组managers中成员可以访问)
      3. require valid-user (在AuthUserFile指定的文件中任何用户都可以访问)
  3. 第三步: 创建httpd的验证用户

    第一次添加用户时.htpasswdt文件不存在,需要用-c选项创建文件

    htpasswd -bc /var/www/html/.htpasswd dev dev
    htpasswd -b  /var/www/html/.htpasswd test test
    
  4. 第四步:重启httpd

    systemctl restart httpd
    
    curl -u username:password [url]
    wget --http-user=username --http-passwd=password  [url]