Установка PHP-фреймворков

Любому веб-мастеру рано или поздно может понадобиться выполнить задачу, под которую может не подходить уже готовая CMS. При этом не секрет, что написание проекта полностью с нуля - это достаточно длительное и трудозатратное занятие, которое обычно не оправдано.

В этих случаях имеет смысл использовать какой-нибудь фреймворк - программную платформу, предоставляющую набор библиотек и уже содержащую определённую структуру приложения, что снижает затраты на проектирование.

Одними из наиболее популярных фреймворков для PHP являются Yii, Laravel и Symfony. Именно их установку мы и рассмотрим в этой статье.

Подготовка

Вне зависимости от выбранного фреймоворка потребуется Composer - менеджер зависимостей для PHP. Если на аккаунте его ещё нет - установить его Вы можете по нашей инструкции.

Установка Yii

Yii имеет два варианта установки – Basic и Advanced. Они существенно различаются, поэтому разберем каждый вариант по отдельности.

Установка Yii Basic

Начнем с наиболее простого варианта веб-приложения – Yii Basic. Сначала создайте сайт, на который будет произведена установка. Для этого откройте раздел «Сайты» в панели управления и задайте имя каталога, где будет размещен сайт.

Управление сайтами

После этого в меню настроек сайта (три точки справа от его названия) выберите «Прикрепить домен».

меню настроек сайта

В выпадающем меню выберите нужный вам домен и нажмите «Прикрепить».

прикрепить домен

Если своего домена у вас еще нет, вы можете зарегистрировать его в разделе «Домены и поддомены» в панели управления или воспользоваться предоставляемым нами техническим доменом.

Для примера будет использоваться технический домен, добавив к нему поддомен yii-basic. Для этого откройте раздел «Домены и поддомены» и введите полное имя домена в форму добавления. Прикрепите домен к созданному ранее сайту. Также сайт можно создать при добавлении поддомена – выбирайте удобный вам вариант.

добавление доменов

После проделанных действий в разделе «Сайты» вы должны увидеть примерно такую структуру:

структура

Далее подключитесь к учетной записи по SSH и установите фреймворк. Подробно процесс подключения к аккаунту по SSH описан в нашей статье. В рамках данной статьи фреймворк будет устанавливаться в директорию yii-basic. Перейдите в нее для установки.

cd ~/yii-basic/

Директория public_html создается автоматически, ее нужно удалить.

rm -r public_html/

Загрузите архив с готовым шаблоном приложения, распакуйте его и удалите архив. Ссылку на актуальную версию фреймворка вы можете найти тут: https://www.yiiframework.com/download

wget -q 'https://github.com/yiisoft/yii2/releases/download/2.0.49/yii-basic-app-2.0.49.tgz'
tar xzf yii-basic-app-2.0.49.tgz --strip 1
rm yii-basic-app-2.0.49.tgz

Обновите зависимости, выполнив команду:

php8.2 $(which composer-phar) update
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 0 installs, 47 updates, 0 removals
  - Updating ezyang/htmlpurifier (v4.16.0 => v4.17.0): Loading from cache
  - Updating bower-asset/jquery (3.7.0 => 3.7.1): Loading from cache
  - Updating yiisoft/yii2 (2.0.49 => 2.0.49.3): Loading from cache
  - Updating yiisoft/yii2-debug (2.1.24 => 2.1.25): Loading from cache
  - Updating symfony/polyfill-mbstring (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/polyfill-ctype (v1.28.0 => v1.29.0): Loading from cache
  - Updating masterminds/html5 (2.8.1 => 2.9.0): Downloading (100%)    	 
  - Updating symfony/dom-crawler (v6.3.4 => v6.4.4): Downloading (100%)    	 
  - Updating symfony/deprecation-contracts (v3.3.0 => v3.4.0): Downloading (100%)    	 
  - Updating symfony/browser-kit (v6.3.2 => v6.4.3): Downloading (100%)    	 
  - Updating sebastian/resource-operations (3.0.3 => 3.0.4): Loading from cache
  - Updating sebastian/global-state (5.0.6 => 5.0.7): Loading from cache
  - Updating sebastian/exporter (4.0.5 => 4.0.6): Loading from cache
  - Updating sebastian/diff (4.0.5 => 4.0.6): Loading from cache
  - Updating sebastian/cli-parser (1.0.1 => 1.0.2): Loading from cache
  - Updating theseer/tokenizer (1.2.1 => 1.2.3): Loading from cache
  - Updating nikic/php-parser (v4.17.1 => v5.0.2): Loading from cache
  - Updating sebastian/lines-of-code (1.0.3 => 1.0.4): Loading from cache
  - Updating sebastian/complexity (2.0.2 => 2.0.3): Loading from cache
  - Updating phpunit/php-code-coverage (9.2.27 => 9.2.31): Loading from cache
  - Updating phar-io/manifest (2.0.3 => 2.0.4): Loading from cache
  - Updating guzzlehttp/psr7 (2.6.1 => 2.6.2): Loading from cache
  - Updating symfony/css-selector (v6.3.2 => v7.0.3): Downloading (100%)    	 
  - Updating codeception/lib-web (1.0.2 => 1.0.6): Loading from cache
  - Updating symfony/polyfill-php72 (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/event-dispatcher-contracts (v3.3.0 => v3.4.2): Downloading (100%)    	 
  - Updating symfony/polyfill-intl-normalizer (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/polyfill-intl-grapheme (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/service-contracts (v3.3.0 => v3.4.2): Downloading (100%)    	 
  - Updating symfony/string (v6.3.2 => v7.0.4): Downloading (100%)    	 
  - Updating codeception/stub (4.1.1 => 4.1.3): Loading from cache
  - Updating symfony/yaml (v6.3.3 => v7.0.3): Downloading (100%)    	 
  - Updating symfony/var-dumper (v6.3.4 => v7.0.6): Downloading (100%)    	 
  - Updating symfony/finder (v6.3.3 => v7.0.0): Downloading (100%)    	 
  - Updating symfony/event-dispatcher (v6.3.2 => v7.0.3): Downloading (100%)    	 
  - Updating symfony/console (v6.3.4 => v7.0.6): Downloading (100%)    	 
  - Updating psy/psysh (v0.11.20 => v0.12.3): Loading from cache
  - Updating codeception/codeception (5.0.11 => 5.1.2): Loading from cache
  - Updating codeception/module-yii2 (1.1.9 => 1.1.10): Loading from cache
  - Updating codeception/module-filesystem (3.0.0 => 3.0.1): Loading from cache
  - Updating bower-asset/bootstrap (v5.3.1 => v5.3.3): Loading from cache
  - Updating fakerphp/faker (v1.23.0 => v1.23.1): Loading from cache
  - Updating symfony/polyfill-intl-idn (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/mime (v6.3.3 => v7.0.6): Downloading (100%)    	 
  - Updating doctrine/lexer (3.0.0 => 3.0.1): Downloading (100%)    	 
  - Updating egulias/email-validator (4.0.1 => 4.0.2): Downloading (100%)    	 
  - Updating symfony/mailer (v6.3.0 => v7.0.6): Downloading (100%)    	 
Writing lock file
Generating autoload files
57 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Обратите внимание!
Если вы устанавливали composer локально по нашей статье, вместо $(which composer-phar) можно подставить путь до локально установленного composer – обычно это ~/.local/bin/composer. Если для вашего проекта требуется другая версия PHP, измените ее в команде на нужную вам.

Для корректной работы веб-сервера необходимо создать ссылку c именем public_html, указывающую на каталог web.

ln -s web public_html

Теперь необходимо дополнить базовую конфигурацию. Создайте резервную копию файла конфигурации config/web.php, затем сгенерируйте ключ, который будет использоваться для валидации cookies. Сохраните его во временную переменную и добавьте его в файл как значение ключа cookieValidationKey.

cp config/web.php config/web.php_backup
export cookieKey=$(openssl rand -base64 12 | md5sum | awk '{ print $1 }')
sed -i "s+'cookieValidationKey' => ''+'cookieValidationKey' => '$cookieKey'+g" config/web.php

Проверьте, что ключ успешно подставился, выполнив команду:

rg cookieValid config/web.php

Пример вывода:

17:        	'cookieValidationKey' => '627cbbaaaff3843116c3f75f70871e58',

Значение cookieValidationKey не должно быть пустым. Само значение при этом может отличаться от примера выше, поскольку строка генерируется случайным образом. Если изменение не применилось, сгенерируйте ключ вручную командой:

openssl rand -base64 12 | md5sum | awk '{ print $1 }'

Скопируйте полученную строку и вставьте в файл config/web.php вручную, например, через файловый менеджер.

Если на сайте предполагается использование базы данных - понадобится также отредактировать файл config/db.php. В этом файле нужно изменить dsn, указав в параметре dbname имя Вашей базы, а также ключи username и password. Значение параметра dsn в результате должно быть примерно таким: mysql:host=localhost;dbname=account_yii2

Обратите внимание!
На нашем хостинге имя пользователя MySQL всегда соответствует имени базы данных. Создать базу данных при необходимости вы можете в разделе MySQL. Процесс описан более подробно в руководстве по панели управления.

На этом настройка базовой версии Yii завершена – приложение полностью готово к дальнейшему использованию.

Установка Yii Advanced

Версия Advanced имеет более сложную структуру и собственную админ-панель, которую обычно размещают на отдельном домене. Изменяется и сам порядок установки. Подготовительный этап с установкой Composer (при необходимости) и созданием сайта аналогичен процессу установки Yii Basic. Единственное отличие – к сайту нужно прикрепить два домена, а не один. У нас будут поддомены yii-advanced и backend.yii-advanced, прикрепленные к сайту yii-advanced.

В панели управления эта структура будет выглядеть так:

структура в панели управения

Удалите содержимое созданного сайта, загрузите и распакуйте архив с приложением, обновите зависимости.

cd ~/yii-advanced/
rm -r public_html
wget -q 'https://github.com/yiisoft/yii2/releases/download/2.0.49/yii-advanced-app-2.0.49.tgz'
tar xzf yii-advanced-app-2.0.49.tgz --strip 1
rm yii-advanced-app-2.0.49.tgz
php8.2 $(which composer-phar) update
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 0 installs, 47 updates, 0 removals
  - Updating ezyang/htmlpurifier (v4.16.0 => v4.17.0): Loading from cache
  - Updating bower-asset/jquery (3.7.0 => 3.7.1): Loading from cache
  - Updating yiisoft/yii2 (2.0.49 => 2.0.49.3): Loading from cache
  - Updating yiisoft/yii2-debug (2.1.24 => 2.1.25): Loading from cache
  - Updating symfony/polyfill-mbstring (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/polyfill-ctype (v1.28.0 => v1.29.0): Loading from cache
  - Updating masterminds/html5 (2.8.1 => 2.9.0): Loading from cache
  - Updating symfony/dom-crawler (v6.3.4 => v6.4.4): Loading from cache
  - Updating symfony/deprecation-contracts (v3.3.0 => v3.4.0): Loading from cache
  - Updating symfony/browser-kit (v6.3.2 => v6.4.3): Loading from cache
  - Updating sebastian/resource-operations (3.0.3 => 3.0.4): Loading from cache
  - Updating sebastian/global-state (5.0.6 => 5.0.7): Loading from cache
  - Updating sebastian/exporter (4.0.5 => 4.0.6): Loading from cache
  - Updating sebastian/diff (4.0.5 => 4.0.6): Loading from cache
  - Updating sebastian/cli-parser (1.0.1 => 1.0.2): Loading from cache
  - Updating theseer/tokenizer (1.2.1 => 1.2.3): Loading from cache
  - Updating nikic/php-parser (v4.17.1 => v5.0.2): Loading from cache
  - Updating sebastian/lines-of-code (1.0.3 => 1.0.4): Loading from cache
  - Updating sebastian/complexity (2.0.2 => 2.0.3): Loading from cache
  - Updating phpunit/php-code-coverage (9.2.27 => 9.2.31): Loading from cache
  - Updating phar-io/manifest (2.0.3 => 2.0.4): Loading from cache
  - Updating guzzlehttp/psr7 (2.6.1 => 2.6.2): Loading from cache
  - Updating symfony/css-selector (v6.3.2 => v7.0.3): Loading from cache
  - Updating codeception/lib-web (1.0.2 => 1.0.6): Loading from cache
  - Updating symfony/polyfill-php72 (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/event-dispatcher-contracts (v3.3.0 => v3.4.2): Loading from cache
  - Updating symfony/polyfill-intl-normalizer (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/polyfill-intl-grapheme (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/service-contracts (v3.3.0 => v3.4.2): Loading from cache
  - Updating symfony/string (v6.3.2 => v7.0.4): Loading from cache
  - Updating codeception/stub (4.1.1 => 4.1.3): Loading from cache
  - Updating symfony/yaml (v6.3.3 => v7.0.3): Loading from cache
  - Updating symfony/var-dumper (v6.3.4 => v7.0.6): Loading from cache
  - Updating symfony/finder (v6.3.3 => v7.0.0): Loading from cache
  - Updating symfony/event-dispatcher (v6.3.2 => v7.0.3): Loading from cache
  - Updating symfony/console (v6.3.4 => v7.0.6): Loading from cache
  - Updating psy/psysh (v0.11.20 => v0.12.3): Loading from cache
  - Updating codeception/codeception (5.0.11 => 5.1.2): Loading from cache
  - Updating codeception/module-yii2 (1.1.9 => 1.1.10): Loading from cache
  - Updating codeception/module-filesystem (3.0.0 => 3.0.1): Loading from cache
  - Updating bower-asset/bootstrap (v5.3.1 => v5.3.3): Loading from cache
  - Updating fakerphp/faker (v1.23.0 => v1.23.1): Loading from cache
  - Updating symfony/polyfill-intl-idn (v1.28.0 => v1.29.0): Loading from cache
  - Updating symfony/mime (v6.3.3 => v7.0.6): Loading from cache
  - Updating doctrine/lexer (3.0.0 => 3.0.1): Loading from cache
  - Updating egulias/email-validator (4.0.1 => 4.0.2): Loading from cache
  - Updating symfony/mailer (v6.3.0 => v7.0.6): Loading from cache
Writing lock file
Generating autoload files
57 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Обратите внимание!
Если вы устанавливали composer локально по нашей статье, вместо $(which composer-phar) можно подставить путь до локально установленного composer – обычно это ~/.local/bin/composer. Если для вашего проекта требуется другая версия PHP, измените ее в команде на нужную вам.

Также потребуется создать символьную ссылку с именем public_html, но в этом случае она уже будет указывать на каталог frontend/web.

ln -s frontend/web public_html

Выполните инициализацию приложения:

php8.2 init
Yii Application Initialization Tool v1.0

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

  [0] Development
  [1] Production

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

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

  Start initialization ...

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

  ... initialization completed.

Теперь создайте в корневом каталоге публичной части ссылку на каталог административной части сайта:

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

После этого необходимо внести правила в файл .htaccess в директории frontend/web, чтобы при переходе по поддомену backend.domain.ru срабатывало перенаправление на созданную нами ссылку. Пример файла .htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?backend.domain.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/backend
RewriteRule ^(.*)$ backend/$1 [L]
Обратите внимание!
Домен в примере выше необходимо скорректировать на прикрепленный к сайту домен бэкенда.

Ключи валидации cookies указываются в следующих файлах (пути от корневого каталога проекта):

  • environments/prod/backend/config/main-local.php
  • environments/prod/frontend/config/main-local.php
  • environments/dev/backend/config/main-local.php
  • environments/dev/frontend/config/main-local.php

Настройка подключения к базе данных производится в нескольких файлах (пути от корневого каталога проекта):

  • environments/dev/common/config/main-local.php
  • environments/prod/common/config/main-local.php
  • environments/dev/common/config/test-local.php

Настройка параметров аналогична basic-версии. На этом настройка завершена, приложение полностью готово к работе.

Установка Yii через Composer

Кроме загрузки архивом имеется также возможность установки через Composer.

Структура команды для установки Yii следующая:

php8.2 $(which composer-phar) create-project --prefer-dist yiisoft/yii2-вариант_установки каталог_проекта
Обратите внимание!
Если вы устанавливали composer локально по нашей статье, вместо $(which composer-phar) можно подставить путь до локально установленного composer – обычно это ~/.local/bin/composer. Если для вашего проекта требуется другая версия PHP, измените ее в команде на нужную вам.

По умолчанию будет установлена новейшая версия Yii. Если вы хотите установить определенную версию, укажите ее в конце команды, например:

php8.2 $(which composer-phar) create-project --prefer-dist yiisoft/yii2-вариант_установки каталог_проекта 2.0.45

Для установки Yii Basic выполните следующую команду (каталог проекта должен быть пуст!):

php8.2 $(which composer-phar) create-project --prefer-dist yiisoft/yii2-app-basic yii-basic
Creating a "yiisoft/yii2-app-basic" project at "./yii-basic"
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Installing yiisoft/yii2-app-basic (2.0.45)
  - Installing yiisoft/yii2-app-basic (2.0.45): Loading from cache
Created project in /home/a/account/yii-basic
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 67 installs, 0 updates, 0 removals
  - Installing yiisoft/yii2-composer (2.0.10): Loading from cache
  - Installing myclabs/deep-copy (1.7.0): Loading from cache
  - Installing codeception/specify (0.4.6): Downloading (100%)
  - Installing sebastian/diff (1.4.3): Loading from cache
  - Installing sebastian/recursion-context (2.0.0): Loading from cache
  - Installing sebastian/exporter (2.0.0): Loading from cache
  - Installing sebastian/comparator (1.2.4): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.3): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing phpunit/php-file-iterator (1.4.5): Loading from cache
  - Installing phpunit/php-token-stream (1.4.12): Loading from cache
  - Installing sebastian/environment (2.0.0): Loading from cache
  - Installing phpunit/php-code-coverage (4.0.8): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing doctrine/instantiator (1.0.5): Loading from cache
  - Installing phpunit/php-timer (1.0.9): Loading from cache
  - Installing symfony/polyfill-ctype (v1.19.0): Loading from cache
  - Installing webmozart/assert (1.9.1): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (3.3.2): Loading from cache
  - Installing phpspec/prophecy (v1.10.3): Loading from cache
  - Installing sebastian/global-state (1.1.1): Loading from cache
  - Installing sebastian/object-enumerator (2.0.1): Loading from cache
  - Installing symfony/yaml (v3.4.47): Loading from cache
  - Installing phpunit/phpunit-mock-objects (3.4.4): Loading from cache
  - Installing phpunit/phpunit (5.7.27): Loading from cache
  - Installing codeception/phpunit-wrapper (6.0.22): Loading from cache
  - Installing codeception/verify (0.5.0): Loading from cache
  - Installing npm-asset/bootstrap (4.6.2): Loading from cache
  - Installing paragonie/random_compat (v2.0.21): Loading from cache
  - Installing bower-asset/jquery (3.7.1): Loading from cache
  - Installing bower-asset/yii2-pjax (2.0.8): Loading from cache
  - Installing bower-asset/punycode (v1.3.2): Loading from cache
  - Installing bower-asset/inputmask (3.3.11): Loading from cache
  - Installing cebe/markdown (1.2.1): Loading from cache
  - Installing ezyang/htmlpurifier (v4.17.0): Loading from cache
  - Installing yiisoft/yii2 (2.0.49.3): Loading from cache
  - Installing yiisoft/yii2-bootstrap4 (2.0.11): Loading from cache
  - Installing swiftmailer/swiftmailer (v5.4.12): Loading from cache
  - Installing yiisoft/yii2-swiftmailer (2.0.7): Loading from cache
  - Installing yiisoft/yii2-debug (2.1.25): Loading from cache
  - Installing phpspec/php-diff (v1.1.3): Loading from cache
  - Installing yiisoft/yii2-gii (2.2.6): Loading from cache
  - Installing fakerphp/faker (v1.9.2): Loading from cache
  - Installing yiisoft/yii2-faker (2.0.5): Loading from cache
  - Installing symfony/finder (v3.4.47): Loading from cache
  - Installing symfony/event-dispatcher (v3.4.47): Loading from cache
  - Installing symfony/css-selector (v3.4.47): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.19.0): Loading from cache
  - Installing psr/log (1.1.4): Loading from cache
  - Installing symfony/debug (v3.4.47): Loading from cache
  - Installing symfony/console (v3.4.47): Loading from cache
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.9.1): Loading from cache
  - Installing codeception/stub (2.1.0): Loading from cache
  - Installing codeception/lib-asserts (1.13.2): Loading from cache
  - Installing behat/gherkin (v4.7.3): Loading from cache
  - Installing codeception/codeception (4.2.2): Loading from cache
  - Installing codeception/module-filesystem (1.0.3): Loading from cache
  - Installing symfony/dom-crawler (v3.4.47): Loading from cache
  - Installing symfony/browser-kit (v3.4.47): Loading from cache
  - Installing codeception/lib-innerbrowser (1.5.1): Loading from cache
  - Installing codeception/module-yii2 (1.1.5): Loading from cache
  - Installing codeception/module-asserts (1.3.1): Loading from cache
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
phpunit/phpunit suggests installing ext-xdebug (*)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ezyang/htmlpurifier suggests installing cerdic/css-tidy (If you want to use the filter 'Filter.ExtractStyleBlocks'.)
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/event-dispatcher suggests installing symfony/http-kernel
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-7 responses)
codeception/codeception suggests installing hoa/console (For interactive console functionality)
codeception/codeception suggests installing symfony/phpunit-bridge (For phpunit-bridge support)
codeception/codeception suggests installing stecman/symfony-console-completion (For BASH autocompletion)
symfony/browser-kit suggests installing symfony/process
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Package symfony/debug is abandoned, you should avoid using it. Use symfony/error-handler instead.
Writing lock file
Generating autoload files
20 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> yii\composer\Installer::postCreateProject
chmod('runtime', 0777)...done.
chmod('web/assets', 0777)...done.
chmod('yii', 0755)...done.
> yii\composer\Installer::postInstall

Теперь перейдите в каталог с проектом и создайте ссылку public_html, указывающую на каталог public:

cd yii-basic
ln -s web public_html

Настройка подключения к базе данных описана выше, в разделе Yii Basic.

Установка Yii Advanced происходит следующей командой:

php8.2 $(which composer-phar) create-project --prefer-dist yiisoft/yii2-app-advanced yii-advanced
Creating a "yiisoft/yii2-app-advanced" project at "./yii-advanced"
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Installing yiisoft/yii2-app-advanced (2.0.45)
  - Installing yiisoft/yii2-app-advanced (2.0.45): Loading from cache
Created project in /home/a/account/yii-advanced
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 66 installs, 0 updates, 0 removals
  - Installing yiisoft/yii2-composer (2.0.10): Loading from cache
  - Installing sebastian/diff (1.4.3): Loading from cache
  - Installing sebastian/recursion-context (2.0.0): Loading from cache
  - Installing sebastian/exporter (2.0.0): Loading from cache
  - Installing sebastian/comparator (1.2.4): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.3): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing phpunit/php-file-iterator (1.4.5): Loading from cache
  - Installing phpunit/php-token-stream (1.4.12): Loading from cache
  - Installing sebastian/environment (2.0.0): Loading from cache
  - Installing phpunit/php-code-coverage (4.0.8): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing doctrine/instantiator (1.0.5): Loading from cache
  - Installing phpunit/php-timer (1.0.9): Loading from cache
  - Installing symfony/polyfill-ctype (v1.19.0): Loading from cache
  - Installing webmozart/assert (1.9.1): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (3.3.2): Loading from cache
  - Installing phpspec/prophecy (v1.10.3): Loading from cache
  - Installing myclabs/deep-copy (1.7.0): Loading from cache
  - Installing sebastian/global-state (1.1.1): Loading from cache
  - Installing sebastian/object-enumerator (2.0.1): Loading from cache
  - Installing symfony/yaml (v3.4.47): Loading from cache
  - Installing phpunit/phpunit-mock-objects (3.4.4): Loading from cache
  - Installing phpunit/phpunit (5.7.27): Loading from cache
  - Installing codeception/phpunit-wrapper (6.0.22): Loading from cache
  - Installing codeception/verify (0.5.0): Loading from cache
  - Installing npm-asset/bootstrap (4.6.2): Loading from cache
  - Installing paragonie/random_compat (v2.0.21): Loading from cache
  - Installing bower-asset/jquery (3.7.1): Loading from cache
  - Installing bower-asset/yii2-pjax (2.0.8): Loading from cache
  - Installing bower-asset/punycode (v1.3.2): Loading from cache
  - Installing bower-asset/inputmask (3.3.11): Loading from cache
  - Installing cebe/markdown (1.2.1): Loading from cache
  - Installing ezyang/htmlpurifier (v4.17.0): Loading from cache
  - Installing yiisoft/yii2 (2.0.49.3): Loading from cache
  - Installing yiisoft/yii2-bootstrap4 (2.0.11): Loading from cache
  - Installing swiftmailer/swiftmailer (v5.4.12): Loading from cache
  - Installing yiisoft/yii2-swiftmailer (2.0.7): Loading from cache
  - Installing yiisoft/yii2-debug (2.1.25): Loading from cache
  - Installing phpspec/php-diff (v1.1.3): Loading from cache
  - Installing yiisoft/yii2-gii (2.2.6): Loading from cache
  - Installing fakerphp/faker (v1.9.2): Loading from cache
  - Installing yiisoft/yii2-faker (2.0.5): Loading from cache
  - Installing symfony/finder (v3.4.47): Loading from cache
  - Installing symfony/event-dispatcher (v3.4.47): Loading from cache
  - Installing symfony/css-selector (v3.4.47): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.19.0): Loading from cache
  - Installing psr/log (1.1.4): Loading from cache
  - Installing symfony/debug (v3.4.47): Loading from cache
  - Installing symfony/console (v3.4.47): Loading from cache
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.9.1): Loading from cache
  - Installing codeception/stub (2.1.0): Loading from cache
  - Installing codeception/lib-asserts (1.13.2): Loading from cache
  - Installing behat/gherkin (v4.7.3): Loading from cache
  - Installing codeception/codeception (4.2.2): Loading from cache
  - Installing codeception/module-asserts (1.3.1): Loading from cache
  - Installing symfony/dom-crawler (v3.4.47): Loading from cache
  - Installing symfony/browser-kit (v3.4.47): Loading from cache
  - Installing codeception/lib-innerbrowser (1.5.1): Loading from cache
  - Installing codeception/module-yii2 (1.1.5): Loading from cache
  - Installing codeception/module-filesystem (1.0.3): Loading from cache
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
phpunit/phpunit suggests installing ext-xdebug (*)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ezyang/htmlpurifier suggests installing cerdic/css-tidy (If you want to use the filter 'Filter.ExtractStyleBlocks'.)
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/event-dispatcher suggests installing symfony/http-kernel
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-7 responses)
codeception/codeception suggests installing hoa/console (For interactive console functionality)
codeception/codeception suggests installing codeception/specify (BDD-style code blocks)
codeception/codeception suggests installing symfony/phpunit-bridge (For phpunit-bridge support)
codeception/codeception suggests installing stecman/symfony-console-completion (For BASH autocompletion)
symfony/browser-kit suggests installing symfony/process
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Package symfony/debug is abandoned, you should avoid using it. Use symfony/error-handler instead.
Writing lock file
Generating autoload files
20 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

В данном случае также потребуется создать ссылку с именем public_html, но в этом случае она уже будет указывать на каталог frontend/web.

cd yii-advanced
ln -s frontend/web public_html

Теперь создайте в корневом каталоге публичной части ссылку на каталог административной части сайта:

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

После этого необходимо внести правила в файл .htaccess в корневом каталоге сайта, чтобы при переходе по поддомену backend.domain.ru срабатывало перенаправление на созданную нами ссылку.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?backend.domain.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/backend
RewriteRule ^(.*)$ backend/$1 [L]
Обратите внимание!
Домен в примере выше необходимо скорректировать на прикрепленный к сайту домен бэкенда.

Настройка подключения к базе данных описана выше, в разделе Yii Advanced.

Инициализируйте dev-окружение:

php8.2 ~/yii-advanced/yii migrate
Yii Application Initialization Tool v1.0
Which environment do you want the application to be initialized in?
  [0] Development
  [1] Production
  Your choice [0-1, or "q" to quit] 0
  Initialize the application under 'Development' environment? [yes|no] yes
  Start initialization ...
   generate console/config/params-local.php
   generate console/config/test-local.php
   generate console/config/main-local.php
   generate frontend/web/index-test.php
   generate frontend/web/index.php
   generate frontend/web/robots.txt
   generate frontend/config/codeception-local.php
   generate frontend/config/params-local.php
   generate frontend/config/test-local.php
   generate frontend/config/main-local.php
   generate common/config/codeception-local.php
   generate common/config/params-local.php
   generate common/config/test-local.php
   generate common/config/main-local.php
   generate backend/web/index-test.php
   generate backend/web/index.php
   generate backend/web/robots.txt
   generate backend/config/codeception-local.php
   generate backend/config/params-local.php
   generate backend/config/test-local.php
   generate backend/config/main-local.php
   generate yii_test.bat
   generate yii_test
   generate yii
   generate cookie validation key in backend/config/main-local.php
   generate cookie validation key in common/config/codeception-local.php
   generate cookie validation key in frontend/config/main-local.php
  	chmod 0777 backend/runtime
  	chmod 0777 backend/web/assets
  	chmod 0777 console/runtime
  	chmod 0777 frontend/runtime
  	chmod 0777 frontend/web/assets
  	chmod 0755 yii
  	chmod 0755 yii_test
  ... initialization completed.

Выполните миграции:

php8.2 ~/yii-advanced/yii migrate
Yii Migration Tool (based on Yii v2.0.49.3)
Creating migration history table "migration"...Done.
Total 2 new migrations to be applied:
    	m130524_201442_init
    	m190124_110200_add_verification_token_column_to_user_table
Apply the above migrations? (yes|no) [no]:y
*** applying m130524_201442_init
	> create table {{%user}} ... done (time: 0.007s)
*** applied m130524_201442_init (time: 0.015s)

*** applying m190124_110200_add_verification_token_column_to_user_table
	> add column verification_token string NULL DEFAULT NULL to table {{%user}} ... done (time: 0.015s)
*** applied m190124_110200_add_verification_token_column_to_user_table (time: 0.020s)

2 migrations were applied.

Migrated up successfully.

Установка Symfony

Установка данного фреймворка на нашем хостинге возможна с помощью Composer. Перед установкой Symfony потребуется установить Composer версии 2 и выше локально, подробно процесс описан в нашей статье.

Для начала создайте сайт и привяжите к нему домен. Для этого откройте раздел Сайты и создайте сайт с нужным именем по инструкции: Сайты. Если свободный домен, на котором требуется разместить сайт, уже есть, прикрепите его в этом же разделе. Если домена нет - откройте раздел Домены и поддомены и добавьте домен в панель управления либо создайте поддомен на уже существующем.

После чего подключитесь к серверу по ssh, либо откройте веб-терминал, перейдите в директорию созданного сайта и удалите ее содержимое:

cd symfony/
rm -rf * .*
Обратите внимание!
В командах, указанных далее, используется версия php 8.2, поскольку это минимальная версия для Symfony 7 на момент написания статьи. Если для вашего проекта требуется другая версия, скорректируйте ее на соответствующую. В качестве пути до локально установленного Composer используется ~/.local/bin/composer, если вы устанавливали Composer в другую директорию, укажите актуальный путь в команде. Также убедитесь, что в разделе Сайты указана корректная версия php в настройках прикрепленного домена.

Создайте проект Symfony с помощью Composer:

php8.2 ~/.local/bin/composer create-project symfony/skeleton:"7.1.*" .
Creating a "symfony/skeleton:7.1.*" project at "./"
Installing symfony/skeleton (v7.1.99)
  - Downloading symfony/skeleton (v7.1.99)
  - Installing symfony/skeleton (v7.1.99): Extracting archive
Created project in /home/b/betutorial/symfony/.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking symfony/flex (v2.4.5)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading symfony/flex (v2.4.5)
  - Installing symfony/flex (v2.4.5): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!

Run composer recipes at any time to see the status of your Symfony recipes.

Loading composer repositories with package information
Restricting packages listed in "symfony/symfony" to "7.1.*"
Updating dependencies
Lock file operations: 30 installs, 0 updates, 0 removals
...
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 30 installs, 0 updates, 0 removals
...
Generating autoload files
27 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Symfony operations: 4 recipes (84d44b6bf774ec8b5b8c9013e60d3263)
  - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:main
  - Configuring symfony/framework-bundle (>=7.0): From github.com/symfony/recipes:main
  - Configuring symfony/console (>=5.3): From github.com/symfony/recipes:main
  - Configuring symfony/routing (>=7.0): From github.com/symfony/recipes:main
Executing script cache:clear [OK]
Executing script assets:install public [OK]

 What's next?


Some files have been created and/or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

 symfony/framework-bundle  instructions:

  * Run your application:
	1. Go to the project directory
	2. Create your code repository with the git init command
	3. Download the Symfony CLI at https://symfony.com/download to install a development web server

  * Read the documentation at https://symfony.com/doc

No security vulnerability advisories found.

No security vulnerability advisories found.

После чего инициализируйте веб-приложение:

php8.2 ~/.local/bin/composer require webapp
Running composer update symfony/webapp-pack
Loading composer repositories with package information
Restricting packages listed in "symfony/symfony" to "7.1.*"
Updating dependencies
Lock file operations: 106 installs, 0 updates, 0 removals
...
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 106 installs, 0 updates, 0 removals
...
Generating autoload files
120 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Symfony operations: 20 recipes (622d56465315f61bbe7e790a0847b0b6)
  - Configuring symfony/webapp-pack (>=1.0): From github.com/symfony/recipes:main
  - Configuring doctrine/doctrine-bundle (>=2.12): From github.com/symfony/recipes:main
  -  WARNING  doctrine/doctrine-bundle (>=2.12): From github.com/symfony/recipes:main

На вопрос о конфигурации Docker отвечаем n (либо x), поскольку запуск Docker-контейнеров на хостинге невозможен:

The recipe for this package contains some Docker configuration.

	This may create/update compose.yaml or update Dockerfile (if it exists).

	Do you want to include Docker configuration from recipes?
	[y] Yes
	[n] No
	[p] Yes permanently, never ask again for this project
	[x] No permanently, never ask again for this project
	(defaults to y): n
  - Configuring doctrine/doctrine-migrations-bundle (>=3.1): From github.com/symfony/recipes:main
  - Configuring phpunit/phpunit (>=9.6): From github.com/symfony/recipes:main
  - Configuring symfony/debug-bundle (>=5.3): From github.com/symfony/recipes:main
  - Configuring symfony/messenger (>=6.0): From github.com/symfony/recipes:main
  - Configuring symfony/phpunit-bridge (>=6.3): From github.com/symfony/recipes:main
  - Configuring symfony/twig-bundle (>=6.4): From github.com/symfony/recipes:main
  - Configuring symfony/web-profiler-bundle (>=6.1): From github.com/symfony/recipes:main
  - Configuring symfony/validator (>=7.0): From github.com/symfony/recipes:main
  - Configuring symfony/stimulus-bundle (>=2.13): From github.com/symfony/recipes:main
  - Configuring symfony/ux-turbo (>=v2.18.0): From auto-generated recipe
  - Configuring twig/extra-bundle (>=v3.10.0): From auto-generated recipe
  - Configuring symfony/translation (>=6.3): From github.com/symfony/recipes:main
  - Configuring symfony/security-bundle (>=6.4): From github.com/symfony/recipes:main
  - Configuring symfony/notifier (>=5.0): From github.com/symfony/recipes:main
  - Configuring symfony/monolog-bundle (>=3.7): From github.com/symfony/recipes:main
  - Configuring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:main
  - Configuring symfony/mailer (>=4.3): From github.com/symfony/recipes:main
  - Configuring symfony/asset-mapper (>=6.4): From github.com/symfony/recipes:main
Executing script importmap:require [OK]
Executing script importmap:require [OK]
Executing script importmap:require [OK]
Unpacking Symfony packs
  - Unpacked symfony/webapp-pack
  - Unpacked symfony/orm-pack
  - Unpacked symfony/serializer-pack
  - Unpacked symfony/twig-pack
  - Unpacked symfony/debug-pack
  - Unpacked symfony/profiler-pack
  - Unpacked symfony/test-pack
The "fxp/composer-asset-plugin" plugin (installed globally) was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.6.0"). You may need to run composer update with the "--no-plugins" option.
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 0 updates, 7 removals
  - Removing symfony/webapp-pack (v1.3.0)
  - Removing symfony/twig-pack (v1.0.1)
  - Removing symfony/test-pack (v1.1.0)
  - Removing symfony/serializer-pack (v1.3.0)
  - Removing symfony/profiler-pack (v1.0.6)
  - Removing symfony/orm-pack (v2.4.1)
  - Removing symfony/debug-pack (v1.0.10)
Generating autoload files
113 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Symfony operations: 1 recipe (e1e61614c89594bf4c6a120fd5edf037)
  - Unconfiguring symfony/webapp-pack (>=1.0): From github.com/symfony/recipes:main
Executing script cache:clear [OK]
Executing script assets:install public [OK]
Executing script importmap:install [OK]

No security vulnerability advisories found.

 What's next?


Some files have been created and/or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

 doctrine/doctrine-bundle  instructions:

  * Modify your DATABASE_URL config in .env

  * Configure the driver (postgresql) and
	server_version (16) in config/packages/doctrine.yaml

 symfony/messenger  instructions:

  * You're ready to use the Messenger component. You can define your own message buses
	or start using the default one right now by injecting the message_bus service
	or type-hinting Symfony\Component\Messenger\MessageBusInterface in your code.

  * To send messages to a transport and handle them asynchronously:

	1. Update the MESSENGER_TRANSPORT_DSN env var in .env if needed
   	and framework.messenger.transports.async in config/packages/messenger.yaml;
	2. (if using Doctrine) Generate a Doctrine migration bin/console doctrine:migration:diff
   	and execute it bin/console doctrine:migration:migrate
	3. Route your message classes to the async transport in config/packages/messenger.yaml.

  * Read the documentation at https://symfony.com/doc/current/messenger.html

 symfony/phpunit-bridge  instructions:

  * Write test cases in the tests/ folder
  * Use MakerBundle's make:test command as a shortcut!
  * Run the tests with php bin/phpunit

 symfony/mailer  instructions:

  * You're ready to send emails.

  * If you want to send emails via a supported email provider, install
	the corresponding bridge.
	For instance, composer require mailgun-mailer for Mailgun.

  * If you want to send emails asynchronously:

	1. Install the messenger component by running composer require messenger;
	2. Add 'Symfony\Component\Mailer\Messenger\SendEmailMessage': amqp to the
   	config/packages/messenger.yaml file under framework.messenger.routing
   	and replace amqp with your transport name of choice.

  * Read the documentation at https://symfony.com/doc/master/mailer.html

No security vulnerability advisories found.

Также требуется создать символьную ссылку на директорию public:

ln -s public public_html

Настройка подключения Symfony к базе данных

Для настройки подключения к БД отредактируйте файл .env в директории проекта. В Symfony для работы с БД используется ORM Doctrine. Подключение к БД задается в URL-формате со следующей структурой:

DATABASE_URL="<driver>://<username>:<password>@<hostname_or_ip>:<port>/<database_name>?serverVersion=<server_version>&charset=<charset>"

Разберем параметры URL:

  • <driver> - используемый драйвер Symfony, доступны sqlite, mysql и postgresql;
  • <username> - имя пользователя БД, на виртуальном хостинге и облачной БД совпадает с названием базы данных;
  • <password> - пароль для указанного ранее пользователя;
  • <hostname_or_ip> - адрес подключения к БД, для локального подключения укажите 127.0.0.1, для облачной БД - указанный на странице БД адрес;
  • <port> - порт для подключения к БД, для mysql на хостинге/облачной БД - 3306, для облачного postgresql - 5432;
  • <database_name> - название базы данных;
  • <server_version> - полная версия сервера базы данных. Узнать можно, выполнив запрос SELECT VERSION(); к базе данных, например, с помощью командной строки, либо из phpmyadmin. Пример команды в терминале:
mysql betutorial_symf -ubetutorial_symf -p'W*Y9bybB' -e 'select version();'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------------------------+
| version()                   	|
+---------------------------------+
| 5.7.21-20-beget-5.7.21-20-1-log |
+---------------------------------+

В данном случае версия, которую необходимо указать - 5.7.21-20-beget-5.7.21-20-1-log.

  • <charset> - кодировка БД.

Все значения параметров должны быть закодированы в формате urlencode. Например, для подключение к хостинговой БД mysql с названием betutorial_symf и паролем W*Y9bybB строка конфигурации будет выглядеть следующим образом:

DATABASE_URL="mysql://betutorial_symf:W%2AY9bybB@127.0.0.1:3306/betutorial_symf?serverVersion=5.7.21-20-beget-5.7.21-20-1-log&charset=utf8mb4"

Для проверки подключения можно воспользоваться консолью Symfony, выполнив sql-запрос командой:

php8.2 bin/console doctrine:query:sql 'select version();'

В случае успешной настройки будет выведена версия сервера БД:

 ---------------------------------
  version()
 ---------------------------------
  5.7.21-20-beget-5.7.21-20-1-log
 ---------------------------------

После завершения настройки откройте ваш сайт в браузере, по умолчанию должна отобразиться стартовая страница Symfony:

welcome to symfony 7

Установка Laravel

Установка с помощью Composer

Для установки Laravel потребуется локально установить Composer версии 2. Если на аккаунте его ещё нет - установить его вы можете по нашей инструкции.

Для корректной установки нам нужно создать проект в корневом каталоге учетной записи и только потом создавать сайт в панели управления.

Обратите внимание!
Команды должны выполняться в корневом каталоге учетной записи!

Подключитесь к аккаунту по SSH и выполните следующую команду:

$ export PATH=/usr/local/php/cgi/8.3/bin/:$PATH

До окончания текущей SSH-сессии по умолчанию будет использоваться PHP 8.3

$ php -v
PHP 8.3.13 (cli) (built: Nov 20 2024 08:42:31) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies

Произведем установку, используя локально установленный Composer:

$ COMPOSER_MEMORY_LIMIT=-1 ~/.local/bin/composer create-project --prefer-dist laravel/laravel

Теперь создадим в панели управления сайт с именем созданного проекта (в данном случае laravel) и привяжем к нему домен.

Создадим символьную ссылку public_html, указывающую на каталог public:

$ cd laravel/
$ rm -r public_html/
$ ln -s public public_html

Параметры подключения к базе данных при необходимости настраиваются в файле config/database.php. Достаточно изменить значения параметров database, username и password в массиве mysql.

Обратите внимание!
Имя пользователя базы данных должно соответствовать её имени.

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

laravel

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

Теги:

76
46791