Установка Yii2: первые шаги, настройка веб сервера (Apache, Nginx)

    Yii2    9.2K

Содержание:

Установка Yii2: первые шаги, настройка веб сервера (Apache, Nginx)

Установить Yii2 можно несколькими способами: использовать сomposer, скачав архив с фреймворком или же собрать собственную структуру приложения. Используем первый способ, так как он позволяет установить новые расширения (пакеты), обновить Yii2 одной командой и многое другое.

Оф.доки - https://www.yiiframework.com/doc/guide/2.0/ru/start-installation

Установка composer

Если Composer еще не установлен это можно сделать по инструкции на getcomposer.org , или одним из нижеперечисленных способов. На Linux или Mac используйте следующую команду:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

На Windows, скачайте и запустите Composer-Setup.exe .

Если всё сделано правильно, то мы должны увидеть версию composer, набрав в консоли (терминале) команду:

php composer.phar -V

Мы должны увидеть запись подобного рода:

Composer version <версия> < дата обновления >

Для удобства рекомендую проделать еще один шаг и выполнить команду:

echo @php "%~dp0composer.phar" %*>composer.bat

Она создаст .bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:

composer -V

Что согласитесь гораздо удобнее.

Если у вас уже установлен Composer, обновите его при помощи composer self-update.

composer -V (-version) - выведут краткую информацию о composer

composer -v - выведет полную информацию о composer

Во время установки Yii Composer запрашивает довольно большое количество информации через Github API. Количество запросов варьируется в зависимости от количества зависимостей вашего проекта и может превысить ограничения Github API. В таком случае Github требует токен .

Установка Yii2

Установка basic приложения:

// По указанному пути (относительно домашней директории)
composer create-project --prefer-dist yiisoft/yii2-app-basic /path
// в директорию basic (если находимся директорией выше)
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
// в текущую директорию
composer create-project --prefer-dist yiisoft/yii2-app-basic .

Если вы хотите установить последнюю нестабильную ревизию Yii:

composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic 

Установка advanced приложения:

// По указанному пути (относительно домашней директории)
composer create-project --prefer-dist yiisoft/yii2-app-advanced /path
// в директорию basic (если находимся директорией выше)
composer create-project --prefer-dist yiisoft/yii2-app-advanced advanced
// в текущую директорию
composer create-project --prefer-dist yiisoft/yii2-app-advanced .

// Установить последнюю нестабильную ревизию Yii advanced:
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced advanced

В advanced приложении выполнить:

php init

Фреймворк предложит развернуть приложение в одном из указанных окружений: окружение разработки и продакшен

Which environment do you want the application to be initialized in?

  [0] Development
  [1] Production

  Your choice [0-1, or "q" to quit]

В окружении разработки...

Your choice [0-1, or "q" to quit] 0

  Initialize the application under 'Development' environment? [yes|no]

Далее генерируются необходимые файлы:

Initialize the application under 'Development' environment? [yes|no] yes

Start initialization ...

 generate backend/config/main-local.php
 generate backend/config/params-local.php
 generate backend/config/test-local.php
 generate backend/web/index-test.php
 generate backend/web/index.php
 generate backend/web/robots.txt
 generate common/config/main-local.php
 generate common/config/params-local.php
 generate common/config/test-local.php
 generate console/config/main-local.php
 generate console/config/params-local.php
 generate console/config/test-local.php
 generate frontend/config/main-local.php
 generate frontend/config/params-local.php
 generate frontend/config/test-local.php
 generate frontend/web/index-test.php
 generate frontend/web/index.php
 generate frontend/web/robots.txt
 generate yii
 generate yii_test
 generate yii_test.bat
 generate cookie validation key in backend/config/main-local.php
 generate cookie validation key in frontend/config/main-local.php
    chmod 0777 backend/runtime
    chmod 0777 backend/web/assets
    chmod 0777 frontend/runtime
    chmod 0777 frontend/web/assets
    chmod 0755 yii
    chmod 0755 yii_test

... initialization completed.

Настройка веб сервера Apache

В файле httpd-vhosts.conf настроить хост:

<VirtualHost *:80>
  ServerAdmin admin@gmail.com
  ServerName site.com	
  ServerAlias www.site.com	
  DocumentRoot "S:/Server/data/htdocs/site/www/web"
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory />
    Options All
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
  ErrorLog "S:/Server/data/htdocs/site/logs/site-error.log"
  CustomLog "S:/Server/data/htdocs/site/logs/site-access.log" common
</VirtualHost>

В файле C:\Windows\System32\drivers\etc\host от имени администратора прописать локальный хост:

127.0.0.1 www.site.com
127.0.0.1 site.com

Перезапустить apache:

// Находясь в директории bin ( путь/к/файлу/httpd ) 
httpd -k start
httpd -k restart
httpd -k stop (httpd - k shutdown)

// Работа с apache как со службой Windows
net stop apache2.4
net start apache2.4

// Мой  httpd.exe
S:\Server\bin\Apache24\bin\httpd -k restart

Если необходимо настроить apache для advanced приложения на одном домене, смотрите здесь.

Установка Yii2 на Open Server

Процесс установки Yii2 на Open Server аналогичен установке, описанной выше. Более подробно остановлюсь на настройке хостов.

При успешном запуске Open Server, в трее панели задач Windows загорится зелёный флажок. Кликаем на него, откроется контекстное меню, выбираем Настройки. Затем выбираем вкладку Домены.

Управление доменами: Ручное + Автопоиск.

В поле Имя домена вводим домен, который мы хотим видеть в качестве фронтенда.

В поле Папка домена выбрать путь к нужной директории (нажав на кнопку с троеточием). Нажимаем Добавить.

Аналогично делаем для backend (если устанавливаете advanced приложение).

Настройка хостов в Open Server

Настройка хостов в Open Server

// Директория для проекта
sudo mkdir -p /var/www/yii2basic.loc
// Права на запись текущему пользователю
sudo chown -R $USER:$USER /var/www/yii2basic.loc
// Установка Yii2
cd /var/www/yii2basic.loc
composer create-project --prefer-dist yiisoft/yii2-app-basic . 
// Берём за основу конфиг по умолчанию (или любой другой)
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/yii2basic.loc
// Редактируем конфиг
sudo nano /etc/nginx/sites-available/yii2basic.loc
server {
  charset utf-8;
  client_max_body_size 128M;

  listen 80;
  root /var/www/yii2basic.loc/web;
  index index.php;
  server_name yii2basic.loc;
  
  error_log  /var/log/nginx/error.log;
	access_log /var/log/nginx/access.log;

  location / {
    try_files $uri /index.php$is_args$args;
  }

  location ~ \.php$ {
    #try_files $uri = 404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
  	#fastcgi_pass 127.0.0.1:9000;        	
  	include fastcgi_params;
  	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  	fastcgi_param PATH_INFO $fastcgi_path_info;
  	fastcgi_param APPLICATION_ENV local;
  	include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }
}

Включаем сайт

sudo ln -s /etc/nginx/sites-available/yii2basic.loc /etc/nginx/sites-enabled/

// Выключить сайт при необходимости
rm /etc/nginx/sites-enabled/yii2basic.loc

Проверим на ошибки

sudo nginx -t

// Смотреть конфигурацию хоста
sudo nginx -T | grep example.ru

// Смотреть логи Nginx
cat /var/log/nginx/error.log 

Если ошибок нет, то увидим сообщение:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапускаем Nginx

sudo systemctl restart nginx 

// или так
sudo nginx -s reload

Добавляем сайт в файл /etc/hosts:

sudo nano /etc/hosts

// Добавляем запись
127.0.1.1 yii2basic.loc
server {
  listen 80;
  server_name yii2advanced.loc;

  set $base_root /var/www/yii2advanced.loc;
  root $base_root;

  #error_log /var/log/nginx/yii2advanced.loc.error.log warn;
  #access_log /var/log/nginx/yii2advanced.loc.access.log main;
  charset UTF-8;
  index index.php;

  location / {
    root $base_root/frontend/web;
    try_files $uri $uri/ /frontend/web/index.php$is_args$args;

    # omit static files logging, and if they don't exist, avoid processing by Yii (uncomment if necessary)
    #location ~ ^/.+\.(css|js|ico|png|jpe?g|gif|svg|ttf|mp4|mov|swf|pdf|zip|rar)$ {
    #    log_not_found off;
    #    access_log off;
    #    try_files $uri =404;
    #}

    location ~ ^/assets/.+\.php(/|$) {
      deny all;
    }
  }

  location /admin {
    alias $base_root/backend/web/;

    # redirect to the URL without a trailing slash (uncomment if necessary)
    #location = /admin/ {
    #    return 301 /admin;
    #}

    # prevent the directory redirect to the URL with a trailing slash
    location = /admin {
      # if your location is "/backend", try use "/backend/backend/web/index.php$is_args$args"
      # bug ticket: https://trac.nginx.org/nginx/ticket/97
      try_files $uri /backend/web/index.php$is_args$args;
    }

    # if your location is "/backend", try use "/backend/backend/web/index.php$is_args$args"
    # bug ticket: https://trac.nginx.org/nginx/ticket/97
    try_files $uri $uri/ /backend/web/index.php$is_args$args;

    # omit static files logging, and if they don't exist, avoid processing by Yii (uncomment if necessary)
    #location ~ ^/admin/.+\.(css|js|ico|png|jpe?g|gif|svg|ttf|mp4|mov|swf|pdf|zip|rar)$ {
    #    log_not_found off;
    #    access_log off;
    #    try_files $uri =404;
    #}

    location ~ ^/admin/assets/.+\.php(/|$) {
        deny all;
    }
  }

  location ~ ^/.+\.php(/|$) {
    rewrite (?!^/((frontend|backend)/web|admin))^ /frontend/web$uri break;
    rewrite (?!^/backend/web)^/admin(/.+)$ /backend/web$1 break;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $fastcgi_script_name =404;
    fastcgi_param APPLICATION_ENV local;
    #fastcgi_pass 127.0.0.1:9000; # proxy requests to a TCP socket
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~ /\. {
      deny all;
  }
}

Yii2 advanced: примеры конфигурации Nginx для поддомена:

  • https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md
  • https://github.com/mickgeek/yii2-advanced-one-domain-config/blob/master/vhosts/nginx.conf
  • https://gist.github.com/Kison/45ec9ce3c1ebf422cbd42bd5ce04d8e4

В файле @frontend/config/main.php в секции components:

'request' => [
 'baseUrl' => '',
],
'urlManager' => [
  //'hostInfo' => 'https://site.com',
  'enablePrettyUrl' => true,
  'showScriptName' => false,
  'enableStrictParsing' => true,
  'rules' => [
  '' => 'site/index',
  '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
  ],
 ],
],

В файле @backend/config/main.php в секции components:

'request' => [
 'baseUrl' => '/admin',
],
'urlManager' => [
 //'hostInfo' => 'https://site.com/admin',
 'enablePrettyUrl' => true,
 'showScriptName' => false,
 'rules' => [
  '' => 'site/index',
  '<_a:login|logout>' => 'auth/<_a>',
  '<_c:[\w\-]+>' => '<_c>/index',
  '<_c:[\w\-]+>/<id:\d+>' => '<_c>/view',
  '<_c:[\w\-]+>/<_a:[\w-]+>' => '<_c>/<_a>',
  '<_c:[\w\-]+>/<id:\d+>/<_a:[\w\-]+>' => '<_c>/<_a>',
 ],
],