Vagrant продукт компании HashiCorp, специализирующейся на инструментах для автоматизации разработки и эксплуатации
Скачать 435 Kb.
|
\.php$ {INSTALLSCRIPTПодключение по sshПо умолчанию подключиться к виртуальной машине можно с помощью команды $ vagrant sshКопировать При этом используются ssh-ключи, которые Vagrant добавляет на этапе создания виртуальной машины. Если по каким-то причинам это не устраивает, можно задать имя пользователя и пароль для входа. Тогда можно будет входить как с использованием логина и пароля, так и с использованием ssh-ключей. Vagrant.configure(2) do |config| # образ системы Ubuntu 18/04 LTS (Bionic Beaver) config.vm.box = "bento/ubuntu-18.04" # не проверять репозиторий на наличие обновлений config.vm.box_check_update = false # имя пользователя config.ssh.username = 'vagrant' # пароль пользователя config.ssh.password = 'vagrant' # можно подключаться по паролю config.ssh.keys_only = false config.vm.provider "virtualbox" do |vb| # имя виртуальной машины vb.name = "ubuntu-1804-test" # объем оперативной памяти vb.memory = 2048 # количество ядер процессора vb.cpus = 1 end # hostname виртуальной машины config.vm.hostname = "ubuntu-1804-test" endКопировать Подключиться с использованием логина и пароля: $ ssh -p2222 vagrant@127.0.0.1 The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts. vagrant@127.0.0.1's password: vagrant Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Nov 23 10:27:52 UTC 2019 System load: 0.08 Processes: 88 Usage of /: 2.5% of 61.80GB Users logged in: 0 Memory usage: 5% IP address for eth0: 10.0.2.15 Swap usage: 0% * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/commands#microk8s.status 0 packages can be updated. 0 updates are security updates. This system is built by the Bento project by Chef Software More information can be found at https://github.com/chef/bento/README.md Last login: Sat Nov 23 10:17:43 2019Копировать Или просто запустить виртуальную машину и ввести логин-пароль: По поводу ssh-ключейВ более ранних версиях Vagrant для подключения к виртуальной машине использовался ключ |
echo Installing Nginx
apt-get install -y nginx
echo Installing MySQL
apt-get install -y mysql-server
echo Installing PHP
apt-get install -y php-fpm php-mysql
SCRIPT
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.provision "shell", inline: $script
endКопировать
$update = <<
apt-get install -y nginx
apt-get install -y mysql-server
apt-get install -y php-fpm php-mysql
INSTALL
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.provision "update", type: "shell", inline: $update
config.vm.provision "install", type: "shell", inline: $install
endКопировать
Или вообще вынести в отдельный shell-файл:
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.provision "shell", path: "provision.sh"
endКопировать
echo 'Installing Nginx'
apt-get install -y nginx
echo 'Installing MySQL'
apt-get install -y mysql-server
echo 'Installing PHP'
apt-get install -y php-fpm php-mysqlКопировать
Поставщики (provisioners) выполняются в трех случаях:
при начальном vagrant up
по команде vagrant provision
по команде vagrant reload --provision
Команды vagrant up|reload могут быть запущены с ключом --no-provision, чтобы пропустить инструкции provision.
Если у каждого поставщика есть имя, то можно выполнить только его:
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.provision "update", type: "shell", path: "update.sh"
config.vm.provision "install", type: "shell", path: "install.sh"
endКопировать
$ vagrant provision --provision-with updateКопировать
Несколько виртуальных машин
Допускается создание нескольких виртуальных машин в одном Vagrantfile:
Vagrant.configure(2) do |config|
# образ системы Ubuntu 18/04 LTS (Bionic Beaver)
config.vm.box = "bento/ubuntu-18.04"
# не проверять репозиторий на наличие обновлений
config.vm.box_check_update = false
# отменить создание ssh-ключа
config.ssh.insert_key = false
# ПЕРВАЯ ВИРТУАЛЬНАЯ МАШИНА
config.vm.define "web-server" do |subconfig|
# имя виртуальной машины
subconfig.vm.provider "virtualbox" do |vb|
vb.name = "apache-server"
end
# hostname виртуальной машины
subconfig.vm.hostname = "apache-server"
# настройки сети
subconfig.vm.network "private_network", ip: "192.168.53.3"
# установка пакетов
subconfig.vm.provision "apache", type: "shell", inline: "apt-get install -y apache2"
end
# ВТОРАЯ ВИРТУАЛЬНАЯ МАШИНА
config.vm.define "sql-server" do |subconfig|
# имя виртуальной машины
subconfig.vm.provider "virtualbox" do |vb|
vb.name = "mysql-server"
end
# hostname виртуальной машины
subconfig.vm.hostname = "mysql-server"
# настройки сети
subconfig.vm.network "private_network", ip: "192.168.53.4"
# установка пакетов
subconfig.vm.provision "mysql", type: "shell", inline: "apt-get install -y mysql-server"
end
# обновление системы (для первой и второй)
config.vm.provision "update", type: "shell", inline: "apt-get update && apt-get upgrade -y"
endКопировать
Запускаем виртуальные машины:
$ vagrant up
Bringing machine 'web-server' up with 'virtualbox' provider...
Bringing machine 'sql-server' up with 'virtualbox' provider...Копировать
Ход установки первой виртуальной машины:
==> web-server: Importing base box 'bento/ubuntu-18.04'...
==> web-server: Matching MAC address for NAT networking...
==> web-server: Setting the name of the VM: apache-server
==> web-server: Clearing any previously set network interfaces...
==> web-server: Preparing network interfaces based on configuration...
web-server: Adapter 1: nat
web-server: Adapter 2: hostonly
==> web-server: Forwarding ports...
web-server: 22 (guest) => 2222 (host) (adapter 1)
==> web-server: Booting VM...
==> web-server: Waiting for machine to boot. This may take a few minutes...
web-server: SSH address: 127.0.0.1:2222
web-server: SSH username: vagrant
web-server: SSH auth method: private key
==> web-server: Machine booted and ready!
==> web-server: Checking for guest additions in VM...
==> web-server: Setting hostname...
==> web-server: Configuring and enabling network interfaces...
==> web-server: Mounting shared folders...
web-server: /vagrant => D:/vagrant/www
==> web-server: Running provisioner: update (shell)...
web-server: Running: inline script
********** обновление системы **********
==> web-server: Running provisioner: apache (shell)...
web-server: Running: inline script
********** установка Apache **********Копировать
Ход установки второй виртуальной машины:
==> sql-server: Importing base box 'bento/ubuntu-18.04'...
==> sql-server: Matching MAC address for NAT networking...
==> sql-server: Setting the name of the VM: mysql-server
==> sql-server: Fixed port collision for 22 => 2222. Now on port 2200.
==> sql-server: Clearing any previously set network interfaces...
==> sql-server: Preparing network interfaces based on configuration...
sql-server: Adapter 1: nat
sql-server: Adapter 2: hostonly
==> sql-server: Forwarding ports...
sql-server: 22 (guest) => 2200 (host) (adapter 1)
==> sql-server: Booting VM...
==> sql-server: Waiting for machine to boot. This may take a few minutes...
sql-server: SSH address: 127.0.0.1:2200
sql-server: SSH username: vagrant
sql-server: SSH auth method: private key
==> sql-server: Machine booted and ready!
==> sql-server: Checking for guest additions in VM...
==> sql-server: Setting hostname...
==> sql-server: Configuring and enabling network interfaces...
==> sql-server: Mounting shared folders...
sql-server: /vagrant => D:/vagrant/www
==> sql-server: Running provisioner: update (shell)...
sql-server: Running: inline script
********** обновление системы **********
==> sql-server: Running provisioner: mysql (shell)...
sql-server: Running: inline script
********** установка MySQL **********Копировать
Остановить обе виртуальные машины:
$ vagrant halt
==> sql-server: Attempting graceful shutdown of VM...
==> web-server: Attempting graceful shutdown of VM...Копировать
Запустить обе виртуальные машины:
$ vagrant upКопировать
Подключение по ssh к первой машине:
$ vagrant ssh web-serverКопировать
Остановить вторую виртуальную машину:
$ vagrant halt sql-serverКопировать
Установка Nginx, MySQL и PHP
Во время создания виртуальной машины Vagrant запустит скрипт provision.sh, который установит Nginx, MySQL, PHP + создаст два виртуальных хоста.
Vagrant.configure(2) do |config|
# образ системы Ubuntu 18/04 LTS (Bionic Beaver)
config.vm.box = "bento/ubuntu-18.04"
# не проверять репозиторий на наличие обновлений
config.vm.box_check_update = false
# отменить создание ssh-ключа
config.ssh.insert_key = false
config.vm.provider "virtualbox" do |vb|
# имя виртуальной машины
vb.name = "ubuntu-1804-test"
# объем оперативной памяти
vb.memory = 2048
# количество ядер процессора
vb.cpus = 1
end
# hostname виртуальной машины
config.vm.hostname = "ubuntu-1804-test"
# настройки сети
config.vm.network "public_network"
# синхронизация директорий
config.vm.synced_folder ".", "/var/www"
# установка пакетов
config.vm.provision "shell", path: "provision.sh"
endКопировать
apt-get update
apt-get -y upgrade
apt-get install -y nginx
apt-get install -y mysql-server
apt-get install -y php-fpm php-mysql
# создаем две директории для двух виртуальных хостов
mkdir /var/www/site1.loc
mkdir /var/www/site2.loc
# создаем в каждой из этих директорий php-файл
echo '' > /var/www/site1.loc/index.php
echo '' > /var/www/site2.loc/index.php
# создаем два виртуальных хоста
cat > /etc/nginx/sites-available/site1.loc <
server {
# слушать порт 80
listen 80;
# директория сайта
root /var/www/site1.loc;
# индексные файлы
index index.php index.html;
# домен сайта
server_name site1.loc www.site1.loc;
location / {
try_files \$uri \$uri/ =404;
}
# PHP скрипты передаются на выполнение FastCGI серверу
location