Yii2 установка и настройка advanced приложения

В статье описан процесс установки и настройки advanced приложения Yii2 на хостинг. Установка приложения будет осуществляться с использованием инструмента composer.

В первую очередь необходимо подключиться к хостингу по ssh и скачать composer. Чтобы скачать и установить composer необходимо выполнить следующие команды в консоли:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

!!! Следует обратить внимание на вторую строку, где осуществляется проверка хэша. Если вышла новая версия composer, то хэш может не совпадать и Вы получите сообщение 'Installer corrupt'. Чтобы исправить эту проблему, зайдите на сайт composer, и используйте новый код из раздела Command-line installation.

При скачивании и установке composer необходимо проверить, какой командой вызывается интерпретатор php, так, например, если на хостинге php вызывается командой php5.6, то в вышеуказанном примере команд необходимо вместо php писать php5.6, в дальнейшем будет использоваться команда php5.6.

После выполнения вышеуказанных команд в директории появится файл composer.phar.

Для установки Yii2 advanced с использованием composer необходимо выполнить следующую команду:

composer create-project --prefer-dist yiisoft/yii2-app-advanced my-advanced-yii-app

Если хостинг не предоставляет возможности использования команды composer, то установить Yii2 можно следующей командой:

php5.6 composer.phar create-project --prefer-dist yiisoft/yii2-app-advanced my-advanced-yii-app

Зачастую, при установке на виртуальном хостинге у меня возникает следующая проблема:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - yiisoft/yii2 2.0.3 requires bower-asset/jquery 2.1.*@stable | 1.11.*@stable -> no matching package found.
    - yiisoft/yii2 2.0.2 requires bower-asset/jquery 2.1.*@stable | 1.11.*@stable -> no matching package found.
    - yiisoft/yii2 2.0.1 requires bower-asset/jquery 2.1.*@stable | 1.11.*@stable -> no matching package found.
    - yiisoft/yii2 2.0.0 requires bower-asset/jquery 2.1.*@stable | 1.11.*@stable -> no matching package found.
    - Installation request for yiisoft/yii2 * -> satisfiable by yiisoft/yii2[2.0.0, 2.0.1, 2.0.2, 2.0.3].

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting

Я решаю данную проблему следующей командой:

php5.6 composer.phar global require "fxp/composer-asset-plugin:^1.0"

после чего запускаю установку yii2 advanced повторно.

В процессе установки yii2 программа попросит вас ввести токен, который можно сгенерировать на github.com (нужно быть зарегистрированным пользователем).

Чтобы сгенерировать токен для yii2 нужно:

  1. Войти на гитхаб;
  2. Перейти в раздел настроек - нажать на иконку пользователя и выбрать пункт Settings;
  3. В левом меню раздела настроек найти пункт "Personal access tokens" и нажать на него;
  4. Нажать кнопку "Generate new token";
  5. В открывшейся странице заполнить поле описания токена "Token description" и выполнить необходимые настройки;
  6. Нажать кнопку "Generate token", после чего можно скопировать созданный токен.

Далее токен необходимо ввести в консоль. После выполнения команды начнется процесс загрузки и установки yii2 advanced. После окончания процесса в текущей директория появится новая директория: my-advanced-yii-app.

Далее необходимо перейти в директорию с приложением, в данном случае my-advanced-yii-app и выполнить команду

php5.6 init

и ответить на задаваемые программой вопросы. После выполненных действий сайт будет доступен по адресу http://sitename.ru/frontend/web/

Для того, чтобы исключить из пути сайта frontend, необходимо создать символьную ссылку следующей командой:

ln -s frontend/web web

после чего сайт будет доступен по пути http://sitename.ru/web/

Далее настроим доступ к бэкенду, создаем символьную ссылку:

cd frontend/web
ln -s ../../backend/web admin

Теперь наш бэкенд доступен по ссылке http://sitename.ru/web/admin

Теперь настроим красивые url. Создадим файл .htaccess по пути frontend/web со следующим содержимым:

Options +FollowSymlinks
IndexIgnore */*

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

Затем создадим файл .htaccess в корне сайта со следующим содержимым:

<IfModule mod_rewrite.c>
	Options +FollowSymlinks
	RewriteEngine On

	RewriteCond %{REQUEST_URI} ^/.*
	RewriteRule ^(.*)/$ /$1 [L,R=301]
	RewriteRule ^(.*)$ web/$1 [L]
	RewriteCond %{REQUEST_URI} !^/web/
	RewriteCond %{REQUEST_FILENAME} !-f [OR]
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^.*$ web/index.php
</IfModule>

<Limit GET POST PUT DELETE>
	Order allow,deny
	Allow from all
</Limit>

В секции 'request' файла frontend/config/main.php впишем следующее значение

'baseUrl' => '',

В том же файле настраиваем urlManager:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '' => 'site/index',
        'index' => 'site/index',
        'about' => 'site/about',
        'contact' => 'site/contact',
        'signup' => 'site/signup',
        'login' => 'site/login',
    ],
],

Теперь страницы сайта доступны по таким адресам, как например http://sitename.ru/about

На этом установка и настройка advanced шаблона Yii2 закончена, приложение готово к работе.