Как установить WordPress с Nginx и PHP 8.4 на Debian 12: пошаговое руководство

Это руководство покажет, как установить и настроить WordPress с веб-сервером Nginx и PHP 8.4 на Debian 12. Мы пройдем через полную настройку сервера, включая безопасность, SSL-сертификаты и оптимизацию производительности.

Что вы получите:

  • Безопасная настройка сервера Debian 12
  • Nginx с оптимизированной конфигурацией для WordPress
  • PHP 8.4 с необходимыми модулями
  • MariaDB для базы данных
  • SSL-сертификат Let’s Encrypt
  • Firewall и базовая защита

1. Начальная настройка сервера Debian 12

Подключение к серверу

ssh root@your_server_ip

Обновление системы

apt update -y && apt upgrade -y

Создание пользователя с sudo привилегиями

# Создаем нового пользователя
adduser debian

# Добавляем в группу sudo
usermod -a -G sudo debian

Настройка SSH безопасности

nano /etc/ssh/sshd_config

Измените следующие параметры:

Port 22500
Protocol 2
PermitRootLogin no
UseDNS no
AllowUsers debian

Обратите внимание, что мы изменили стандартный порт 22.

Перезапустите SSH:

systemctl restart ssh.service

Выйдите и подключитесь под новым пользователем:

# Выход
exit

# Подключение под новым пользователем
ssh -p 22500 debian@your_server_ip

2. Установка Nginx, PHP 8.4 и MariaDB

Установка базовых пакетов

sudo apt install nginx mariadb-server mariadb-client unzip wget git curl gnupg2 software-properties-common -y

Установка PHP 8.4 из репозитория Sury

# Добавляем GPG ключ
curl -sSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /usr/share/keyrings/sury-php.gpg

# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

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

# Устанавливаем PHP 8.4 и необходимые модули
sudo apt install php8.4-fpm php8.4-common php8.4-mysql php8.4-gd php8.4-bcmath php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-intl php8.4-soap php8.4-readline php8.4-opcache -y

Скрупулезным людям можно воспользоваться этой ссылкой и посмотреть точные зависимости расширений PHP для работы CMS WordPress.

Настройка PHP 8.4

sudo nano /etc/php/8.4/fpm/php.ini

Измените следующие параметры:

post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 32M
date.timezone = Europe/Moscow
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000

Перезапустите PHP-FPM:

sudo systemctl restart php8.4-fpm.service
sudo systemctl enable php8.4-fpm.service

3. Настройка Nginx для WordPress

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

sudo mkdir -p /var/www/yourdomain.com

Создание конфигурации Nginx

sudo nano /etc/nginx/sites-available/yourdomain.com.conf

Добавьте конфигурацию:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/yourdomain.com;
    index index.php index.html;

    # Логи
    access_log /var/log/nginx/yourdomain.com_access.log;
    error_log /var/log/nginx/yourdomain.com_error.log;

    # Максимальный размер загружаемых файлов
    client_max_body_size 64M;

    # Favicon и robots.txt
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Основная локация
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP обработка
    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_read_timeout 3600s;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 128k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_index index.php;
    }

    # Кеширование статических файлов
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        log_not_found off;
    }

    # Защита от доступа к системным файлам
    location ~ /\. {
        deny all;
    }

    location ~ ^/(wp-config\.php|readme\.html|license\.txt)$ {
        deny all;
    }
}

Активация конфигурации

# Проверка синтаксиса
sudo nginx -t

# Создание символической ссылки
sudo ln -s /etc/nginx/sites-available/yourdomain.com.conf /etc/nginx/sites-enabled/

# Удаление дефолтной конфигурации
sudo rm /etc/nginx/sites-enabled/default

# Перезапуск Nginx
sudo systemctl restart nginx.service
sudo systemctl enable nginx.service

4. Настройка базы данных MariaDB

Безопасная установка MariaDB

sudo mysql_secure_installation

Ответьте на вопросы:

  • Set root password: Y (задайте сильный пароль)
  • Remove anonymous users: Y
  • Disallow root login remotely: Y
  • Remove test database: Y
  • Reload privilege tables: Y

Создание базы данных для WordPress

mysql -u root -p

Выполните SQL команды:

CREATE DATABASE wp_yourdomain DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

GRANT ALL ON wp_yourdomain.* TO 'wpuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';

FLUSH PRIVILEGES;

EXIT;

5. Установка WordPress

Загрузка и распаковка WordPress

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz

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

# Копирование конфигурационного файла
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

# Редактирование конфигурации
nano /tmp/wordpress/wp-config.php

Генерация ключей безопасности

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Скопируйте полученные ключи и вставьте в wp-config.php

Настройка подключения к базе данных

В файле wp-config.php замените:

// ** Database settings ** //
define( 'DB_NAME', 'wp_yourdomain' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'StrongPassword123!' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

Копирование файлов WordPress

# Копирование файлов
sudo cp -av /tmp/wordpress/* /var/www/yourdomain.com/

# Установка правильных прав доступа
sudo chown -R www-data:www-data /var/www/yourdomain.com/
sudo chmod -R 755 /var/www/yourdomain.com/

# Удаление временных файлов
rm -rf /tmp/wordpress*

6. Установка SSL-сертификата Let’s Encrypt

Установка Certbot

sudo apt install python3-acme python3-certbot python3-certbot-nginx -y

Получение SSL-сертификата

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Certbot автоматически:

  • Получит сертификат
  • Обновит конфигурацию Nginx
  • Настроит автоматическое перенаправление с HTTP на HTTPS

Настройка автоматического обновления

# Тест обновления
sudo certbot renew --dry-run

# Создание cron задачи
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -

7. Настройка Firewall (UFW)

Установка и настройка UFW

# Установка UFW
sudo apt install ufw -y

# Настройка правил
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Открытие необходимых портов
sudo ufw allow 22500/tcp comment 'SSH port 22500'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

# Активация firewall
sudo ufw enable

# Проверка статуса
sudo ufw status verbose

8. Завершение установки WordPress

Доступ к веб-интерфейсу

Откройте браузер и перейдите по адресу: https://yourdomain.com

Заполнение формы установки WordPress

  1. Название сайта: ваше название
  2. Имя пользователя: admin (или другое)
  3. Пароль: создайте сильный пароль
  4. Email: ваш email адрес
  5. Приватность: снимите галочку для продакшн сайта

9. Оптимизация и безопасность

Настройка PHP OpCache

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1

Настройка логов Nginx

# Создание директории для логов
sudo mkdir -p /var/log/nginx/

# Ротация логов
sudo nano /etc/logrotate.d/nginx

Дополнительная безопасность в wp-config.php

// Отключение редактирования файлов из админки
define('DISALLOW_FILE_EDIT', true);

// Ограничение ревизий постов
define('WP_POST_REVISIONS', 3);

// Автоматическое удаление корзины
define('EMPTY_TRASH_DAYS', 30);

// Отключение отладки в продакшене
define('WP_DEBUG', false);

10. Проверка работоспособности

Команды для диагностики

# Проверка статуса сервисов
sudo systemctl status nginx
sudo systemctl status php8.4-fpm
sudo systemctl status mariadb

# Проверка PHP версии
php -v

# Проверка конфигурации Nginx
sudo nginx -t

# Проверка портов
sudo netstat -tlnp | grep -E "(80|443|3306)"

# Проверка SSL сертификата
sudo certbot certificates

Тест производительности

# Установка утилит для тестирования
sudo apt install apache2-utils -y

# Простой тест нагрузки
ab -n 100 -c 10 https://yourdomain.com/

Заключение

Вы успешно установили WordPress с Nginx и PHP 8.4 на Debian 12. Ваш сайт теперь работает с современными технологиями, имеет SSL-сертификат и базовую защиту.

Что дальше:

  • Установите необходимые плагины WordPress
  • Настройте резервное копирование
  • Рассмотрите установку CDN
  • Настройте мониторинг сервера

Полезные команды для обслуживания:

# Обновление системы
sudo apt update && sudo apt upgrade

# Перезапуск сервисов
sudo systemctl restart nginx php8.4-fpm mariadb

# Проверка логов
sudo tail -f /var/log/nginx/yourdomain.com_error.log

Ваш WordPress сайт готов к работе!

Как редактировать robots.txt через Yoast SEO?

Файл robots.txt — это важный инструмент для управления поведением поисковых роботов на вашем сайте WordPress. Если вы используете плагин Yoast SEO, у вас есть удобная возможность создавать и редактировать этот файл прямо из административной панели WordPress. В этом руководстве мы подробно разберем, как это сделать правильно.

Что такое robots.txt и зачем он нужен

Файл robots.txt — это текстовый файл, который сообщает поисковым роботам (таким как Googlebot, Yandex Bot), какие страницы и разделы вашего сайта они могут индексировать, а какие — нет. Правильно настроенный robots.txt помогает:

  • Экономить краулинговый бюджет поисковых систем
  • Ускорять индексацию важных страниц
  • Скрывать служебные разделы сайта от индексации
  • Указывать местоположение XML-карты сайта

Стандартные настройки robots.txt в WordPress и Yoast SEO

WordPress по умолчанию создает виртуальный robots.txt со следующим содержимым:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Yoast SEO заменяет стандартные настройки WordPress на более оптимизированные:

# START YOAST BLOCK
# ---------------------------
User-agent: *
Disallow:

Sitemap: https://www.example.com/sitemap_index.xml
# ---------------------------
# END YOAST BLOCK

Основные отличия Yoast SEO версии:

  • Разрешает индексацию всех разделов сайта (пустая директива Disallow)
  • Автоматически добавляет ссылку на XML-карту сайта
  • Оптимизирован для лучшего SEO-продвижения

Пошаговая инструкция: Как создать robots.txt через Yoast SEO

Шаг 1: Войдите в административную панель WordPress

Авторизуйтесь в своем WordPress сайте и перейдите в Консоль (Dashboard).

Шаг 2: Откройте настройки Yoast SEO

В левом меню найдите пункт «Yoast SEO» и кликните по нему.

Шаг 3: Перейдите в раздел «Инструменты»

В меню Yoast SEO выберите пункт «Tools» (Инструменты).

Шаг 4: Откройте редактор файлов

Найдите и кликните на «File Editor» (Редактор файлов).

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

Шаг 5: Создайте файл robots.txt

Нажмите кнопку «Create robots.txt file» (Создать файл robots.txt).

Шаг 6: Редактируйте содержимое файла

После создания файла вы увидите стандартные директивы от Yoast SEO. Здесь вы можете:

  • Просмотреть текущие настройки
  • Добавить собственные правила
  • Изменить существующие директивы

Рекомендуемое содержимое robots.txt для WordPress

Вот оптимизированный пример robots.txt файла для большинства WordPress сайтов:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /?s=
Disallow: /search/
Disallow: /author/

Sitemap: https://ваш-сайт.ru/sitemap_index.xml

Проверка правильности настройки robots.txt

1. Прямая проверка

Перейдите по адресу ваш-сайт.ru/robots.txt и убедитесь, что файл загружается и содержит корректные директивы.

2. Google Search Console

Используйте инструмент «Тестирование robots.txt» в Google Search Console для проверки синтаксиса и логики файла.

3. Yandex.Webmaster

Аналогичный инструмент доступен в Яндекс.Вебмастере для проверки корректности настроек.

Заключение

Правильная настройка robots.txt через Yoast SEO — это простой, но важный шаг для оптимизации SEO вашего WordPress сайта. Плагин Yoast SEO значительно упрощает этот процесс, предоставляя удобный интерфейс для создания и редактирования файла прямо из административной панели.

Помните, что robots.txt — это рекомендации для поисковых роботов, а не строгие правила. Для критически важных страниц, которые должны быть скрыты от индексации, используйте дополнительные методы, такие как мета-тег noindex или парольную защиту.

Регулярно проверяйте и обновляйте свой robots.txt файл в соответствии с изменениями структуры сайта и SEO-стратегии.

Как удалить неразрывные пробелы ( ) из всех постов WordPress через SQL?

Если вы столкнулись с проблемой, когда в ваших постах WordPress повсюду встречаются неразрывные пробелы   вместо обычных пробелов, то знаете, насколько это может раздражать. Особенно это актуально при миграции контента, импорте из других CMS или после работы с плохо настроенными редакторами.

В этой статье покажу, как быстро и эффективно очистить все посты от этих назойливых символов с помощью одного SQL-запроса.

Что такое   и откуда он берется?

  — это HTML-сущность неразрывного пробела (non-breaking space). Он предотвращает перенос строки в месте пробела, что иногда полезно, но чаще всего появляется там, где не нужен:

  • При копировании контента из Microsoft Word
  • После импорта из других CMS
  • При работе с некоторыми визуальными редакторами
  • После автоматического перевода или обработки текста

Простое решение одним запросом

Самый быстрый способ избавиться от всех   в базе данных WordPress:

UPDATE wp_posts 
SET post_content = REPLACE(post_content, ' ', ' ') 
WHERE post_content LIKE '% %';

Этот запрос:

  • Находит все записи, содержащие  
  • Заменяет их на обычные пробелы
  • Обрабатывает все типы контента (посты, страницы, кастомные типы)

Ограничиваем область действия

Если нужно обработать только определенные типы контента:

Только опубликованные посты:

UPDATE wp_posts 
SET post_content = REPLACE(post_content, ' ', ' ') 
WHERE post_content LIKE '% %'
AND post_status = 'publish'
AND post_type = 'post';

Только страницы:

UPDATE wp_posts 
SET post_content = REPLACE(post_content, ' ', ' ') 
WHERE post_content LIKE '% %'
AND post_type = 'page';

Обязательные меры предосторожности

Создайте резервную копию! Перед выполнением любых UPDATE-запросов.

Как перейти с reCAPTCHA на Cloudflare Turnstile в Contact Form 7?

Contact Form 7 теперь рекомендует использовать Cloudflare Turnstile вместо Google reCAPTCHA для защиты форм от спама. Turnstile работает быстрее, меньше раздражает пользователей и лучше защищает приватность. В этом гайде покажу, как быстро настроить переход.

Что такое Cloudflare Turnstile?

Turnstile — это современная альтернатива reCAPTCHA от Cloudflare. Основные преимущества:

  • Быстрее работает — меньше времени на проверку
  • Меньше капч — реже показывает пазлы пользователям
  • Лучше приватность — не отслеживает пользователей как Google
  • Бесплатно — до 1 миллиона запросов в месяц
  • Проще интеграция — минимум настроек
image 1 - Как перейти с reCAPTCHA на Cloudflare Turnstile в Contact Form 7?

Шаг 1: Получаем ключи Turnstile

  1. Переходим на Cloudflare Dashboard
  2. Логинимся или регистрируемся (бесплатно)
  3. В левом меню выбираем Turnstile
  4. Нажимаем Add site

Настройки сайта:

  • Site name — любое название (например, «Мой сайт»)
  • Domain — ваш домен без протокола (например: example.com)
  • Widget Mode — оставляем Managed (рекомендуется)
  1. Нажимаем Create
  2. Копируем Site Key и Secret Key — они понадобятся для WordPress

Шаг 2: Настраиваем Contact Form 7

Устанавливаем поддержку Turnstile

Contact Form 7 поддерживает Turnstile начиная с версии 5.7. Убедитесь, что плагин обновлен до последней версии.

Добавляем ключи в WordPress

  1. Идем в Контакты → Интеграция
  2. Находим секцию Cloudflare Turnstile
  3. Вставляем полученные ключи:
    • Site Key — публичный ключ
    • Secret Key — секретный ключ
  4. Сохраняем настройки

Шаг 3: Добавляем Turnstile в формы

В редакторе формы

  1. Открываем нужную форму в Контакты → Контактные формы
  2. В коде формы добавляем тег Turnstile:
[turnstile]

Полный пример формы:

<label> Ваше имя
    [text* your-name] </label>

<label> Ваш email
    [email* your-email] </label>

<label> Сообщение
    [textarea your-message] </label>

[turnstile]

[submit "Отправить"]

В шаблоне письма

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

Шаг 4: Тестируем работу

  1. Сохраняем форму
  2. Открываем страницу с формой на сайте
  3. Проверяем, что появился виджет Turnstile
  4. Заполняем форму и отправляем тестовое сообщение
  5. Убеждаемся, что письмо приходит

Языковые настройки

По умолчанию Turnstile определяет язык автоматически. Для принудительной установки русского:

[turnstile language:ru]

Мониторинг в Cloudflare

После настройки можно отслеживать статистику:

  1. Заходим в Cloudflare Dashboard
  2. Открываем Turnstile
  3. Выбираем свой сайт
  4. Смотрим статистику запросов, блокировок и производительности

Устранение проблем

Turnstile не отображается

  • Проверьте правильность Site Key
  • Убедитесь, что домен совпадает с настройками в Cloudflare
  • Очистите кеш сайта и браузера

Форма не отправляется

  • Проверьте Secret Key
  • Убедитесь, что Contact Form 7 обновлен
  • Проверьте консоль браузера на ошибки JavaScript

Ошибка валидации

  • Проверьте, что оба ключа введены правильно
  • Убедитесь, что не превышен лимит запросов (1M в месяц на бесплатном тарифе)

Заключение

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

Рекомендую протестировать Turnstile на тестовом сайте перед переносом на основной. После успешного перехода не забудьте удалить настройки старой reCAPTCHA.

Какая разница между 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 внутри редактора.