Главная страница
Навигация по странице:

  • Установка пакетов

  • Несколько виртуальных машин

  • Установка Nginx, MySQL и PHP

  • Синхронизация директорий

  • Vagrant продукт компании HashiCorp, специализирующейся на инструментах для автоматизации разработки и эксплуатации


    Скачать 435 Kb.
    НазваниеVagrant продукт компании HashiCorp, специализирующейся на инструментах для автоматизации разработки и эксплуатации
    Дата03.12.2021
    Размер435 Kb.
    Формат файлаdoc
    Имя файлаVagrant.doc
    ТипДокументы
    #290205
    страница4 из 5
    1   2   3   4   5

    Подключение по 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 для подключения к виртуальной машине использовался ключ /.vagrant.d/insecure_private_key. Но теперь Vagrant выдает предупреждение, что обнаружен небезопасный ключ и заменяет его:

    ==> default: Booting VM...

    ==> default: Waiting for machine to boot. This may take a few minutes...

    default: SSH address: 127.0.0.1:2222

    default: SSH username: vagrant

    default: SSH auth method: private key

    default:

    default: Vagrant insecure key detected. Vagrant will automatically replace

    default: this with a newly generated keypair for better security.

    default:

    default: Inserting generated public key within guest...

    default: Removing insecure key from the guest if it's present...

    default: Key inserted! Disconnecting and reconnecting using new SSH key...

    ==> default: Machine booted and ready!Копировать

    Этот ключ расположен в где-то в недрах директрории .vagrant (создается после первого запуска vagrant up). Посмотреть, какой ключ будет использован, можно с помощью команды:

    $ vagrant ssh-config

    Host default

    HostName 127.0.0.1

    User vagrant

    Port 2222

    UserKnownHostsFile /dev/null

    StrictHostKeyChecking no

    PasswordAuthentication no

    IdentityFile D:/vagrant/www/.vagrant/machines/default/virtualbox/private_key

    IdentitiesOnly yes

    LogLevel FATALКопировать

    Можно отменить создание ssh-ключа, если добавить в файл конфигурации config.ssh.insert_key = false:

    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"

    end

    Установка пакетов

    Для автоматической установки и настройки программного обеспечения предназначена настройка config.vm.provision. Мы будем использовать самый простой способ — shell-скрипт, но доступны также и другие варианты — Ansible, Chef, Puppet. Рассмотрим пример:

    Vagrant.configure(2) do |config|

    config.vm.box = "bento/ubuntu-18.04"

    config.vm.provision "nginx", type: "shell", inline: "echo Installing Nginx; apt-get install -y nginx"

    config.vm.provision "mysql", type: "shell", inline: "echo Installing MySQL; apt-get install -y mysql-server"

    config.vm.provision "php", type: "shell", inline: "echo Installing PHP; apt-get install -y php-fpm php-mysql"

    endКопировать

    При установке Vagrant выдает сообщения:

    $ vagrant up

    ..........

    ==> default: Running provisioner: nginx (shell)...

    default: Running: inline script

    default: Installing Nginx

    ..........

    ==> default: Running provisioner: mysql (shell)...

    default: Running: inline script

    default: Installing MySQL

    ..........

    ==> default: Running provisioner: php (shell)...

    default: Running: inline script

    default: Installing PHP

    ..........Копировать

    Если команд много, их удобно объединить:

    $script = <<SCRIPT

    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 = <<UPDATE

    apt-get update

    apt-get -y upgrade

    UPDATE

    $install = <<INSTALL

    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 \.php$ {

    include snippets/fastcgi-php.conf;

    # With php-fpm (or other unix sockets):

    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

    }

    }

    EOF
    cat > /etc/nginx/sites-available/site2.loc <
    server {

    # слушать порт 80

    listen 80;

    # директория сайта

    root /var/www/site2.loc;

    # индексные файлы

    index index.php index.html;

    # домен сайта

    server_name site2.loc www.site2.loc;
    location / {

    try_files \$uri \$uri/ =404;

    }
    # PHP скрипты передаются на выполнение FastCGI серверу

    location \.php$ {

    include snippets/fastcgi-php.conf;

    # With php-fpm (or other unix sockets):

    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

    }

    }

    EOF
    ln -s /etc/nginx/sites-available/site1.loc /etc/nginx/sites-enabled/

    ln -s /etc/nginx/sites-available/site2.loc /etc/nginx/sites-enabled/
    echo '' >> '/etc/hosts'

    echo '127.0.0.1 site1.loc www.site1.loc' >> '/etc/hosts'

    echo '127.0.0.1 site2.loc www.site2.loc' >> '/etc/hosts'
    systemctl reload nginxКопировать

    Синхронизация директорий

    По умолчанию синхронизируется директория, где расположен Vagrantfile на хост-системе с директорией /vagrant виртуальной машины. Это можно изменить с помощью настройки config.vm.synced_folder: указывается абсолютный или относительный путь для хост-системы и абсолютный — для виртуальной машины.

    В нашем случае синхронизируется директория d:/vagrant/www с директорией /var/www. Таким образом, будут синхронизированы и вложенные директории виртуальных хостов:

    d:/vagrant/www/site1.loc <=> /var/www/site1.loc # первый виртуальный хост

    d:/vagrant/www/site2.loc <=> /var/www/site2.loc # второй виртуальный хостКопировать

    У меня в настройках для второго адаптера используется сетевой мост, так что виртуальная машина является частью той же сети, что и хост-система. Через web-интерфейс роутера, который выдает ip-адреса всем устройствам локальной сети, можно закрепить за виртуальной машиной выданный ip-адрес — у меня это 192.168.110.12. А чтобы получить доступ к сайтам на виртуальной машине — добавить пару записей в host-файл основной системы.

    192.168.110.12 site1.loc www.site1.loc

    192.168.110.12 site2.loc www.site2.locКопировать
    1   2   3   4   5


    написать администратору сайта