{"id":15028823,"url":"https://github.com/yaleksandr89/symfony-shop","last_synced_at":"2025-04-09T20:32:15.528Z","repository":{"id":40404473,"uuid":"409737887","full_name":"yaleksandr89/symfony-shop","owner":"yaleksandr89","description":"[Pet project] Интернет-магазин","archived":false,"fork":false,"pushed_at":"2024-07-30T20:49:51.000Z","size":98610,"stargazers_count":15,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-23T22:24:51.199Z","etag":null,"topics":["deployer-php","php","php8","php82","php83","selenium","selenium-tests","selenium-webdriver","selenium4","symfony","symfony-application","symfony5","symfony6","symfony6-4","symfony64","unit-test","unit-testing","vue","vuejs"],"latest_commit_sha":null,"homepage":"https://s-shop.alexanderyurchenko.ru","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yaleksandr89.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-23T20:40:37.000Z","updated_at":"2024-11-05T22:22:11.000Z","dependencies_parsed_at":"2024-07-31T00:49:58.776Z","dependency_job_id":null,"html_url":"https://github.com/yaleksandr89/symfony-shop","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fsymfony-shop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fsymfony-shop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fsymfony-shop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaleksandr89%2Fsymfony-shop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaleksandr89","download_url":"https://codeload.github.com/yaleksandr89/symfony-shop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248107262,"owners_count":21048888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployer-php","php","php8","php82","php83","selenium","selenium-tests","selenium-webdriver","selenium4","symfony","symfony-application","symfony5","symfony6","symfony6-4","symfony64","unit-test","unit-testing","vue","vuejs"],"created_at":"2024-09-24T20:09:08.160Z","updated_at":"2025-04-09T20:32:15.496Z","avatar_url":"https://github.com/yaleksandr89.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Интернет магазин на Symfony\n\n\u003e  [Перейти на сайт](https://s-shop.alexanderyurchenko.ru/ \"Перейти на сайт\")\n\n## Выберите язык\n\n| Русский  | English                              | Español                              | 中文                              | Français                              | Deutsch                              |\n|----------|--------------------------------------|--------------------------------------|---------------------------------|---------------------------------------|--------------------------------------|\n| **Выбран** | [English](./docs/langs/README_en.md) | [Español](./docs/langs/README_es.md) | [中文](./docs/langs/README_zh.md) | [Français](./docs/langs/README_fr.md) | [Deutsch](./docs/langs/README_de.md) |\n\n## Используемые технологии\n\n* Nginx 1.26.1\n* PHP 8.3.9\n* Composer 2.7.7\n* PostgreSQL 16.3\n* npm 10.8.2\n\n## О проекте\n\nЭтот проект реализует интернет магазин с использованием **Symfony v6.4.9**. Часть функционала выполнена на **Vue 2.6** для корзины и административной панели.\n\n### Основной функционал\n\n* Смена локали\n* Консольные команды:\n    * `php bin/console app:add-user` - создание пользователя\n    * `php bin/console app:update-slug-product` - обновление слага продукта\n\n### Фронтенд\n\n* регистрация посетителей;\n* личный кабинет;\n* восстановление пароля;\n* оформление заказа с уведомлениями по email;\n* в проекте можно авторизоваться и/или зарегистрироваться, используя: Yandex, Google, GitHub или ВКонтакте.\n\n### Административная часть\n\n* управление заказами и пользователями;\n* создание категорий;\n* создание товаров;\n* создание заказов.\n\n## Установка проекта\n\n1. Клонировать репозиторий: `git clone git@github.com:yaleksandr89/symfony-shop.git`.\n2. Переименовать: `.env-example` в `.env`:\n   * Настройте `ADMIN_EMAIL` / `MAILER_DSN` иначе не будет работать функционал восстановления пароля, а также процесс регистрации пользователя будет отрабатывать не до конца.\n   * Настройте `OAUTH_GOOGLE_ID` / `OAUTH_GOOGLE_SECRET` - иначе не будет работать авторизация через Google.\n   * Настройте `OAUTH_YANDEX_CLIENT_ID` / `OAUTH_YANDEX_CLIENT_SECRET` - иначе не будет работать авторизация через Яндекс.\n   * Настройте `OAUTH_VK_CLIENT_ID` / `OAUTH_VK_CLIENT_SECRET` - иначе не будет работать авторизация через Вконтакте.\n   * Настройте `OAUTH_GITHUB_EN_CLIENT_ID` / `OAUTH_GOOGLE_SECRET` - иначе не будет работать авторизация через Github (локаль локали: en).\n   * Настройте `OAUTH_GITHUB_RUS_CLIENT_ID` / `OAUTH_GITHUB_RUS_CLIENT_SECRET` - иначе не будет работать авторизация через Github (локаль локали: ru).\n   * Настройте `SITE_BASE_HOST` / `SITE_BASE_SCHEME` - иначе будут формироваться не корректные ссылки при регистрации, восстановлении пароле и ссылки которые находятся в письмах.\n   * Настройте `APP_TIMEZONE` - указывает временную зону, которую будет использовать проект. По умолчанию `APP_TIMEZONE=Europe/Moscow`, если хотите использовать временную зону указанную в `php.ini` - оставьте эту переменную пустой.\n3. Выполните: `composer i \u0026\u0026 npm i \u0026\u0026 npm run build`.\n4. Создайте БД: `php bin/console doctrine:database:create` либо `symfony doctrine:database:create` (если установлена symfony cli).\n   * На проекте используется `uuid_generate_v4` (используемая СуБД postgresql), поэтому перед миграцией, подключитесь к БД и выполните:\n       * Подключитесь к выбранной БД (`\\c ИМЯ СОЗДАННОЙ БД`).\n       * `CREATE EXTENSION \"uuid-ossp\";`.\n       * Для проверки можно выполнить `SELECT uuid_generate_v4();` - если в ответ сгенерировался uuid можно приступать к миграциям.\n5. Выполните миграции: `php bin/console doctrine:migrations:migrate` либо `symfony doctrine:migrations:migrate` (если установлена symfony cli).\n6. Выполните: `php bin/console assets:install` либо `symfony console assets:install` (если установлена symfony cli).\n7. После этого сайт уже будет работать (открываться фронтовая часть), но для подключения к админке необходимо создать пользователя. Это можно сделать через созданную команду:\n    * `php bin/console app:add-user` либо `symfony console app:add-user` (если установлена symfony cli).\n    * Укажите email.\n    * Укажите пароль (при вводе он отображаться не будет).\n    * Укажите роль, для админа можно указать `ROLE_SUPER_ADMIN` (Доступные роли: `ROLE_SUPER_ADMIN`,`ROLE_ADMIN`,`ROLE_USER`).\n\n## Настройка Messenger\n\nДля отправки некоторых писем (восстановление пароля, подтверждение учетной записи) используется [Symfony Messenger](https://symfony.com/doc/current/components/messenger.html \"Symfony Messenger\"), поэтому необходимо запустить команду в терминале `symfony console messenger:consume async -vv`. Ручной запуск команды - целесообразен на этапе тестирования, когда все будет проверенно желательно или:\n\n* повесить команду на `cron` \n* настроить `supervisor`\n\nПример конфига, который необходимо разместить `/etc/supervisor/conf.d/messenger-worker.conf`:\n\n```\n;/etc/supervisor/conf.d/messenger-worker.conf\n[program:messenger-consume]\ncommand=php /path/to/your/app/bin/console messenger:consume async --time-limit=3600\nuser=ubuntu\nnumprocs=2\nstartsecs=0\nautostart=true\nautorestart=true\nprocess_name=%(program_name)s_%(process_num)02d\n```\n\n* `command=` - после `php` указать путь до консоли и через пробел, команду, которую надо добавить\n* `user=` - указать текущего пользователя\n* `numprocs=` - количество процессов, которые будут созданы\n\nОстальные опции можно оставить без изменений. [Пример конфига](https://symfony.com/doc/6.4/messenger.html#supervisor-configuration) с официального сайта.\n\n### Тестирование\n\nПроект покрыт тестами различных типов (разбиты по группам `#[Group(name: '{name}')]`):\n\n* unit\n* integration\n* functional\n* functional-panther\n* functional-selenium\n\nГруппы тестов 1. - 3. должны запускать без каких либо проблем `php ./vendor/bin/phpunit --testdox --group unit --group integration --group functional`. По последним двум группам\nв процессе тестирования могут возникнуть проблемы из-за отсутствия установленного [chromedriver](drivers/chromedriver) - движок chrome или [geckodriver](drivers/geckodriver) - движок firefox. \n\n![chromedriver-not-found](docs/img/chromedriver-not-found.png)\n\n![selenium-server-not-work](docs/img/selenium-server-not-work.png)\n\nИсправить данные баги легко, для этого нужно:\n\n* скачать движок: https://chromedriver.chromium.org/downloads (выбирать в зависимости от версии хрома). Можно попробовать воспользоваться движками, которые я разместил в проект в директории **drivers/**, но если версии движка и установленного браузера различаются - могут быть ошибки.\n* Как установить движок в системе (linux) глобально: https://bangladroid.wordpress.com/2016/08/10/how-to-install-chrome-driver-in-linux-mint-selenium-webdriver/\n\nПосле этого, перед началом тестирования, предварительно, нужно запустить selenium командой:\n\n* `java -jar bin/selenium-server-4.22.0.jar standalone`\n* `java -jar bin/selenium-server-standalone-3.141.59.jar` (не требует указания параметра standalone, но версия более старая)\n\nТребует наличия java, в Ubuntu можно установить командой: `sudo apt install openjdk-21-jdk`, версия может отличаться - ставлю всегда последнюю\n\n![install-openjdk-21-jdk](docs/img/install-openjdk-21-jdk.png)\n\n## Деплой с использованием Deployer 7\n\n[Deployer 7](https://deployer.org/docs/7.x/getting-started) - это инструмент для автоматизации процесса деплоя приложений. Он позволяет определить задачи и последовательности действий для развертывания кода на удаленных серверах. В данном репозитории используется Deployer 7 для автоматизации деплоя.\n\n### Настройка\n\nДля использования Deployer 7 вам потребуется настроить файл `deploy.php`. Для этого переименуйте [deploy-example.php](deploy-example.php) в `deploy.php`, посмотрите оставленные комментарии и заполните файл согласно вашим потребностям. К **обязательному заполнению** относится раздел `//hosts`\n\n```php\n// Hosts\nhost('...')\n    -\u003esetHostname('...')\n    -\u003esetPort('...')\n    -\u003esetRemoteUser('...')\n    -\u003esetIdentityFile('~/.ssh/....pub')\n    -\u003eset('labels', ['stage' =\u003e 'prod'])\n    -\u003eset('branch', '...')\n    -\u003eset('deploy_path', '...');\n```\n\n### Использование\n\nДля запуска в консоли выполните `php deployer7.phar deploy`, результат успешного деплоя будет выглядеть примерно так:\n\n![success-deploy](docs/img/deployer7-deploy.png)\n\n## UPD\n\n* 08.07.2023 - удален конфиг `.circleci`. Перестал работать в России: https://support.circleci.com/hc/en-us/articles/360043679453-CircleCI-Terms-of-Service-Violation-Sanctioned-Country\n* 08.07.2023 - Symfony обновлена до последней, на текущую дату, версию `6.3.1`\n* 17.07.2024 - Symfony обновлена до версии `6.4.9`\n* 17.07.2024 - Unit тесты обновлены до 11 версии, также отрефакторины сами тесты\n* Добавлен конфиг для [nginx](docs/conf/nginx/s-shop.conf) и [supervisor](docs/conf/supervisor/messenger-worker.conf), а также различнее переводы для README.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleksandr89%2Fsymfony-shop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaleksandr89%2Fsymfony-shop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaleksandr89%2Fsymfony-shop/lists"}