Какая разница между var, let и const в JavaScript?

Рассмотрим три ключевых отличия между объявлениями переменных в JavaScript:

  1. Область видимости (Scope)

var: Имеет функциональную область видимости. Переменная доступна внутри функции, где объявлена, или глобально, если объявлена вне функции.
let: Имеет блочную область видимости. Переменная доступна только внутри блока {}, где объявлена.
const: Также имеет блочную область видимости, как и let.

  1. Поднятие (Hoisting)

var: Поднимается. Может использоваться до объявления, но значение будет undefined.
let: Тоже поднимается, но нельзя использовать до объявления (временная мертвая зона).
const: Аналогично let, существует временная мертвая зона.

  1. Переназначение и изменение

var: Можно переназначать и изменять.
let: Можно изменять, но нельзя переобъявлять в той же области видимости.
const: Нельзя переназначать, но если содержит объект, свойства объекта можно изменять.

Пример:

// var
var x = 1;
var x = 2; // Допустимо
if (true) {
  var x = 3; // Изменит переменную x даже за пределами блока
}
console.log(x); // 3

// let
let y = 1;
// let y = 2; // Ошибка: нельзя повторно объявить
if (true) {
  let y = 2; // Новая переменная, только для этого блока
}
console.log(y); // 1

// const
const z = 1;
// z = 2; // Ошибка: нельзя переназначить константу
const obj = { value: 1 };
obj.value = 2; // Допустимо: изменяем свойство, а не саму константу
console.log(obj.value); // 2

Секретные ключи в wp-config в WordPress.

Секретные ключи в файле wp-config.php WordPress — это набор строк, используемых для увеличения безопасности вашего сайта, а именно для защиты данных пользователей и сессий. Эти ключи не являются солью в прямом смысле, но они играют схожую роль, так как они помогают улучшить хеширование и защиту данных.

В файле wp-config.php можно найти следующие параметры:

define('AUTH_KEY',         'поставьте сюда уникальный фрагмент текста');
define('SECURE_AUTH_KEY',  'поставьте сюда уникальный фрагмент текста');
define('LOGGED_IN_KEY',    'поставьте сюда уникальный фрагмент текста');
define('NONCE_KEY',        'поставьте сюда уникальный фрагмент текста');
define('AUTH_SALT',        'поставьте сюда уникальный фрагмент текста');
define('SECURE_AUTH_SALT', 'поставьте сюда уникальный фрагмент текста');
define('LOGGED_IN_SALT',   'поставьте сюда уникальный фрагмент текста');
define('NONCE_SALT',       'поставьте сюда уникальный фрагмент текста');

Каждый из этих ключей имеет свое предназначение, и они все используются для хеширования данных и защиты различных типов сессий и данных, таких как:

Что делают эти ключи и соли?

AUTH_KEY и AUTH_SALT — используются для защиты сессий и данных пользователей, таких как куки сессий и сохранение логина. Они помогают улучшить хеширование паролей и других данных, что предотвращает их перехват или подделку.

SECURE_AUTH_KEY и SECURE_AUTH_SALT — эти ключи используются для улучшенной защиты данных, если ваш сайт работает через HTTPS. Они помогают обеспечить более безопасное хеширование при хранении и проверке аутентификационных данных (например, при логине).

LOGGED_IN_KEY и LOGGED_IN_SALT — используются для защиты данных, связанных с состоянием авторизации пользователя. Эти ключи помогают предотвратить подделку состояния «авторизованного» пользователя.

NONCE_KEY и NONCE_SALT — используются для защиты против CSRF-атак. Nonces — это уникальные значения, генерируемые для предотвращения повторных отправок данных через формы или URL. Они необходимы для защиты от атак, когда злоумышленник может пытаться отправить данные от имени пользователя.

Как это работает?


Когда WordPress генерирует или проверяет данные, такие как куки для входа, хешированные пароли или nonce-значения, он использует эти ключи для их хеширования. В результате:

Даже если злоумышленник перехватит хешированные данные, он не сможет восстановить оригинальные значения (например, пароли или сессионные данные), так как хеширование с использованием уникальных ключей делает их практически невозможными для расшифровки.

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

Как обновить операционную систему Debian или Ubuntu через консоль?

sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt autoclean

Где:

  • apt update обновляет списки пакетов
  • apt upgrade -y устанавливает доступные обновления
  • apt full-upgrade -y обновляет пакеты с изменением зависимостей
  • apt autoremove -y удаляет ненужные зависимости
  • apt autoclean очищает локальный кэш пакетов

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

Как удалить дубликаты чисел из массива?

В JavaScript

Использование Set (самый простой способ):

const array = [1, 2, 3, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
// Результат: [1, 2, 3, 4, 5]

Использование filter() и indexOf():

const array = [1, 2, 3, 3, 4, 4, 5];
const uniqueArray = array.filter((item, index) => array.indexOf(item) === index);
// Результат: [1, 2, 3, 4, 5]

Использование reduce():

const array = [1, 2, 3, 3, 4, 4, 5];
const uniqueArray = array.reduce((unique, item) => 
  unique.includes(item) ? unique : [...unique, item], 
[]);
// Результат: [1, 2, 3, 4, 5]

Метод с использованием Set является наиболее эффективным и коротким решением, так как Set по определению может содержать только уникальные значения.

В PHP

Использование array_unique() (самый простой способ):

$array = [1, 2, 3, 3, 4, 4, 5];
$uniqueArray = array_unique($array);
// Результат: [1, 2, 3, 4, 5]

Использование array_keys() и array_flip():

$array = [1, 2, 3, 3, 4, 4, 5];
$uniqueArray = array_keys(array_flip($array));
// Результат: [1, 2, 3, 4, 5]

Использование цикла foreach с проверкой:

$array = [1, 2, 3, 3, 4, 4, 5];
$uniqueArray = [];
foreach($array as $value) {
    if (!in_array($value, $uniqueArray)) {
        $uniqueArray[] = $value;
    }
}
// Результат: [1, 2, 3, 4, 5]

Рекомендации по выбору метода:

  • array_unique() — самый простой и читаемый способ, подходит для большинства случаев
  • array_flip() + array_keys() — может быть более эффективным для больших массивов
  • Цикл foreach — полезен, когда вам нужна дополнительная логика при удалении дубликатов

Если вы хотите сохранить исходные ключи массива, используйте:

$uniqueArray = array_unique($array, SORT_REGULAR);

После удаления дубликатов может быть полезно «перезагрузить» индексы массива с помощью array_values():

$array = [1, 2, 3, 3, 4, 4, 5];
$uniqueArray = array_values(array_unique($array));
// Результат: [1, 2, 3, 4, 5] с последовательными индексами

Как подключиться к базе данных PostgreSQL из консоли?

Подключение к PostgreSQL на VPS

Способ 1 (через смену пользователя):

sudo su - postgres    # Переключаемся на пользователя postgres
psql                  # Запускаем PostgreSQL клиент

Способ 2 (прямое подключение):

sudo -u postgres psql

Что такое PSQL?

PSQL (PostgreSQL interactive terminal) — это официальный терминальный (консольный) клиент для работы с PostgreSQL. Это инструмент командной строки, который позволяет:

  • Вводить запросы к базе данных
  • Редактировать их
  • Получать результаты выполнения запросов

Основные команды PSQL:

\l              -- Показать все базы данных
\c dbname       -- Подключиться к базе данных
\dt             -- Показать все таблицы
\du             -- Показать всех пользователей
\d table_name   -- Показать структуру таблицы
\?              -- Показать все доступные команды
\q              -- Выйти из PSQL

Подключение к конкретной базе:

psql -d database_name

Подключение под определённым пользователем:

psql -U username -d database_name

Как полностью удалить СУБД MariaDB и MySQL с Debian/Ubuntu?

Полное удаление баз данных MySQL или MariaDB с системы Linux требует нескольких последовательных шагов, чтобы не только удалить программные пакеты, но и очистить все конфигурационные файлы и данные. Это позволит вам выполнить действительно «чистую» установку позже. Давайте рассмотрим этот процесс подробно.

Шаг 1: Создание резервной копии данных (если нужно)

Прежде чем начать удаление, убедитесь, что у вас есть резервные копии всех важных баз данных:

# Для MySQL/MariaDB создание дампа всех баз данных
mysqldump -u root -p --all-databases > all_databases_backup.sql

Шаг 2: Остановка служб

Перед удалением необходимо остановить все связанные службы:

# Остановка MySQL
sudo systemctl stop mysql
sudo systemctl stop mariadb

# Проверка, что службы действительно остановлены
sudo systemctl status mysql
sudo systemctl status mariadb

Шаг 3: Удаление пакетов

Для Debian/Ubuntu:

# Удаление пакетов MySQL
sudo apt remove --purge mysql-server mysql-client mysql-common mysql-server-core mysql-client-core libmysqlclient* mysql*

# Удаление пакетов MariaDB
sudo apt remove --purge mariadb-server mariadb-client mariadb-common mariadb-server-core mariadb-client-core

# Удаление зависимостей, которые больше не нужны
sudo apt autoremove -y
sudo apt autoclean

Шаг 4: Удаление конфигурационных файлов и данных

После удаления пакетов часто остаются конфигурационные файлы и директории с данными. Их нужно удалить вручную:

# Удаление конфигурационных директорий
sudo rm -rf /etc/mysql
sudo rm -rf /etc/my.cnf
sudo rm -rf /etc/my.cnf.d

# Удаление данных
sudo rm -rf /var/lib/mysql
sudo rm -rf /var/lib/mysql-*

# Удаление логов
sudo rm -rf /var/log/mysql
sudo rm -rf /var/log/mysql.*
sudo rm -rf /var/log/mysqld.*

# Удаление run-файлов
sudo rm -rf /var/run/mysql
sudo rm -rf /var/run/mysqld

# Удаление дополнительных директорий, которые могли быть созданы
sudo rm -rf /usr/lib/mysql
sudo rm -rf /usr/share/mysql

Шаг 5: Проверка наличия пользователей и групп

MySQL и MariaDB создают системных пользователей и группы. Их тоже следует удалить:

# Проверка наличия пользователей
grep -i mysql /etc/passwd
grep -i mariadb /etc/passwd

# Удаление пользователей
sudo userdel mysql
sudo userdel mariadb

# Проверка наличия групп
grep -i mysql /etc/group
grep -i mariadb /etc/group

# Удаление групп
sudo groupdel mysql
sudo groupdel mariadb

Шаг 6: Очистка пакетного менеджера

# Обновление списка пакетов
sudo apt update

Шаг 7: Проверка полного удаления

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

# Для Debian/Ubuntu
dpkg -l | grep -i mysql
dpkg -l | grep -i mariadb

После завершения этих шагов ваша система должна быть полностью очищена от MySQL и MariaDB, и вы сможете начать чистую установку выбранной версии базы данных.

Скрипт для автоматического удаления

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

#!/bin/bash

# Функция для логирования
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

# Остановка служб
log "Остановка служб MySQL и MariaDB..."
systemctl stop mysql mariadb mysqld 2>/dev/null || true

# Удаление пакетов для Debian/Ubuntu
if command -v apt &> /dev/null; then
    log "Удаление пакетов MySQL и MariaDB с использованием apt..."
    apt remove --purge -y mysql* mariadb* 2>/dev/null || true
    apt autoremove -y
    apt autoclean
# Удаление пакетов для CentOS/RHEL
elif command -v yum &> /dev/null; then
    log "Удаление пакетов MySQL и MariaDB с использованием yum..."
    yum remove -y mysql* mariadb* 2>/dev/null || true
    yum clean all
fi

# Удаление конфигурационных и data директорий
log "Удаление конфигурационных файлов и данных..."
rm -rf /etc/mysql /etc/my.cnf /etc/my.cnf.d
rm -rf /var/lib/mysql /var/lib/mysql-* /var/lib/mariadb
rm -rf /var/log/mysql* /var/log/mysqld*
rm -rf /var/run/mysql* /var/run/mysqld*
rm -rf /usr/lib/mysql /usr/share/mysql /usr/lib/mariadb /usr/share/mariadb

# Удаление пользователей и групп
log "Удаление системных пользователей и групп..."
userdel mysql 2>/dev/null || true
userdel mariadb 2>/dev/null || true
groupdel mysql 2>/dev/null || true
groupdel mariadb 2>/dev/null || true

# Проверка завершения удаления
log "Проверка завершения удаления..."
DEBIAN_CHECK=$(dpkg -l | grep -E 'mysql|mariadb' 2>/dev/null)
RPM_CHECK=$(rpm -qa | grep -E 'mysql|mariadb' 2>/dev/null)

if [ -n "$DEBIAN_CHECK" ] || [ -n "$RPM_CHECK" ]; then
    log "Внимание: некоторые пакеты могли остаться в системе:"
    if [ -n "$DEBIAN_CHECK" ]; then
        echo "$DEBIAN_CHECK"
    fi
    if [ -n "$RPM_CHECK" ]; then
        echo "$RPM_CHECK"
    fi
else
    log "MySQL и MariaDB успешно удалены из системы!"
    log "Теперь вы можете выполнить чистую установку."
fi

Этот скрипт можно сохранить в файл (например, clean_mysql.sh), сделать его исполняемым с помощью команды chmod +x clean_mysql.sh и запустить с правами администратора: sudo ./clean_mysql.sh.

Решение проблемы ERR_EMPTY_RESPONSE при настройке Nginx в WSL2

При настройке локальной среды разработки с использованием WSL2 и Nginx часто возникает проблема: браузер показывает ошибку ERR_EMPTY_RESPONSE при попытке доступа к локальным сайтам. В этой статье мы разберем причины возникновения проблемы и предоставим пошаговое решение.

Причина проблемы

Проблема возникает из-за особенностей архитектуры WSL2:

  • WSL2 работает как полноценная виртуальная машина
  • Имеет собственный IP-адрес в виртуальной сети
  • Windows и WSL2 находятся в разных сетевых пространствах
  • Прямой доступ к localhost WSL2 из Windows невозможен

ERR_EMPTY_RESPONSE возникала потому что:

  • Браузер в Windows пытался получить доступ к localhost (127.0.0.1)
  • Но Nginx в WSL2 работал на другом IP-адресе (в виртуальной сети WSL2)
  • Соединение не могло быть установлено напрямую

    Решение

    Настройка Port Proxy в Windows

    # Получение IP-адреса WSL2
    $wslip = (wsl hostname -I).Trim()
    Write-Host "WSL IP: $wslip"
    
    # Настройка port proxy
    netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
    netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=$wslip
    
    # Проверка настроек
    netsh interface portproxy show all

    $wslip — это «айпи» Вашей WSL

    Что произошло?

    Эта команда создаст «мост» между:

    • Windows (0.0.0.0:80) — куда приходят запросы от браузера
    • WSL2 (внутренний IP:80) — где работает Nginx

    Процесс работы теперь выглядит так:

    Браузер (Windows) -> localhost:80 -> Port Proxy -> WSL2 IP:80 -> Nginx

    Не забудьте сделать:

    Очистка DNS-кэша в Windows ipconfig /flushdns и перезапуск Nginx sudo service nginx restart

    Руководство по редактору Nano для Linux: все команды и горячие клавиши с русскими комментариями»

    Основные команды

    Запуск

    bashnano [имя_файла]      # Открыть файл или создать новый
    nano -w [имя_файла]   # Открыть без переноса длинных строк
    nano +[число] файл    # Открыть с курсором на указанной строке

    Навигация по тексту

    • Ctrl+A — переход в начало строки
    • Ctrl+E — переход в конец строки
    • Ctrl+Y — страница вверх
    • Ctrl+V — страница вниз
    • Ctrl+_ — переход на определённую строку (сначала введите номер)
    • Alt+/ — переход в конец файла
    • Alt+\ — переход в начало файла

    Редактирование текста

    • Ctrl+K — вырезать текущую строку в буфер обмена
    • Ctrl+U — вставить содержимое буфера обмена
    • Alt+A — включить/выключить режим выделения текста
    • Ctrl+6 — начать выделение текста (если режим выделения выключен)
    • Alt+6 — копировать выделенный текст
    • Ctrl+D — удалить символ под курсором
    • Backspace — удалить символ перед курсором
    • Alt+T — удалить все пробельные символы от курсора до следующего слова

    Поиск и замена

    • Ctrl+W — поиск текста (для поиска следующего совпадения нажмите Alt+W)
    • Ctrl+\ — поиск и замена

    Сохранение и выход

    • Ctrl+O — сохранить файл
    • Ctrl+X — выйти из редактора (если есть несохраненные изменения, nano спросит о сохранении)
    • Alt+X — сохранить файл и выйти

    Работа с буфером

    • Alt+> — перейти к следующему буферу (открытому файлу)
    • Alt+< — перейти к предыдущему буферу
    • Alt+A — включить/выключить маркировку текста
    • Alt+^ — отметить начало выделения текста
    • Alt+} — отступ текста вправо
    • Alt+{ — отступ текста влево

    Дополнительные функции

    Проверка орфографии

    • Ctrl+T — проверка орфографии (требуется установленный spell)

    Работа с буфером обмена

    • Alt+M — включить/выключить поддержку мыши
    • Alt+D — подсчет слов, строк и символов

    Настройка отображения

    • Alt+L — включить/выключить отображение номеров строк
    • Alt+P — включить/выключить отображение пробелов и табуляций

    Конфигурация

    • ~/.nanorc — файл конфигурации nano для текущего пользователя
    • /etc/nanorc — общесистемный файл конфигурации

    Полезные комбинации для программирования

    • Alt+3 — закомментировать/раскомментировать выделенные строки (должно быть настроено в .nanorc)
    • Ctrl+] — автодополнение имени функции/переменной (если поддерживается)
    • Alt+] — перейти к парной скобке

    Рекомендации по использованию

    • Используйте Ctrl+G для вызова справки во время работы
    • Создайте персональный файл настроек ~/.nanorc для улучшения опыта работы
    • Для программирования используйте подсветку синтаксиса, настроив её в конфигурационном файле
    • При работе с большими файлами используйте флаг -c для постоянного отображения позиции курсора

    Пример конфигурации ~/.nanorc

    # Включение подсветки синтаксиса
    include "/usr/share/nano/*.nanorc"
    
    # Автоотступы
    set autoindent
    
    # Плавная прокрутка строк
    set smooth
    
    # Показывать номера строк
    set linenumbers
    
    # Включение мыши
    set mouse
    
    # Табуляция равна 4 пробелам
    set tabsize 4
    
    # Конвертирование таба в пробелы
    set tabstospaces

    Эта памятка содержит наиболее часто используемые команды и функции редактора nano. Для получения полной информации о возможностях nano, используйте man nano в терминале или нажмите Ctrl+G внутри редактора.

    Справочник (памятка) команд WSL

    Основные команды

    Установка и управление WSL

    # Установка WSL
    wsl --install
    
    # Просмотр списка доступных дистрибутивов Linux
    wsl --list --online
    # или
    wsl -l -o
    
    # Установка конкретного дистрибутива
    wsl --install -d <DistroName>
    
    # Просмотр установленных дистрибутивов
    wsl --list
    # или
    wsl -l
    
    # Просмотр всех дистрибутивов (включая WSL версию)
    wsl --list --verbose
    # или
    wsl -l -v

    Управление дистрибутивами

    # Запуск конкретного дистрибутива
    wsl -d <DistroName>
    
    # Установка дистрибутива по умолчанию
    wsl --set-default <DistroName>
    
    # Удаление дистрибутива
    wsl --unregister <DistroName>
    
    # Остановка конкретного дистрибутива
    wsl --terminate <DistroName>
    
    # Остановка всех запущенных дистрибутивов
    wsl --shutdown

    Версии WSL

    # Установка версии WSL для конкретного дистрибутива
    wsl --set-version <DistroName> <Version>
    
    # Установка версии WSL по умолчанию
    wsl --set-default-version <Version>

    Импорт/Экспорт

    # Экспорт дистрибутива в tar-файл
    wsl --export <DistroName> <FileName.tar>
    
    # Импорт дистрибутива из tar-файла
    wsl --import <DistroName> <InstallLocation> <FileName.tar>

    Сетевые команды

    # Просмотр IP-адреса WSL
    wsl hostname -I
    
    # Запуск сетевой диагностики
    wsl --status

    Полезные команды внутри WSL

    # Доступ к Windows-директориям
    cd /mnt/c/
    
    # Запуск Windows-программ
    cmd.exe /c "команда"
    explorer.exe .
    
    # Проверка версии дистрибутива
    cat /etc/os-release
    
    # Обновление пакетов (Ubuntu/Debian)
    sudo apt update && sudo apt upgrade

    Настройка и конфигурация

    # Настройка параметров памяти (.wslconfig в Windows %UserProfile%)
    [wsl2]
    memory=4GB
    processors=4
    
    # Монтирование дисков
    wsl --mount <DiskPath>

    Советы

    • Используйте wsl --help для просмотра всех доступных команд
    • В Windows 11 можно запускать Linux GUI приложения напрямую
    • WSL интегрируется с Visual Studio Code через расширение «Remote — WSL»
    • Файловая система Windows доступна через /mnt/c/ (где c — буква диска)

    Устранение неполадок

    # Перезапуск службы WSL
    wsl --shutdown
    # затем
    wsl
    
    # Проверка статуса WSL
    wsl --status
    
    # Обновление WSL
    wsl --update

    Чтобы установить новый дистрибутив с другим именем, убедитесь что:

    • Выбранное имя еще не используется
    • Имя не содержит специальных символов
    • Используйте простые английские буквы и цифры

    Например, если вы пытаетесь установить Ubuntu, и имя «Ubuntu» уже занято, вы можете использовать:

    wsl --install -d Ubuntu --name Ubuntu2
    # или
    wsl --install -d Ubuntu --name MyUbuntu

    WordPress разработка: локал-стейдж-прод

    Подход с тремя окружениями (локал-стейдж-прод) является фундаментальным в профессиональной WordPress-разработке и помогает обеспечить качество, стабильность и безопасность веб-сайтов.

    Разработчики WordPress обычно используют несколько окружений для обеспечения качества, тестирования и бесперебойной работы. Вот как это обычно организуется:

    Стандартная модель с тремя окружениями

    Стандартная модель включает три основных окружения:

    1. Локальное окружение (Local)

    • Назначение: Разработка и первичное тестирование
    • Где располагается: На компьютере разработчика
    • Особенности:
      • Используется для быстрой разработки новых функций
      • Можно экспериментировать без рисков
      • Не требует доступа к интернету
      • Обычно использует инструменты типа LocalWP, XAMPP, MAMP, Docker

    2. Тестовое окружение (Staging)

    • Назначение: Проверка функционала в условиях, близких к боевым
    • Где располагается: На хостинге, часто на отдельном поддомене (например, stage.site.com)
    • Особенности:
      • Должно максимально соответствовать производственному окружению
      • Используется для тестирования обновлений и новых функций
      • Часто защищено паролем от публичного доступа
      • Может иметь копию реальных данных (с анонимизацией персональных данных)

    3. Производственное окружение (Production)

    • Назначение: Обслуживание реальных пользователей
    • Где располагается: На боевом хостинге
    • Особенности:
      • Оптимизировано для производительности и безопасности
      • Все изменения тщательно проверяются перед внедрением
      • Регулярное резервное копирование данных
      • Мониторинг работоспособности и безопасности

    Рабочий процесс и инструменты

    Системы контроля версий

    • Git: Почти все профессиональные разработчики используют Git для отслеживания изменений
    • Репозитории: GitHub, GitLab, Bitbucket для хранения кода
    • Ветвление: Обычно используют модель с ветками для функций (feature branches), которые затем объединяются в основную ветку

    Автоматизация развертывания

    • CI/CD: Непрерывная интеграция и развертывание с использованием GitHub Actions, GitLab CI, Bitbucket Pipelines
    • Инструменты развертывания: Capistrano, DeployBot, Buddy
    • WordPress-специфичные: WP-CLI для управления сайтом через командную строку

    Управление базами данных

    • Миграция данных: Инструменты типа WP Migrate DB Pro для синхронизации баз данных между окружениями
    • Версионирование базы данных: Некоторые разработчики используют инструменты типа WP-CFM для версионирования конфигурации

    Дополнительные практики

    • Документация: Ведение документации по проекту, включая требования, архитектуру, API
    • Проверка кода: Использование линтеров и других инструментов для обеспечения качества кода
    • Мониторинг: Установка систем мониторинга для отслеживания производительности и проблем

    Продвинутые подходы

    Docker-контейнеризация

    Многие команды переходят на использование Docker для создания идентичных окружений:

    • Гарантирует одинаковое окружение для всех разработчиков
    • Упрощает настройку локальных сред
    • Делает развертывание более предсказуемым

    Подход Infrastructure as Code (IaC)

    • Использование инструментов типа Terraform или Ansible для определения инфраструктуры как кода
    • Автоматизация создания и настройки серверов

    Многосайтовое окружение

    В больших компаниях иногда добавляют дополнительные окружения:

    • Development (разработка): Для интеграции работы разных разработчиков
    • QA: Для тестирования качества
    • UAT (User Acceptance Testing): Для тестирования клиентом

    Инструменты для локальной разработки WordPress

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

    • LocalWP (бывший Local by Flywheel): Простой интерфейс, популярен среди новичков
    • DevKinsta: От компании Kinsta, специально для их хостинга
    • XAMPP/MAMP/WAMP: Классические стеки для разных ОС
    • Docker + docker-compose: Более гибкое решение, часто с конфигурацией типа WordPress + MySQL + phpMyAdmin
    • Varying Vagrant Vagrants (VVV): Среда на основе Vagrant, популярная среди контрибьюторов WordPress

    PostgreSQL: Шпаргалка для работы с базой данных

    Эта шпаргалка охватывает основные операции для работы с PostgreSQL.

    Если у вас возникают ошибки типа «permission denied», возможно, вам нужно подключиться с правами суперпользователя или получить необходимые разрешения от администратора базы данных.

    Подключение к PostgreSQL

    Через терминал (psql)

    -- Подключение к конкретной базе данных
    psql -h hostname -p port -U username -d database_name
    -- Пример: 
    psql -h localhost -p 5432 -U postgres -d mydb
    
    -- Подключение без указания базы (к пользовательской базе)
    psql -U username

    Строка подключения для приложений

    postgresql://username:password@hostname:port/database_name

    Основные команды в psql

    Как посмотреть список всех баз данных?

    \l или \list

    Как подключиться к базе данных?

    \c database_name или \connect database_name

    Как посмотреть список всех таблиц в текущей базе?

    \dt

    Список всех таблиц с подробностями

    \dt+

    Список всех схем

    \dn

    Описание структуры таблицы

    \d table_name

    Полное описание структуры таблицы (с типами и ограничениями)

    \d+ table_name

    Как посмотреть список пользователей?

    \du

    Получить помощь по командам

    -- Помощь по командам psql
    \?
    
    -- Помощь по SQL командам
    \h

    Как выйти из psql?

    \q

    Основные SQL-запросы

    Создание новой базы данных

    CREATE DATABASE database_name;

    Удаление базы данных

    DROP DATABASE database_name;

    Работа с таблицами

    -- Создание таблицы
    CREATE TABLE table_name (
        column1 data_type CONSTRAINTS,
        column2 data_type CONSTRAINTS,
        ...
    );
    
    -- Пример создания таблицы
    CREATE TABLE users (
        id SERIAL PRIMARY KEY,        -- Автоинкрементное поле с первичным ключом
        username VARCHAR(50) UNIQUE NOT NULL,  -- Строка фиксированной длины с ограничениями
        email VARCHAR(100) UNIQUE NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- Текущая дата/время по умолчанию
    );
    
    -- Удаление таблицы
    DROP TABLE table_name;
    
    -- Изменение структуры таблицы (добавление столбца)
    ALTER TABLE table_name ADD COLUMN column_name data_type;
    
    -- Изменение структуры таблицы (удаление столбца)
    ALTER TABLE table_name DROP COLUMN column_name;
    
    -- Переименование таблицы
    ALTER TABLE table_name RENAME TO new_table_name;

    Работа с данными

    -- Выборка всех данных из таблицы
    SELECT * FROM table_name;
    
    -- Выборка конкретных столбцов
    SELECT column1, column2 FROM table_name;
    
    -- Выборка с условием
    SELECT * FROM table_name WHERE condition;
    
    -- Сортировка результатов
    SELECT * FROM table_name ORDER BY column_name [ASC|DESC];
    
    -- Ограничение количества результатов
    SELECT * FROM table_name LIMIT number [OFFSET number];
    
    -- Вставка данных
    INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
    
    -- Обновление данных
    UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
    
    -- Удаление данных
    DELETE FROM table_name WHERE condition;
    
    -- Усечение таблицы (удаление всех строк, но сохранение структуры)
    TRUNCATE TABLE table_name;

    Работа с индексами

    -- Создание индекса
    CREATE INDEX index_name ON table_name (column_name);
    
    -- Создание составного индекса
    CREATE INDEX index_name ON table_name (column1, column2);
    
    -- Удаление индекса
    DROP INDEX index_name;

    Резервное копирование и восстановление

    # Создание резервной копии базы данных
    pg_dump -h hostname -p port -U username -d database_name > backup_file.sql
    
    # Создание сжатой резервной копии
    pg_dump -h hostname -p port -U username -d database_name | gzip > backup_file.sql.gz
    
    # Восстановление из резервной копии
    psql -h hostname -p port -U username -d database_name < backup_file.sql
    
    # Восстановление из сжатой резервной копии
    gunzip -c backup_file.sql.gz | psql -h hostname -p port -U username -d database_name

    Что такое Local WP?

    LocalWP — это бесплатная программа для быстрой и удобной локальной разработки сайтов на WordPress. Она позволяет запустить сайт прямо на своём компьютере без необходимости настраивать сервер вручную.

    Официальный сайт

    Что делает LocalWP?

    Создаёт локальный сервер – ваш сайт работает на компьютере, как на реальном хостинге.
    Устанавливает WordPress в один клик – не нужно вручную скачивать файлы и настраивать базы данных.
    Позволяет работать офлайн – сайт доступен даже без интернета.
    Поддерживает несколько сайтов – можно создать несколько тестовых проектов.
    Синхронизация с хостингами – можно легко перенести сайт с локального компьютера на реальный сервер.

    Кому подойдёт?

    • Новичкам – не нужно разбираться в сложных настройках.
    • Разработчикам – можно тестировать сайты перед публикацией.
    • Фрилансерам – удобно показывать клиентам демо-версии сайтов.

    Как пользоваться?

    1. Скачиваете и устанавливаете LocalWP.
    2. Создаёте новый сайт, вводите название и нажимаете «Создать».
    3. Программа сама развернёт сервер и установит WordPress.
    4. Всё, можно разрабатывать сайт прямо на компьютере!

    Итог: LocalWP — это быстрый и удобный способ запустить WordPress на своём ПК без сложных настроек. 🚀

    Основные преимущества Local WP:

    1. Простота использования — позволяет легко создавать локальные WordPress-сайты даже начинающим разработчикам
    2. Встроенный сервер — не нужно отдельно настраивать LAMP/MAMP/WAMP стеки
    3. Изоляция проектов — каждый сайт работает в своей среде, что предотвращает конфликты
    4. Гибкие настройки — позволяет выбирать разные версии PHP, MySQL и веб-сервера
    5. Live Links — возможность временно опубликовать локальный сайт для демонстрации клиентам
    6. Интеграция с сервисами — хорошая связь с хостингами (особенно WP Engine и Flywheel)