Установка и настройка Yii2 на виртуальном хостинге
Установка и настройка Yii2 описаны в официальном руководстве, а так же опубликовано множество статей, но я не нашел того руководства, которое помогло бы мне установить и настроить этот фреймворк от начала и до конца. Во время установки я столкнулся с некоторыми вопросами, ответы на которые находились в разных местах на просторах интернета. После продолжительных плясок с бубнами я настроил Yii2 так как хотел. Свой опыт настройки я и опишу в этой статье, в надежде что кому-то это сократит время плясок и упростит жизнь.
1. Установка Composer
Так как опыта настройки сервера и работы в консоле Linux/Unix у меня немного, то первая проблема появилась уже при установке Composer. На сервере установлены несколько версий PHP, и по-умолчанию команды консоли выполняет PHP версии 5.2.17. А Composer требует версию PHP 5.3.2 и выше. Решение было таким:
php -r "readfile('https://getcomposer.org/installer');" | php5.6
Настройки сервера не дают возможности сделать Composer выполняемым и запускать напрямую, поэтому запускаем его через интерпретатор PHP, при этом не забывая указывать версию PHP:
php5.6 composer.phar install
Первый шаг выполнен — Composer установлен.
2. Установка Yii2
Сначала всё по инструкции: устанавливаем плагин composer asset, который управляет зависимостями пакетов bower и npm.
php5.6 composer.phar global require "fxp/composer-asset-plugin:~1.1.1"
Это необходимо сделать только 1 раз, в дальнейшем можно устанавливать Yii2 несколько раз с помощью команд описанных ниже.
Теперь выбираем какую версию шаблона Yii2 ставить: Basic или Advanced. Basic — простое приложение, а в Advanced реализовано разделение на публичную и административную часть (frontend и backend) и создана готовая модель (и таблица БД) user.2.1. Установка Yii2 Basic
Сначала рассмотрим установку Basic, т.к. она проще, выполняется установка с помощью команды:
php5.6 composer.phar create-project --prefer-dist yiisoft/yii2-app-basic mysite
Где mysite
— каталог в который необходимо установить Yii2, он должен быть пустым (если при создании каталога для сайта на сервере был автоматически создан подкаталог public_html
, его необходимо удалить). Composer может запросить логин-пароль от Github (из-за ограничения на количество запросов у Гитхаба).
Небольшое лирическое отступление про структуру каталогов на сервере и во фреймворке. Рассматриваемый виртуальный хостинг настроен так, что файлы сайтов располагаются в каталоге mysite/public_html
. Файлы в каталоге public_html
доступны из веба.
Структура шаблона Yii2 Basic включает несколько файлов и каталогов, которые рекомендуется сделать недоступными из веба, чтобы «защитить от нежелательного доступа код и данные», а также каталог basic/web
который как раз и предназначен быть корневой директорией веб сервера. Для необходимой структуры создадим «символьную» ссылку:
cd mysite
ln -s web public_html
Теперь содержимое каталога basic/web
— это наш сайт, а другие файлы фреймворка недоступны из сети.
Yii2 Basic установлен, можно открыть сайт в браузере.2.1.1. Настройка Yii2 Basic
Откройте файл config/db.php
и измените параметры на верные для вашей базы данных. После 'charset' => 'utf8',
можно указать префикс таблиц так: 'tablePrefix' => 'myprefix_'
(если несколько сайтов используют одну базу данных).
Далее настраиваем ссылки, по-умолчанию маршрутизация имеет вид /index.php?r=site%2Fabout
, переведём ее в такой вид /site/about
. Для этого создадим файл web/.htaccess
с содержимым как рекомендуют в оф. гайде:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
Теперь веб-сервер знает, что запросы необходимо направлять на index.php, и указывать index.php в URL нет необходимости. Далее в файле config/web.php
добавим (или раскомментируем) в $config = ['components']
после 'db' => require(__DIR__ . '/db.php'),
следующие строки
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
enablePrettyUrl — генерировать красивые ссылки, showScriptName — не писать имя скрипта index.php в ссылке. Теперь можно зайти на наш сайт и посмотреть, что он уже использует красивые ссылки типа /site/about
.
Отлично, с Yii2 Basic разобрались, теперь переходим к Advanced.2.2. Установка Yii2 Advanced
Начало установки аналогично Basic:
php5.6 composer.phar create-project --prefer-dist yiisoft/yii2-app-advanced mysite
Yii2 установлен, в его каталоге mysite появились файлы и каталоги Yii2 в том числе frontend для публичной части сайта и backend для админки. Однако в frontend/web нет файла index.php, поэтому далее выполняем команду init для инициализации шаблона и создаем символьную ссылку для frontend:
cd mysite
php5.6 init
ln -s frontend/web public_html
Теперь фронтенд доступен по основному адресу сайта. Далее настраиваем бекенд:
cd frontend/web
ln -s ../../backend/web admin
Теперь бекенд доступен по адресу /admin
.
Настраиваем красивые адреса во фронтенде:
- Создаем в
/frontend/web
такой же.htaccess
как и в шаблоне Basic - В конфиге
/frontend/config/main.php
прописываем то же самое
Аналогичные операции проводим для бекенда. Попутно замечаем что файла db.php
в каталоге config
нет.
Параметры для доступа к базе данных в Advanced указываются в common/config/main-local.php
, там прописываем тоже что и в db.php
в Basic. После чего применяем миграцию:
php5.6 yii migrate
В БД создаются таблицы migration и user.
Ура! Yii2 установлен, настроен и готов к работе.
Используемые источники
Introduction — Composer
The Definitive Guide to Yii 2.0 (официальный гайд по Yii2 на английском)
Полное руководство по Yii 2.0 (русский перевод)
Installation Yii2 Advanced
How To Install The Advanced Template In Yii2