Laravel Homestead: установка, настройка, создание / импорт базы данных

Laravel Homestead: установка, настройка, создание / импорт базы данных

Вкратце рассмотрим как установить и настроить Homestead на Ubuntu и Windows 10, а также создать базу данных и импортировать таблицы.

Зачем вообще это нужно?

Во-первых, нет необходимости устанавливать и настраивать всё необходимое ПО, поскольку оно уже включено в бокс. А это, согласитесь очень удобно и требует гораздо меньших временных затрат. Во-вторых, боксы позволяют моментально получить практически одинаковое окружение на разных машинах - достаточно лишь передать Vagrantfile. В-третьих, бокс можно быстро как удалять, так и восстанавливать со всеми необходимыми настройками (подробнее об этом читайте в доках Vagrant)

Почему Homestead? Довольно большой выбор обеспечения - серверы Nginx и Apache, php от 5.6 до 7.3, composer, Node, различные БД на любой вкус и т.д. Также надо понимать, что Homestead - это не только проекты Laravel. Делайте, всё что пожелаете хоть на нативном php, хоть на других фреймворках (те же разработчики Symfony рекомендуют посмотреть в сторону данного бокса).

Установка и настройка Homestead

Установка под Ubuntu и под Windows 10 отличаются лишь небольшими нюансами, о которых я упомяну, в остальном же порядок действий идентичен. 

Сначала скачиваем инсталляторы для своей системы и устанавливаем Virtual Box и Vagrant. После чего добавляем бокс laravel/homestead следующей командой:

vagrant box add laravel/homestead

 

Этот бокс может работать с различными провайдерами, поэтому будет предложен выбор. В нашем случае это Virtual Box. Выбираем, т.е. вводим число соответствующую своему выбору и жмём Enter. 

Далее нужно клонировать репозиторий Homestead. Директория - на Ваше усмотрение. В Ubuntu я создал каталог web в своей домашней директории, в Windows - на диске С. В обоих случаях (из директории web и корня диска С, соответственно) выполняем команду:

git clone https://github.com/laravel/homestead.git Homestead

 

Теперь переходим в только что созданный каталог Homestead, пишем в консоли:

bash init.sh    // для Ubuntu

init.bat        // для Windows

 

и снова Enter. В результате этого действия будет инициализирован Homestead и в его корне будет создан файл Homestead.yaml с настройками, которые необходимо отредактировать "под себя".

В первую очередь нужно указать пути к ssh ключам. Если таковых нет - сгенерируйте их:

ssh-keygen -t rsa -C "your_email"

 

Ключи будут записаны в скрытый каталог .ssh вашей домашней директории, т.е. в Ubuntu это /home/YOUR_NAME/.ssh, а в Windows 10 C:\Users\YOUR_NAME\.ssh. Именно эти пути указаны в Homestead.yaml, поэтому настройки ключей оставляем как есть. Более подробно останавливаться на этой тему не буду - не об этом речь - упомяну лишь, что ключи необходимы для авторизации на различных сервисах.

Теперь подумаем, где размещать проекты. Поскольку в Linux нет деления на диски, в Ubuntu в той же папке web я создам каталог projects. В Windows поступим по-другому. Если проекты будут лежать на диске С и слетит система, все труды уйдут в никуда вместе с ОС. Понятно, что важные работы наверняка будут запушены на Github/Gitlab/Bitbucket, но ведь наверняка будут и какие-то мелочи, для которых и репозитории создавать как бы ни к чему, но и потерять не хотелось бы. Посему, папку для проектов создадим на другом диске, например D.

Сразу создадим какой-нибудь проект для проверки. В директории projects создаём папку test, в которой, в свою очередь, создадим простенький файл index.php с таким содержимым:

<?php

echo 'Yeap!';

 

Возвращаемся в Homestead.yaml и редактируем пути. Вариант для Ubuntu:

folders:
    - map: ~/web/projects
      to: /home/vagrant/projects

sites:
    - map: test.xx
      to: /home/vagrant/projects/test

 

и для Windows:

folders:
    - map: d:\web\projects
      to: /home/vagrant/projects

sites:
    - map: test.xx
      to: /home/vagrant/projects/test

 

Для того, чтобы всё заработало надо также прописать хост. В Ubuntu открываем файл hosts любым редактором (я воспользуюсь nano) и добавляем хост. Другими словами, в терминале даём команду:

sudo nano /etc/hosts

 

и дописываем строку:

192.168.10.10    test.xx

 

Если же работаем в Windows, от имени администратора открываем C:\Windows\System32\drivers\etc\hosts и добавляем точно такую же строку. Сохраняемся и закрываем.

Всё готово к работе. Заходим в папку Homestead и запускаем Vagrant:

vagrant up

 

Теперь в адресной строке браузера пишем test.xx и, если всё было сделано правильно, увидим в браузере "Yeap!"

Создание базы данных, импорт таблиц

Поскольку проектов под Homestead скорее всего будет более одного, логично для каждого из них создать свою базу данных. Делается это чрезвычайно просто - нужно добавить название базы данных в файл Homestead.yaml. Например, создадим БД test:

databases:
    - homestead
    - test

 

Выполним команду:

vagrant provision

 

После того, как команда отработает, в выводе консоли среди прочих строк увидим:

==> homestead-7: Running provisioner: shell...
    homestead-7: Running: script: Creating MySQL Database: test
==> homestead-7: Running provisioner: shell...
    homestead-7: Running: script: Creating Postgres Database: test

 

То бишь, homestead создаст базу и в MySQL, и в PostgreSQL. Реквизиты доступа всё те же, но дабы избежать лишних вопросов, приведу все настройки соединения. Для MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=homestead
DB_PASSWORD=secret

 

Для PostgreSQL: 

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=homestead
DB_PASSWORD=secret

 

Работа с БД из консоли

Разумеется, работать с базой надо внтури Homestead, поэтому выполним:

vagrant ssh

 

MySQL

Команда подключения такова: 

mysql -u homestead -p

 

Далее вводим пароль (secret) и, грубо говоря, делаем что хотим - можем создавать, редактировать, удалять базы и таблицы. Пару простых команд:

show databases;     // показать список баз данных
use db_name;        // переключиться на бд db_name
create database db_name;  // создать базу данных db_name
drop database db_name;    // удалить базу данных db_name
exit                // выйти из mysql-cli

 

PostgreSQL

Подключаемся следующим образом:

psql -U homestead -h localhost

 

Несколько самых простых команд:

\l           // вывести список баз данных
\du          // вывести список пользователей
create database db_name;   // создать базу db_name
drop datatable db_name;    // удалить базу db_name
\c db_name   // подключиться к базе db_name
\q           // выйти из psql

 

Импорт данных в БД

Предположим, что предварительно мы экспортировали данные в файл db.sql. Этот файл просто закинем в корень проекта, например, в Ubuntu пусть это будет каталог ~/web/projects/test. Находясь в командой строке бокса (т.е. ранее выполнив vagrant ssh), переходим в корень проекта и запускаем команду:

// MySQL
mysql --user=homestead --password your_db_name < db.sql

// PostgreSQL
psql --user=homestead --password your_db_name < db.sql

 

ПО для работы с базами данных

Если для работы с БД больше нравится использовать инструменты с графическим интерфейсом - это тоже не проблема. Для MySQL можно использовать Workbench, а для PostgreSQL - pgAdmin. Установить можно прямо из Ubuntu Software, если речь о Windows - скачиваем инсталляторы и устанавливаем как любой другой софт. И есть ещё один очень неплохой инструмент - DBeaver, в котором можно работать не только с MySQL или PosgtreSQL, но и со многими другими базами.

Примечание: поскольку вышеуказанное ПО устанавливается НЕ внутри виртуалки, надо помнить о том, что при создании соединений следует изменить порты -  33060 вместо 3306 (MySQL) и 54320 вместо 5432 (PostgreSQL).

Для работы перечисленного софта более чем достаточно, но всё же рассмотрим, как можно работать с phpMyAdmin для MySQL.

Добавляется эта утилита как обычный сайт, т.е. скачиваем отсюда инсталлятор, распаковываем в директорию с проектами и, если в названии папки будет что-либо лишнее (версия и т.д.) переименуем на phpmyadmin. Снова отредактируем Homestead.yaml, добавив запись:

sites:
    - map: test.xx
      to: /home/vagrant/projects/test
    - map: phpmyadmin.xx
      to: /home/vagrant/projects/phpmyadmin

 

Как и ранее, также внесём изменения в файл hosts:

192.168.10.10  phpmyadmin.xx

 

Внешние БД

Если всё-таки есть желание использовать внешнюю базу данных - меняем хост, порт и реквизиты. Например, на моём копмьютере установлен MySQL и я хочу подключиться к одноименной базе test. В этом случае настройки выглядят так:

DB_CONNECTION=mysql
DB_HOST=10.0.2.2
DB_PORT=33060
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=

 

Почему адрес 10.0.2.2? В моём случае виртуальный бокс видит машину-хост под таким IP. Когда выполняете vagrant ssh, обратите внимание на то, что написано в консоли (опять-таки, в моём случае):

Last login: Sun Oct 21 09:34:28 2018 from 10.0.2.2
vagrant@homestead:~$

 

И последний важный нюанс - работайте с конфигами только внутри Homestead. Т.е., если изменили настройки, и всё равно летят ошибки - войдите в Homestead в директорию проекта и выполните:

php artisan config:clear

 

На этом на сегодня всё. Успехов!