Настройка сервера для Laravel 6.0, ее первичная настройка (включая подключения к базе данных) и решения проблемы Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
Установка и первичная настройка Laravel 6.0
Первичная настройка сервера:
Стоит отметить, что минимальная версия php - 7.2.
Установка необходимых пакетов на Centos:
yum -y install php72w php72w-opcache php72w-common php72w-gd php72w-mysql php72w-xml php72w-mbstring php72w-cli
Настройка Apache / httpd:
Для начала мне пришлось подкорректировать пути для виртуального хоста апача, дело в том, что по умолчанию структура каталогов была:
/home/public/laravel.local/ - корневая папка домена
/home/public/laravel.local/www - публичные файлы
/home/public/laravel.local/tmp и т.д. - остальные
У Ларавел же публичная директория должна называться public
Сначала решил эту проблему, установив фреймворк в /.../laravel.local/www т.е. публичная директория получилась с путем /.../laravel.local/www/public, а в .htaccess добавил:
RewriteEngine On<br> RewriteRule ^(.*)$ public/$1 [L]
Но при таком решении, некоторые ссылки на сайте начинают автоматически притягивать в путь лишнее и превращаться в http://laravel.local/public/login конечно можно решить это автозаменой, то там появляется ряд других проблем.
Поэтому сменил папку www на public в файле виртуального хоста апача (/etc/httpd/conf.d/laravel.local.cfg):
DocumentRoot /home/public/laravel.local/public <Directory /home/public/laravel.local/public>
Инсталляция Laravel:
Для установки требуется Composer, если у Вас на сервере его нет, но нужно поставить: Инсталляция Composer
Laravel выдает ошибки если ставить ее не в пустую папку, т.ч. в /home/public/laravel.local выполнил:
composer create-project --prefer-dist laravel/laravel blog
Из новой папки blog все перенес в /home/public/laravel.local
Проверил в браузере, http://laravel.local/ - стартовая страница отобразилась нормально.
Настройка подключения Laravel к mySQL:
Для начала нужно создать базу, заходим, через консоль, в MySql:
mysql -p
Создаем базу и пользователя:
CREATE database db_laravel; GRANT ALL ON db_laravel.* TO laravel@'%' IDENTIFIED BY 'PASSWORD'; GRANT ALL ON db_laravel.* TO laravel@'localhost' IDENTIFIED BY 'PASSWORD';
В файл .env добавить настройки подключения к БД:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=db_laravel DB_USERNAME=laravel DB_PASSWORD=PASSWORD
Для проверки выполним миграции которые поставляются "из коробки":
php artisan migrate
При моих настройках (Cento 7, MariaDB 5,5, Latavel 6.3) - я получил ошибку:
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
Решение: в файле app/Providers/AppServiceProvider.php, в метод boot добавляем:
public function boot() { // \Schema::defaultStringLength(191); }
Если этот вариант, по какой-то причине не подходит, то можно в файле /database/migrations/2014_10_12_000000_create_users_table.php убрать проверку на уникальность:
$table->string('email'); //->unique();
- но лучше так не делать, как минимум потому, что придется так ограничивать все текстовые поля во всех миграциях.