Для начала нам необходимо обновить Composer, открываем консоль и выполняем команду:

sudo composer self-update

Подготовка github

Теперь нам необходимо создать токен на github. Для этого необходимо:

  • Авторизоваться на github.com
  • Для создания токена переходим по ссылке https://github.com/settings/tokens
  • Нажимаем кнопку (в правом верхнем углу ) “Generate new token”
  • Дальше, я в поле Description написал Composer и создаем токен
  • После создания, на странице будет показан ключ наподобие c177393v2x43f792327e6e72e95b9d74fdj139b6
  • Выполняем команду в консоле:
    composer config -g github-oauth.github.com composer
    

C github закончили. Зададим права для папки с Composer:

sudo chmod 777 ~/.composer

Далее вводим команду для устанавливает плагин composer asset plugin (для управления зависимостями пакетов bower и npm через Composer, команду вводим один раз):

composer global require "fxp/composer-asset-plugin:~1.0.0"

Установка yii2

Далее переходим в каталог проекта и вводим команду:

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

Где yii-application - имя каталога, в который загрузится yii2.

При загрузке Yii2, если появиться запрос на ввод токена, то введите тот который мы получили ранее (у меня это c177393v2x43f792327e6e72e95b9d74fdj139b6)

Смотрим, как устанавливаются пакеты. Может быть такое, что версия какого-то пакета не найдена (например, jquery) жмем ENTER пока не будет найдет нужный.

Инициализация проекта

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

php init

Init запросит какую версию необходимо установить, для разработки (Development) или сразу готовую к запуску на сайте (Production). Выбираем первый вариант.

Создание базы данных

Теперь нам необходимо создать БД. Создаем БД. Указываем новую базу данных в основном локальном конфиге common/config/main-local.php. После создания проекта (выполнении команды init) создается база yii2advanced. Переносим из этой базы в свою таблицы migration и user. Это делается при помощи команды в консоле:

php yii migrate

Конфигурация проекта

Открываем файл advanced/frontend/config/main.php:

<?php

return [
    'homeUrl' => '/',
    'components' => [
    'request' => [
    'baseUrl' => '',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],
    ],
];

Следующий файл advanced/backend/config/main.php:

<?php

return [
    'homeUrl' => '/admin',
    'components' => [
    'request' => [
    'baseUrl' => '/admin',
        ],
        'urlManager' => [
        'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],
    ],
];

Конфигурация для Apache

Не проверял. Я работаю с nginx. В файле .htaccess:


Options FollowSymLinks
AddDefaultCharset utf-8
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    # the main rewrite rule for the frontend application
    RewriteCond %{REQUEST_URI} !^/(backend/web|admin)
    RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L]
 
    # redirect to the page without a trailing slash (uncomment if necessary)
    #RewriteCond %{REQUEST_URI} ^/admin/$
    #RewriteRule ^(admin)/ /$1 [L,R=301]
    # the main rewrite rule for the backend application
    RewriteCond %{REQUEST_URI} ^/admin
    RewriteRule ^admin(.*) /backend/web/$1 [L]
 
    # if a directory or a file of the frontend application exists, use the request directly
    RewriteCond %{REQUEST_URI} ^/frontend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # otherwise forward the request to index.php
    RewriteRule . /frontend/web/index.php [L]
 
    # if a directory or a file of the backend application exists, use the request directly
    RewriteCond %{REQUEST_URI} ^/backend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # otherwise forward the request to index.php
    RewriteRule . /backend/web/index.php [L]
 
    RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd|svn|git)
    RewriteRule \.(htaccess|htpasswd|svn|git) - [F]
</IfModule>

Конфигурация для Nginx


server {
    charset utf-8;
    client_max_body_size 200M;
    
    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name mysite;
    root /path/to/host/www;

    access_log /path/to/host/logs/advanced.access.log;
    error_log /path/to/host/logs/advanced.error.log ;

    location / {
        root /path/to/host/www/frontend/web;

        try_files  $uri /frontend/web/index.php?$args;
    
        # avoiding processing of calls to non-existing static files by Yii
        location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            access_log  off;
            expires  360d;

            try_files  $uri =404;
        }
    }

    location /admin {
        alias /path/to/host/www/backend/web;

        rewrite ^(/admin)/$ $1 permanent;
        try_files  $uri /backend/web/index.php?$args;
    }

    # avoiding processing of calls to non-existing static files by Yii
    location ~ ^/admin/(.+\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar))$ {
        access_log  off;
        expires  360d;

        rewrite  ^/admin/(.+)$ /backend/web/$1 break;
        rewrite  ^/admin/(.+)/(.+)$ /backend/web/$1/$2 break;
        try_files  $uri =404;
    }

    location ~ \.php$ {
        include  fastcgi_params;
        # check your /etc/php5/fpm/pool.d/www.conf to see if PHP-FPM is listening on a socket or port
       # fastcgi_pass  unix:/var/run/php5-fpm.sock; ## listen for socket
        fastcgi_pass  127.0.0.1:9000; ## listen for port
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        try_files  $uri =404;
    }
    #error_page  404 /404.html;

    location = /requirements.php {
        deny all;
    }

    location ~ \.(ht|svn|git) {
        deny all;
    }
}