Статья
Установка и настройка Vagrant в Ubuntu 16.04

Установка и настройка Vagrant в Ubuntu 16.04

3 июня 2017

Установка Vagrant в Ubuntu 16.04

Установим самую последнюю версию на данный момент из репозитория Ubuntu

sudo apt install virtualbox vagrant

или с сайта Vagrant

sudo apt install virtualbox
wget https://releases.hashicorp.com/vagrant/1.9.2/vagrant_1.9.2_x86_64.deb
sudo dpkg -i vagrant_1.9.2_x86_64.deb
rm -f vagrant_1.9.2_x86_64.deb


Настройка конфигурации бокса, Nginx, PHP-FPM, MySQL, виртуальных хостов

В домашней директории текущего пользователя будет следующая структура файлов и директорий:

~/Vagrant
└── php-server
    ├── bootstrap.sh
    ├── nginx
    │   └── test.com
    └── Vagrantfile


Основной файл - это Vagrantfile. Именно в нем содержатся настройки виртуальной машины:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/xenial64"

  config.vm.network "forwarded_port", guest: 80, host: 80

  config.vm.synced_folder "/var/www/test.com", "/var/www/test.com"

  config.vm.provision "shell", path: "bootstrap.sh"

end


Добавим файл bootstrap.sh, который служит для установки дополнительного программного обеспечения на виртуальной машине:

#!/usr/bin/env bash

export DEBIAN_FRONTEND=noninteractive

sudo apt update
sudo apt -y upgrade
sudo apt install -y mc nano curl git debconf-utils

# NGINX
sudo apt install -y nginx
sudo cp /vagrant/nginx/* /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/* /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

# PHP-FPM
sudo apt install -y php7.0-cli php7.0-common php7.0-mysql php7.0-gd php7.0-fpm php7.0-cgi php7.0-mcrypt php7.0-curl php7.0-json php7.0-mbstring php7.0-intl
sudo sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.0/cli/php.ini
sudo sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.0/cli/php.ini
sudo sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini

# COMPOSER
sudo curl -sS https://getcomposer.org/installer | php
chmod 755 composer.phar
mv composer.phar /usr/local/bin/composer

# MYSQL
debconf-set-selections <<< "mysql-server mysql-server/root_password password 12345"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password 12345"
sudo apt install -y mysql-server

sudo usermod -a -G www-data vagrant
sudo systemctl stop nginx.service php7.0-fpm.service mysql.service
sudo systemctl enable nginx.service php7.0-fpm.service mysql.service
sudo systemctl start nginx.service php7.0-fpm.service mysql.service


В директории nginx располагаются файлы виртуальных хостов.
Пример настройки хоста (файл test.com):

server {
    listen 80;
    server_name test.com www.test.com;
    root /var/www/test.com/www/;
    index index.php;

    charset utf-8;
    client_max_body_size 128M;
    sendfile off;

    access_log /var/log/nginx/test.com_access.log;
    error_log /var/log/nginx/test.com_error.log;

    location ~* \. (eot|svg|ttf|woff|txt|jpeg|jpg|gif|png|ico|css|tgz|gz|rar|bz2|doc|xls|exe|pdf)$ {
        expires 480h;
        root /var/www/test.com/www/;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/var/run/php7-fpm.sock;
        try_files $uri =404;
    }

    location ~ /\.ht {
        deny all;
    }
}


Директива sendfile off добавлена, т.к. иногда возникают проблемы с отдачей статики (браузер может получать старый контент).

Добавим в /etc/hosts:

127.0.0.1   test.com
127.0.0.1   www.test.com


Запуск виртуальной машины

Переходим в директорию с Vagrantfile и выполняем команду:

vagrant up


Должен загрузиться бокс (первый запуск длится довольно долго), установлены и настроены Nginx, PHP-FPM, MySQL, Composer. После успешного запуска виртуальной машины сайт должен быть доступен по адресу test.com.


Примечания:

MySQL доступен через SSH-туннель (хост 127.0.0.1, порт 2222, пользователь ubuntu, файл ключа /home/dima/Vagrant/server/.vagrant/machines/default/virtualbox/private_key) с следующими параметрами подключения к MySQL - хост 127.0.0.1, порт 3306, пользователь root, пароль 12345.

Можно создать алиасы основных команд для данной виртуальной машины. В файл .bash_aliases в корневой директории пользователя, под которым вы работаете, добавим строки:

alias php-server-start="cd ~/Vagrant/php-server && vagrant up"
alias php-server-stop="cd ~/Vagrant/php-server && vagrant halt"
alias php-server-ssh="cd ~/Vagrant/php-server && vagrant ssh"


Чтобы изменения были приняты, выполните

. ~/.bashrc


Теперь запустить сервер можно командой php-server-start, остановить - php-server-stop, доступ по SSH - php-server-ssh.


Источники:

https://www.vagrantup.com/docs/