Перейти к основному содержимому

WordPress — разработка для начинающих

Разработчику

WordPress — CMS (Content Management System, система управления контентом) на PHP: ядро, темы (внешний вид), плагины (функции). Доля сайтов в интернете велика — навык полезен для фриланса, агентств и headless-сценариев (REST API).

Эта глава — маршрут новичка. Пошаговая дочерняя тема — в 1461; обзор платформы — 146.

ШагТемаЗачем
1Локальная установкаБезопасная песочница
2Структура темыШаблоны и style.css
3The LoopВывод записей
4Хуки actions/filtersРасширение без правки ядра
5Мини-плагинПереносимая логика
6REST APIHeadless и интеграции
7Безопасность и отладкаProd-ready минимум
РольЧто делаете
ТемаHTML/CSS/PHP-шаблоны, functions.php
ПлагинЛогика без смены темы (формы, SEO, интеграции)
ЯдроОбновляется отдельно — не править

База PHP:

Child theme

Не редактируйте Twenty Twenty-Four напрямую — обновление ядра сотрёт правки. Создайте дочернюю тему — см. 1461.


Шаг 1 — локальная установка

ИнструментПлюс
Local WPGUI, SSL, one-click
DDEV / DockerБлизко к prod, воспроизводимо
Shared hostingПростой деплой, мало контроля

Подробнее — 113 локальная среда.

После установки:

  • Админка: https://site.local/wp-admin
  • Файлы тем: wp-content/themes/
  • Плагины: wp-content/plugins/
  • БД: таблицы с префиксом wp_ — см. SQL
ПутьСодержимое
wp-config.phpКонстанты БД, ключи
wp-content/Темы, плагины, uploads
wp-includes/Ядро — не трогать
wp-admin/Админ-интерфейс

Шаг 2 — структура темы

wp-content/themes/my-theme/
style.css ← обязательные метаданные
functions.php ← хуки, enqueue стилей
index.php ← fallback-шаблон
header.php
footer.php
single.php ← одна запись
page.php ← статическая страница
archive.php ← списки по дате/рубрике

Минимальный style.css:

/*
Theme Name: My Learning Theme
Author: Your Name
Version: 1.0.0
Text Domain: my-learning-theme
*/

Дочерняя тема (рекомендуется):

/*
Theme Name: My Child Theme
Template: twentytwentyfour
Version: 1.0.0
*/

Template указывает родительскую тему — см. 1461.

functions.php — подключение стилей

<?php
add_action('wp_enqueue_scripts', function () {
wp_enqueue_style(
'my-theme-style',
get_stylesheet_uri(),
[],
'1.0.0'
);
});
ФункцияРоль
wp_enqueue_styleПравильное подключение CSS
get_stylesheet_uriURL style.css текущей темы
wp_enqueue_scriptJS с зависимостями

Шаг 3 — цикл WordPress (The Loop)

Цикл — сердце шаблона списка записей.

<?php get_header(); ?>

<main>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article <?php post_class(); ?>>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<time datetime="<?php echo esc_attr(get_the_date('c')); ?>">
<?php echo esc_html(get_the_date()); ?>
</time>
<?php the_excerpt(); ?>
</article>
<?php endwhile; ?>

<?php the_posts_pagination(); ?>
<?php else : ?>
<p>Записей нет.</p>
<?php endif; ?>
</main>

<?php get_footer(); ?>

Разбор:

  • have_posts() — есть ли записи в текущем запросе.
  • the_post() — сдвигает указатель, настраивает глобальные данные поста.
  • the_title(), the_excerpt() — вывод с учётом контекста экранирования.
  • post_class() — CSS-классы для стилизации.

Шаблон одной записи — single.php; страница — page.php.


Шаг 4 — хуки actions и filters

WordPress расширяется хуками без правки ядра.

Action — событие

add_action('init', function () {
// регистрация типов, rewrite rules
});

add_action('wp_footer', function () {
echo '<!-- theme footer hook -->';
});

Filter — изменение значения

add_filter('the_title', function ($title, $post_id) {
if (is_admin()) {
return $title;
}
return '→ ' . $title;
}, 10, 2);
ТипСигналПримеры хуков
ActionСобытие наступилоinit, wp_enqueue_scripts, wp_footer
FilterИзмени значениеthe_content, the_title, excerpt_length

Третий аргумент add_filterприоритет (меньше = раньше). Четвёртый — число принимаемых аргументов callback.


Шаг 5 — плагин, минимальный каркас

wp-content/plugins/ituniverse-demo/ituniverse-demo.php:

<?php
/**
* Plugin Name: IT Universe Demo
* Description: Учебный плагин
* Version: 1.0.0
* Author: IT Universe
* Text Domain: ituniverse-demo
*/

if (!defined('ABSPATH')) {
exit;
}

add_shortcode('hello_user', function () {
if (!is_user_logged_in()) {
return '<p>Войдите в систему</p>';
}
$user = wp_get_current_user();
return '<p>Привет, ' . esc_html($user->display_name) . '</p>';
});

В записи или странице: [hello_user].

ЗадачаКуда код
Вёрстка, layoutТема / child theme
Функция на любом сайтеПлагин
Мелкая правка чужой темыChild theme
Изменение ядраНикогда

Экранирование — esc_html, esc_url, esc_attrбезопасность PHP.


Шаг 6 — REST API (обзор)

WordPress отдаёт JSON из коробки:

GET /wp-json/wp/v2/posts
GET /wp-json/wp/v2/pages
GET /wp-json/wp/v2/categories

Пример с curl:

curl https://example.com/wp-json/wp/v2/posts?per_page=3

Headless: фронт на React + WP как CMS. Авторизация — Application Passwords (ядро) или JWT-плагины.

Кастомный endpoint в плагине:

add_action('rest_api_init', function () {
register_rest_route('ituniverse/v1', '/status', [
'methods' => 'GET',
'callback' => function () {
return ['ok' => true, 'version' => '1.0.0'];
},
'permission_callback' => '__return_true',
]);
});

URL: /wp-json/ituniverse/v1/status.


Шаг 7 — безопасность, минимум

ПравилоДетали
Не доверять $_GET/$_POSTsanitize_text_field, nonces
SQL$wpdb->prepare() — без конкатенации
Праваcurrent_user_can('manage_options') перед admin-действиями
Выводesc_html, esc_url
ОбновленияЯдро, темы, плагины
Файлызагрузка файлов, суперглобальные

Nonce для формы:

wp_nonce_field('my_action', 'my_nonce');
// проверка:
if (!wp_verify_nonce($_POST['my_nonce'] ?? '', 'my_action')) {
wp_die('Invalid request');
}

DevOps и безопасность.


Шаг 8 — отладка

wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Лог: wp-content/debug.log. Плагин Query Monitor — SQL, хуки, медленные запросы в админ-баре.

Разработка и отладка.


Типичные ошибки новичков

ОшибкаПоследствиеРешение
Правка Twenty* напрямуюПотеря при обновленииChild theme
SQL без prepareSQL-инъекция$wpdb->prepare()
echo $_POST['x']XSSesc_html
Тяжёлая логика в functions.php темыСложно переноситьПлагин
Отключить все плагины на prodПоломка сайтаStaging
Hardcode URLЛомается при смене доменаhome_url(), site_url()

Маршрут обучения

ШагМатериал
1PHP первая программа
21461 — дочерняя тема
3Мини-плагин с shortcode (выше)
4Symfony 163 или Laravel 1431 — custom app без CMS
5Веб-разработка

Как превратить учебную тему в prod-ready

План эволюции

  1. Child theme + enqueue стилей/скриптов.
  2. Кастомные шаблоны page-landing.php с Template Name.
  3. Плагин для бизнес-логики и REST.
  4. Staging, бэкапы БД и uploads/.
  5. Кэш (object cache, page cache plugin).

Иерархия шаблонов (кратко)

front-page.php → главная
single-{post-type}.php → тип записи
page-{slug}.php → конкретная страница
index.php → fallback

Связанные материалы

ТемаМатериал
Экосистема WP146
Gutenbergдокументация блоков
MySQLSQL 101
ДеплойDevOps intro
Практика

Создайте child theme с кастомным page-landing.php (Template Name) и одной landing-страницей в админке. Добавьте shortcode-плагин и выведите его на landing — закрепите иерархию шаблонов и хуки.

Production

На боевом сайте — WP_DEBUG false, автоматические обновления безопасности, HTTPS, ограничение попыток входа, регулярные бэкапы. Не храните пароли БД в публичном git.


Шаг 9 — кастомный post type (плагин)

add_action('init', function () {
register_post_type('portfolio', [
'labels' => ['name' => 'Портфолио', 'singular_name' => 'Работа'],
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail'],
'show_in_rest' => true,
]);
});

show_in_rest — доступ через REST API для headless.


Шаг 10 — enqueue скриптов

add_action('wp_enqueue_scripts', function () {
wp_enqueue_script(
'my-theme-app',
get_template_directory_uri() . '/js/app.js',
['jquery'],
'1.0.0',
true
);
});

Последний аргумент true — скрипт в footer. Зависимости — массив handle.


Иерархия шаблонов — подробнее

single-portfolio.php → один post type portfolio
archive-portfolio.php → список portfolio
taxonomy-project.php → таксономия
front-page.php → главная (Settings → Reading)
home.php → блог на главной

WordPress выбирает первый найденный файл сверху в цепочке fallback.


wp-cli (обзор)

wp plugin list
wp theme activate my-child-theme
wp cache flush

WP-CLI — стандарт автomation на серверах.


Навигация по блоку PHP / WordPress


Шаг 11 — Customizer API (обзор)

Customizer — live preview темы в админке. Для новых block themes чаще Site Editor (FSE). Legacy classic themes — customize_register hook.


Шаг 12 — transients для кэша

$data = get_transient('my_cache_key');
if ($data === false) {
$data = expensive_query();
set_transient('my_cache_key', $data, HOUR_IN_SECONDS);
}

Object cache (Redis) ускоряет transients на prod.


Шаг 13 — internationalization

__('Hello', 'my-textdomain');
_e('Submit', 'my-textdomain');

.pot / .po файлы — gettext; WPML/Polylang для мультиязычных сайтов.


Headless checklist

#Готово
1REST /wp-json/wp/v2/posts отвечает
2Application Password для edit
3CORS настроен для фронт-домена
4Media URLs absolute
5Preview draft через plugin

Шаг 9 — кастомные типы записей (CPT)

Custom Post Type — свой тип контента помимо post и page (портфолио, товары, события).

В functions.php child theme:

add_action('init', function () {
register_post_type('portfolio', [
'labels' => [
'name' => 'Портфолио',
'singular_name' => 'Работа',
],
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio',
'supports' => ['title', 'editor', 'thumbnail'],
'show_in_rest' => true,
]);
});
ПараметрЗачем
has_archiveСписок на /portfolio/
show_in_restРедактор блоков и REST API
supportsКакие поля в админке

Шаблоны: archive-portfolio.php, single-portfolio.phpиерархия шаблонов.

После регистрации зайдите в Настройки → Постоянные ссылки и нажмите Сохранить — flush rewrite rules.


Шаг 10 — метаполя и get_post_meta

Произвольные поля без плагина ACF (учебный минимум):

// при сохранении поста
add_action('save_post_portfolio', function ($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['client_name'])) {
update_post_meta(
$post_id,
'client_name',
sanitize_text_field($_POST['client_name'])
);
}
});

В шаблоне single-portfolio.php:

$client = get_post_meta(get_the_ID(), 'client_name', true);
if ($client) {
echo '<p>Клиент: ' . esc_html($client) . '</p>';
}

Для сложных форм в админке позже подключите Advanced Custom Fields или Carbon Fields — в черновике раздела достаточно понимания post_meta.


Шаг 11 — WP-CLI

WP-CLI — консоль для WordPress (установка, плагины, экспорт).

wp plugin list
wp post create --post_title="Тест" --post_status=publish
wp cache flush
wp search-replace 'http://old.local' 'https://new.local' --dry-run
КомандаНазначение
wp core downloadСкачать ядро
wp plugin installПлагин из репозитория
wp db export backup.sqlБэкап БД
wp theme activate my-childАктивировать тему

На Local WP и DDEV wp часто уже в PATH. Автоматизация деплоя — DevOps.


Шаг 12 — блочные темы (FSE) — обзор

WordPress 6+ продвигает Full Site Editing: темы с theme.json, шаблоны в HTML, блоки вместо только PHP.

wp-content/themes/my-block-theme/
theme.json
templates/index.html
parts/header.html

Классические темы (header.php, The Loop) остаются массово в legacy. Для нового учебного проекта child theme на Twenty Twenty-Four проще; FSE — отдельная ветка в 146.


Шаг 13 — транзиенты и кэш

Кэширование тяжёлых запросов:

function ituniverse_get_featured_posts(): array {
$cache_key = 'ituniverse_featured_v1';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}

$query = new WP_Query([
'posts_per_page' => 5,
'meta_key' => 'featured',
'meta_value' => '1',
]);
$ids = wp_list_pluck($query->posts, 'ID');
set_transient($cache_key, $ids, HOUR_IN_SECONDS);
return $ids;
}

delete_transient при обновлении поста — hook save_post. На prod — object cache (Redis) через плагин.


Шаг 14 — роли и capabilities

Перед опасным действием в админке:

if (!current_user_can('edit_posts')) {
wp_die(__('Недостаточно прав.', 'ituniverse-demo'));
}
РольТипичные права
administratorВсё
editorКонтент без настроек
authorСвои записи
subscriberТолько профиль

Кастомные capability — add_role при активации плагина.


Расширенный troubleshooting

СимптомПричинаРешение
404 на CPT archiveRewrite не обновлёнСохранить permalinks
Белый экранFatal в functions.phpWP_DEBUG_LOG, откат файла
Shortcode как текстНе обработанКонтент в the_content, не в excerpt
REST 401Нужна authApplication Passwords
Медленная админкаТяжёлые плагиныQuery Monitor, отключить по одному
Upload failedПрава uploads/chmod, лимит upload_max_filesize

Дополнительные упражнения

  1. Зарегистрируйте CPT event с полем даты в meta.
  2. Shortcode [events] — список ближайших событий из WP_Query.
  3. REST endpoint GET /ituniverse/v1/events с permission_callback только для logged-in.
  4. WP-CLI: экспорт 10 постов в JSON файл.
  5. Child theme: page-landing.php с Template Name и без sidebar.

Расширенный FAQ

WordPress или Symfony?

CMS для контента и редактора без кода — WordPress. Кастомное приложение с доменной логикой — Symfony 163 или Laravel.

Нужен ли Composer в теме?

Для учебной темы — нет. Для плагина с PSR-4 и PHPUnit — да — Composer 111.

Headless WordPress когда?

Когда фронт на React/Vue, а редакторы остаются в WP. REST или GraphQL (WPGraphQL).

Multisite?

Сеть сайтов на одной установке — отдельная архитектура; для старта не нужна.

Как мигрировать на блоки?

Постепенно: classic theme + block patterns, затем FSE theme.json.



FAQ — полный список

1. WordPress или Symfony?

CMS для контента — WP. Кастомное приложение — 163.

2. Composer в теме?

Для учебной темы — нет. Для плагина с PSR-4 — да 111.

3. Headless когда?

React/Vue фронт + WP как CMS через REST.

4. Multisite?

Отдельная архитектура — не для старта.

5. Миграция на блоки?

Постепенно: block patterns, затем FSE theme.json.

6. Child theme зачем?

Обновление родительской темы не сотрёт правки.

7. The Loop?

have_posts, the_post, the_title — сердце списка.

8. actions vs filters?

Action — событие. Filter — изменить значение.

9. $wpdb->prepare?

Обязательно для SQL — без конкатенации.

10. esc_html зачем?

XSS защита при выводе.

11. WP-CLI?

wp plugin list, wp post create, wp db export.

12. Transients?

Кэш тяжёлых запросов — delete при save_post.

13. REST auth?

Application Passwords или JWT plugin.

14. WP_DEBUG prod?

false на боевом сайте.

15. CPT show_in_rest?

Редактор блоков и REST API.

16. Permalinks 404?

Сохранить настройки — flush rewrite.

17. Query Monitor?

SQL, хуки, медленные запросы в админ-баре.

Упражнения — расширенный набор

  1. CPT event с meta датой.
  2. Shortcode [events] через WP_Query.
  3. REST GET /ituniverse/v1/events с auth.
  4. WP-CLI export 10 постов в JSON.
  5. page-landing.php Template Name.
  6. Child theme enqueue стилей.
  7. Nonce форма в плагине.
  8. get_transient / set_transient.
  9. current_user_can перед admin action.
  10. Staging + backup БД.

Практикум — дополнительный блок 1 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 1
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 1

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 1"

Практикум — дополнительный блок 2 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 2
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 2

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 2"

Практикум — дополнительный блок 3 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 3
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 3

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 3"

Практикум — дополнительный блок 4 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 4
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 4

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 4"

Практикум — дополнительный блок 5 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 5
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 5

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 5"

Практикум — дополнительный блок 6 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 6
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 6

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 6"

Практикум — дополнительный блок 7 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 7
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 7

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 7"

Практикум — дополнительный блок 8 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 8
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 8

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 8"

Практикум — дополнительный блок 9 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 9
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 9

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 9"

Практикум — дополнительный блок 10 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 10
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 10

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 10"

Практикум — дополнительный блок 11 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 11
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 11

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 11"

Практикум — дополнительный блок 12 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 12
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 12

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 12"

Практикум — дополнительный блок 13 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 13
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 13

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 13"

Практикум — дополнительный блок 14 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 14
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 14

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 14"

Практикум — дополнительный блок 15 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 15
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 15

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 15"

Практикум — дополнительный блок 16 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 16
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 16

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 16"

Практикум — дополнительный блок 17 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 17
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 17

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 17"

Практикум — дополнительный блок 18 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 18
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 18

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 18"

Практикум — дополнительный блок 19 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 19
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 19

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 19"

Практикум — дополнительный блок 20 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 20
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 20

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 20"

Практикум — дополнительный блок 21 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 21
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 21

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 21"

Практикум — дополнительный блок 22 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 22
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 22

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 22"

Практикум — дополнительный блок 23 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 23
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 23

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 23"

Практикум — дополнительный блок 24 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 24
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 24

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 24"

Практикум — дополнительный блок 25 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 25
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 25

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 25"

Практикум — дополнительный блок 26 (164)

ШагДействиеПроверка
1Повторить базовый сценарий из начала статьиКоманда завершается без ошибок
2Запустить тесты или curl smokeОжидаемый HTTP-код или green test
3Зафиксировать результат в READMEШаги воспроизводимы на другой машине
Подсказка 26
Сверьтесь с материалами энциклопедии по ссылкам /encyclopedia/ в начале статьи. При ошибке сначала читайте traceback или лог до своей строки — см. отладку.

Troubleshooting — мини-чеклист 26

#ВопросЕсли да
1Версия runtime совпадает с таблицей требований?Обновить или зафиксировать в документации
2Зависимости установлены из lock-файла?Переустановить без изменения lock
3Порт не занят другим процессом?Сменить порт или завершить процесс
4Переменные окружения заданы?Проверить .env и секреты на хостинге
5Тесты проходят локально?Только после green — деплой
# Smoke — адаптируйте под свой стек (164)
echo "Smoke block 26"
Содержание