Skip to content

Latest commit

 

History

History
161 lines (117 loc) · 12.2 KB

README.md

File metadata and controls

161 lines (117 loc) · 12.2 KB

Интернет магазин на Symfony

Перейти на сайт

Выберите язык

Русский English Español 中文 Français Deutsch
Выбран English Español 中文 Français Deutsch

Используемые технологии

  • Nginx 1.26.1
  • PHP 8.3.9
  • Composer 2.7.7
  • PostgreSQL 16.3
  • npm 10.8.2

О проекте

Этот проект реализует интернет магазин с использованием Symfony v6.4.9. Часть функционала выполнена на Vue 2.6 для корзины и административной панели.

Основной функционал

  • Смена локали
  • Консольные команды:
    • php bin/console app:add-user - создание пользователя
    • php bin/console app:update-slug-product - обновление слага продукта

Фронтенд

  • регистрация посетителей;
  • личный кабинет;
  • восстановление пароля;
  • оформление заказа с уведомлениями по email;
  • в проекте можно авторизоваться и/или зарегистрироваться, используя: Yandex, Google, GitHub или ВКонтакте.

Административная часть

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

Установка проекта

  1. Клонировать репозиторий: git clone [email protected]:yaleksandr89/symfony-shop.git.
  2. Переименовать: .env-example в .env:
    • Настройте ADMIN_EMAIL / MAILER_DSN иначе не будет работать функционал восстановления пароля, а также процесс регистрации пользователя будет отрабатывать не до конца.
    • Настройте OAUTH_GOOGLE_ID / OAUTH_GOOGLE_SECRET - иначе не будет работать авторизация через Google.
    • Настройте OAUTH_YANDEX_CLIENT_ID / OAUTH_YANDEX_CLIENT_SECRET - иначе не будет работать авторизация через Яндекс.
    • Настройте OAUTH_VK_CLIENT_ID / OAUTH_VK_CLIENT_SECRET - иначе не будет работать авторизация через Вконтакте.
    • Настройте OAUTH_GITHUB_EN_CLIENT_ID / OAUTH_GOOGLE_SECRET - иначе не будет работать авторизация через Github (локаль локали: en).
    • Настройте OAUTH_GITHUB_RUS_CLIENT_ID / OAUTH_GITHUB_RUS_CLIENT_SECRET - иначе не будет работать авторизация через Github (локаль локали: ru).
    • Настройте SITE_BASE_HOST / SITE_BASE_SCHEME - иначе будут формироваться не корректные ссылки при регистрации, восстановлении пароле и ссылки которые находятся в письмах.
    • Настройте APP_TIMEZONE - указывает временную зону, которую будет использовать проект. По умолчанию APP_TIMEZONE=Europe/Moscow, если хотите использовать временную зону указанную в php.ini - оставьте эту переменную пустой.
  3. Выполните: composer i && npm i && npm run build.
  4. Создайте БД: php bin/console doctrine:database:create либо symfony doctrine:database:create (если установлена symfony cli).
    • На проекте используется uuid_generate_v4 (используемая СуБД postgresql), поэтому перед миграцией, подключитесь к БД и выполните:
      • Подключитесь к выбранной БД (\c ИМЯ СОЗДАННОЙ БД).
      • CREATE EXTENSION "uuid-ossp";.
      • Для проверки можно выполнить SELECT uuid_generate_v4(); - если в ответ сгенерировался uuid можно приступать к миграциям.
  5. Выполните миграции: php bin/console doctrine:migrations:migrate либо symfony doctrine:migrations:migrate (если установлена symfony cli).
  6. Выполните: php bin/console assets:install либо symfony console assets:install (если установлена symfony cli).
  7. После этого сайт уже будет работать (открываться фронтовая часть), но для подключения к админке необходимо создать пользователя. Это можно сделать через созданную команду:
    • php bin/console app:add-user либо symfony console app:add-user (если установлена symfony cli).
    • Укажите email.
    • Укажите пароль (при вводе он отображаться не будет).
    • Укажите роль, для админа можно указать ROLE_SUPER_ADMIN (Доступные роли: ROLE_SUPER_ADMIN,ROLE_ADMIN,ROLE_USER).

Настройка Messenger

Для отправки некоторых писем (восстановление пароля, подтверждение учетной записи) используется Symfony Messenger, поэтому необходимо запустить команду в терминале symfony console messenger:consume async -vv. Ручной запуск команды - целесообразен на этапе тестирования, когда все будет проверенно желательно или:

  • повесить команду на cron
  • настроить supervisor

Пример конфига, который необходимо разместить /etc/supervisor/conf.d/messenger-worker.conf:

;/etc/supervisor/conf.d/messenger-worker.conf
[program:messenger-consume]
command=php /path/to/your/app/bin/console messenger:consume async --time-limit=3600
user=ubuntu
numprocs=2
startsecs=0
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
  • command= - после php указать путь до консоли и через пробел, команду, которую надо добавить
  • user= - указать текущего пользователя
  • numprocs= - количество процессов, которые будут созданы

Остальные опции можно оставить без изменений. Пример конфига с официального сайта.

Тестирование

Проект покрыт тестами различных типов (разбиты по группам #[Group(name: '{name}')]):

  • unit
  • integration
  • functional
  • functional-panther
  • functional-selenium

Группы тестов 1. - 3. должны запускать без каких либо проблем php ./vendor/bin/phpunit --testdox --group unit --group integration --group functional. По последним двум группам в процессе тестирования могут возникнуть проблемы из-за отсутствия установленного chromedriver - движок chrome или geckodriver - движок firefox.

chromedriver-not-found

selenium-server-not-work

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

После этого, перед началом тестирования, предварительно, нужно запустить selenium командой:

  • java -jar bin/selenium-server-4.22.0.jar standalone
  • java -jar bin/selenium-server-standalone-3.141.59.jar (не требует указания параметра standalone, но версия более старая)

Требует наличия java, в Ubuntu можно установить командой: sudo apt install openjdk-21-jdk, версия может отличаться - ставлю всегда последнюю

install-openjdk-21-jdk

Деплой с использованием Deployer 7

Deployer 7 - это инструмент для автоматизации процесса деплоя приложений. Он позволяет определить задачи и последовательности действий для развертывания кода на удаленных серверах. В данном репозитории используется Deployer 7 для автоматизации деплоя.

Настройка

Для использования Deployer 7 вам потребуется настроить файл deploy.php. Для этого переименуйте deploy-example.php в deploy.php, посмотрите оставленные комментарии и заполните файл согласно вашим потребностям. К обязательному заполнению относится раздел //hosts

// Hosts
host('...')
    ->setHostname('...')
    ->setPort('...')
    ->setRemoteUser('...')
    ->setIdentityFile('~/.ssh/....pub')
    ->set('labels', ['stage' => 'prod'])
    ->set('branch', '...')
    ->set('deploy_path', '...');

Использование

Для запуска в консоли выполните php deployer7.phar deploy, результат успешного деплоя будет выглядеть примерно так:

success-deploy

UPD

  • 08.07.2023 - удален конфиг .circleci. Перестал работать в России: https://support.circleci.com/hc/en-us/articles/360043679453-CircleCI-Terms-of-Service-Violation-Sanctioned-Country
  • 08.07.2023 - Symfony обновлена до последней, на текущую дату, версию 6.3.1
  • 17.07.2024 - Symfony обновлена до версии 6.4.9
  • 17.07.2024 - Unit тесты обновлены до 11 версии, также отрефакторины сами тесты
  • Добавлен конфиг для nginx и supervisor, а также различнее переводы для README.md