Перейти к содержанию

Границы учебного магазина и локальная установка

Оглавление серии

Интернет-магазин хранит не только страницы товара. Он связывает каталог, корзину, оформление, состояние заказа и право получить материал. Чтобы изучить эту цепочку без реальных денег и покупателей, создадим «Полку» — локальную лабораторию WooCommerce с вымышленными цифровыми продуктами. Ни существующие магазины, ни учётные записи платёжных сервисов к курсу не подключаются.

Первый результат — отдельное окружение WordPress и понятный набор ограничений. Исходники подготовлены без запуска Docker, WordPress и WooCommerce; состояние интерфейса ниже является ожидаемым. Никакие настоящие заказы или контакты не создавались. Позже мы будем отличать учебную сумму от подтверждённого платежа и синтетический отчёт от измеренной конверсии.

Что продаётся в лаборатории

Первый товар назовём «Конспект CSS Grid», SKU GRID-PDF, цена 12 условных USD. Следом появятся «Шаблон формы» за 8 и «Памятка адресов» за 5. Названия позволяют сохранить одни предметные данные через все уроки. Содержимое файлов намеренно небольшое: курс учит устройству магазина, а не продаёт реальные книги.

Все позиции будут virtual и downloadable. Virtual означает отсутствие физической доставки, downloadable — выдачу файла. Эти признаки независимы: цифровая услуга без файла могла бы быть только virtual, а физическая книга с электронной памяткой — downloadable с доставкой. Наша модель выбирает оба признака для простого пути от оплаты к загрузке.

Налоги в арифметике лаборатории отключены, товары имеют tax status none. Это условие учебной модели, позволяющее проверить сумму 12 + 8 без дополнительных расчётов. Оно не является инструкцией о налогообложении цифровых материалов в какой-либо стране. Для реальной торговли страна, договор, статус продавца и требования провайдера рассматриваются отдельно.

Письма будут перехватываться собственным Polka Lab Guard до отправки. Внешний SMTP, рассылки и аналитические сервисы не включаем. Метод BACS переименуем в «Учебное ожидание», не добавляя банковских реквизитов. Позже опциональный Dummy gateway покажет успешный и неуспешный результат без движения денег. Так каждый опыт имеет конкретный безопасный предмет, а не маскирует настоящий заказ под тренировочный.

Версии задают входные условия

Документация, прочитанная 11 октября 2026 года, описывает серверную линию WooCommerce 10.8 и новее: WordPress 6.9+, PHP 8.3+, MySQL 8.0+ либо MariaDB 10.6+, память WordPress от 256 MB. Для Compose выбираем PHP 8.3 и MariaDB 10.11. Требования сверяются по Server Recommendations.

Мы не скачивали образы, поэтому их digest и фактическая доступность выбранных tags не подтверждены запуском. Читатель после своей установки записывает конкретные версии WordPress и WooCommerce, а не только диапазон совместимости. Нельзя назвать зависимость проверенной лишь потому, что её имя присутствует в YAML.

Полный compose.yaml из архива выделяет два сервиса и локальный порт.

services:
  database:
    image: mariadb:10.11
    environment:
      MARIADB_DATABASE: polka
      MARIADB_USER: polka
      MARIADB_PASSWORD: ${POLKA_DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${POLKA_DB_ROOT_PASSWORD}
    volumes:
      - database:/var/lib/mysql
  wordpress:
    image: wordpress:6.9-php8.3-apache
    ports:
      - "127.0.0.1:8086:80"
    environment:
      WORDPRESS_DB_HOST: database
      WORDPRESS_DB_NAME: polka
      WORDPRESS_DB_USER: polka
      WORDPRESS_DB_PASSWORD: ${POLKA_DB_PASSWORD}
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_ENVIRONMENT_TYPE', 'local');
        define('WP_MEMORY_LIMIT', '256M');
        define('DISALLOW_FILE_EDIT', true);
    volumes:
      - wordpress:/var/www/html
      - ./theme:/var/www/html/wp-content/themes/polka-lab:ro
      - ./plugin:/var/www/html/wp-content/plugins/polka-lab:ro
volumes:
  database:
  wordpress:

WordPress обращается к database внутри сети Compose. Браузер читателя обращается к 127.0.0.1:8086. Порт привязан к loopback, поэтому случайный соседний компьютер не должен открывать лабораторию через сетевой адрес вашего устройства. Внутренние имена сервисов не совпадают с browser URL; это важно позже при настройке webhook.

Два named volumes хранят базу и файлы WordPress. Папки theme/plugin примонтированы отдельно только для чтения: авторские изменения сохраняются в учебных исходниках. Если удалить контейнер, содержимое volumes не обязано исчезнуть. Если удалить volume, можно потерять товары и заказы независимо от наличия исходников темы. Эти разные объекты нужно учитывать в резервной копии.

Первое открытие WordPress

Создайте .env из .env.example, задав два собственных случайных пароля для локальной базы. Не используйте значения replace-with как готовые credentials. Затем при самостоятельной работе можно запустить Compose и открыть browser URL. Эти команды предназначены для читателя; при подготовке серии не выполнялись.

docker compose up -d

На первоначальном экране WordPress задайте название «Полка», собственный локальный admin login и пароль. Для email используйте вымышленный student@example.test. Не используйте рабочий магазин или копию с настоящими пользователями: наша последовательность создаёт и изменяет объекты, которые специально придуманы для обучения.

В Plugins установите WooCommerce из официального источника и активируйте Polka Lab Guard из примонтированной папки. Затем активируйте тему Polka Lab. Setup WooCommerce проходит только до локальных настроек магазина; предложения подключить внешний платёжный сервис или маркетинговый аккаунт для курса не нужны. Изменившийся вид мастера не меняет наш результат: должен быть доступен каталог Products и настройки WooCommerce.

Убедитесь, что WP_ENVIRONMENT_TYPE равен local. Guard показывает административное сообщение о перехвате писем и ограничении методов оплаты. Наличие сообщения — ожидаемый признак режима, а не полный контроль сетевых запросов любого плагина. WordPress всё ещё способен обращаться к источникам обновлений; курс не обещает офлайн-изоляцию всей системы.

Содержание сайта и настройки магазина

WooCommerce создаёт страницы корзины, оформления и аккаунта. Не создавайте их повторно по старому уроку с shortcodes, прежде чем посмотреть уже существующие pages и назначение в Settings. Новые Cart/Checkout blocks — нормальная основа выбранного пути. Их подробно рассмотрим позже, сохраняя одну пару страниц.

В Settings задайте валюту USD и два десятичных знака для условной арифметики. Запишите состояние в specs/settings.md; это часть учебной модели. Не подставляйте произвольную страну продавца, выдавая её за юридическую настройку. Локальная форма может требовать выбор региона для интерфейса, но решение о реальной торговле не следует из лабораторного dropdown.

Отдельность лаборатории можно проверить через смысл её данных. В пустом магазине пока нет ни покупателей, ни продаж, ни истории доставки; единственным владельцем остаётся учебный администратор. Запишите локальный адрес и название базы рядом с настройками окружения. Когда позднее откроете страницу Orders, эта запись поможет отличить лабораторию от другого WordPress на компьютере. Совпадение внешнего вида панели ничего не доказывает: знакомые пункты меню бывают и в рабочем магазине, поэтому ориентиром служит выбранная установка и её заранее известный пустой каталог.

Ожидаемый конец первого шага — отдельная панель, пустой каталог, локальный режим и отсутствие подключённых внешних способов оплаты. Если в Products уже есть реальные позиции, вы открыли неподходящее окружение. Если письма уходят через ранее настроенный SMTP, лаборатория не соответствует описанному контракту. Следующий урок создаст одну учебную позицию, чтобы каждая последующая настройка была связана с известным товаром и проверяемой суммой.