Как установить Node.js в Debian 12 и запустить Next.js приложение?

1. Установка Node.js 22.x LTS

Рекомендую установить через NodeSource репозиторий для получения актуальной версии:

# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые пакеты
sudo apt install -y curl software-properties-common

# Добавляем NodeSource репозиторий для Node.js 22.x
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -

# Устанавливаем Node.js
sudo apt install -y nodejs

# Проверяем версии
node --version  # должно показать v22.x.x
npm --version

Альтернативный способ через NVM (Node Version Manager)

Если хотите иметь возможность легко переключаться между версиями Node.js:

# Устанавливаем NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# Перезагружаем shell или выполняем
source ~/.bashrc

# Устанавливаем Node.js 22 LTS
nvm install --lts
nvm use --lts
nvm alias default lts/*

# Проверяем
node --version  # покажет v22.x.x

Node.js 22 LTS имеет ряд преимуществ:

  • Улучшенная производительность
  • Встроенная поддержка WebSocket клиента
  • Улучшенная поддержка ESM модулей
  • Обновлённый V8 движок
  • Поддержка до апреля 2027 года

2. Установка PM2 (менеджер процессов)

PM2 — это специальная программа, которая следит за работой вашего Node.js приложения на сервере. Представьте её как надёжного администратора, который работает круглосуточно и следит, чтобы ваш сайт всегда оставался доступным.

Основная проблема

Когда вы запускаете Node.js приложение обычным способом, оно работает только пока открыт терминал. Стоит закрыть окно терминала или разорвать SSH-соединение — приложение останавливается. Если приложение падает из-за ошибки, оно не перезапускается самостоятельно. После перезагрузки сервера приложение не запустится автоматически — нужно вручную подключаться и запускать его снова.

Что делает PM2

PM2 решает все эти проблемы. Он запускает ваше приложение в фоновом режиме и постоянно следит за его состоянием. Если приложение упадёт из-за ошибки, PM2 моментально его перезапустит. При перезагрузке сервера PM2 автоматически запустит все необходимые приложения без вашего участия.

Кроме базового функционала «держать приложение живым», PM2 предоставляет удобные инструменты для production-окружения: ведение логов, мониторинг потребления памяти и процессора, возможность запуска нескольких экземпляров приложения для распределения нагрузки, обновление кода без остановки сервиса.

Почему это важно

Для production-сервера критически важна стабильность и непрерывность работы. PM2 обеспечивает эту стабильность, автоматизируя рутинные задачи администрирования Node.js приложений. Это стандартный инструмент в индустрии — практически каждый Node.js проект в production использует PM2 или аналогичные решения.

В контексте Next.js приложения PM2 особенно полезен, так как позволяет эффективно использовать серверные ресурсы, автоматически перезапускать приложение при обновлениях и вести подробные логи работы приложения, что упрощает отладку и мониторинг.

sudo npm install -g pm2

3. Создание Next.js приложения

# Создаём директорию для проекта
mkdir -p /var/www/nextjs-app
cd /var/www/nextjs-app

# Создаём новое Next.js приложение
npx create-next-app@latest

# Устанавливаем зависимости
npm install

# Собираем production версию
npm run build

4. Настройка PM2 для Next.js

Создайте файл ecosystem.config.js в корне проекта:

module.exports = {
  apps: [{
    name: 'nextjs-app',
    script: 'npm',
    args: 'start',
    cwd: '/var/www/nextjs-app',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
}

Запустите приложение:

# Запускаем через PM2
pm2 start ecosystem.config.js

# Сохраняем конфигурацию PM2
pm2 save

# Настраиваем автозапуск при перезагрузке
pm2 startup systemd -u $USER --hp /home/$USER

Если всё сделано правильно, то вы увидите в консоли это:

image 2 - Как установить Node.js в Debian 12 и запустить Next.js приложение?

В процессе PM2 сгенерирует команду, которую нужно выполнить. Скопируйте и выполните эту команду:

sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ВАШ_ЮЗЕР --hp /home/ВАШ_ЮЗЕР

5. Настройка nginx для проксирования

Создайте конфигурационный файл для вашего сайта:

sudo nano /etc/nginx/sites-available/nextjs-app

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

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;  # Замените на ваш домен

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

    # Gzip сжатие
    gzip on;
    gzip_comp_level 5;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # Проксирование на Next.js
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Дополнительные заголовки
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        
        # Таймауты
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # Кеширование статических файлов Next.js
    location /_next/static {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Кеширование на 1 год
        add_header Cache-Control "public, max-age=31536000, immutable";
    }
}

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

# Создаём символическую ссылку
sudo ln -s /etc/nginx/sites-available/nextjs-app /etc/nginx/sites-enabled/

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

# Перезапускаем nginx
sudo systemctl reload nginx

7. Настройка SSL (опционально, но рекомендуется)

# Устанавливаем Certbot
sudo apt install -y certbot python3-certbot-nginx

# Получаем SSL сертификат
sudo certbot --nginx -d example.com -d www.example.com

# Автообновление сертификатов уже настроено автоматически

Теперь ваш Next.js сайт должен быть доступен по адресу вашего домена. Next.js будет работать на порту 3000, а nginx будет проксировать все запросы к нему.

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

# PM2 команды
pm2 status          # Статус приложений
pm2 logs           # Логи
pm2 restart all    # Перезапуск
pm2 monit          # Мониторинг

# Просмотр логов nginx
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

# Перезапуск после изменений в коде
cd /var/www/nextjs-app
git pull           # Если используете git
npm install        # Если изменились зависимости
npm run build      # Пересборка
pm2 restart nextjs-app

Автообновление SSL сертификатов Let’s Encrypt — Пошаговая инструкция

Шаг 1: Проверяем, что сертификаты работают

# Смотрим какие сертификаты есть и когда истекают
sudo certbot certificates

# Тестируем обновление (без реального обновления)
sudo certbot renew --dry-run

Демонстрация процесса в консоли:

Снимок экрана 2025 09 12 в 18.12.26 - Автообновление SSL сертификатов Let's Encrypt - Пошаговая инструкция
Снимок экрана 2025 09 12 в 18.12.47 - Автообновление SSL сертификатов Let's Encrypt - Пошаговая инструкция
Снимок экрана 2025 09 12 в 18.12.58 - Автообновление SSL сертификатов Let's Encrypt - Пошаговая инструкция

Шаг 2: Проверяем, может автообновление уже настроено

# Проверяем cron задачи
sudo crontab -l | grep certbot

# Проверяем системные таймеры
systemctl list-timers | grep certbot

# Проверяем папку cron.d
ls -la /etc/cron.d/ | grep certbot

Если увидели certbot в любой из команд — автообновление уже работает! Ничего делать не нужно.

Шаг 3: Если автообновления нет — настраиваем

Вариант А: Через systemd

# Создаем сервис
sudo tee /etc/systemd/system/certbot-renewal.service << 'EOF'
[Unit]
Description=Certbot Renewal
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'
EOF

# Создаем таймер (будет запускать 2 раза в день)
sudo tee /etc/systemd/system/certbot-renewal.timer << 'EOF'
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=3600
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Включаем таймер
sudo systemctl daemon-reload
sudo systemctl enable --now certbot-renewal.timer

# Проверяем что работает
sudo systemctl status certbot-renewal.timer
systemctl list-timers | grep certbot

Вариант Б: Через cron

# Добавляем в cron
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'") | sudo crontab -

# Проверяем что добавилось
sudo crontab -l

Шаг 4: Настраиваем логирование

# Добавляем в cron
(sudo crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/certbot renew --quiet --post-hook 'systemctl reload nginx'") | sudo crontab -

# Проверяем что добавилось
sudo crontab -l

Шаг 5: Тестируем что все работает

# Принудительно запускаем обновление для теста
sudo certbot renew --dry-run

# Если используете systemd timer - тестируем его
sudo systemctl start certbot-renewal.service
sudo systemctl status certbot-renewal.service

# Смотрим логи
sudo journalctl -u certbot-renewal.service

Шаг 6: Финальная проверка

# Смотрим когда будет следующее обновление
systemctl list-timers | grep certbot

# ИЛИ для cron
sudo crontab -l | grep certbot

Что происходит дальше:

  1. Каждый день в 3 ночи (или 2 раза в день для systemd) certbot проверяет сертификаты
  2. Если до истечения < 30 дней — сертификат обновляется автоматически
  3. После обновления — Nginx перезагружается автоматически
  4. Вы получаете новый сертификат без вашего участия

Если что-то не работает:

# Смотрим логи
sudo tail -50 /var/log/letsencrypt/letsencrypt.log

# Проверяем права
ls -la /etc/letsencrypt/

# Пробуем обновить вручную
sudo certbot renew --force-renewal

Готово! Теперь сертификаты будут обновляться автоматически и вы никогда не получите ошибку об истекшем сертификате!

Как установить 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 сайт готов к работе!

Как обновить операционную систему 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 очищает локальный кэш пакетов

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

Как полностью удалить СУБД 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.

Как копировать файлы между Linux-серверами при помощи утилиты rsync?

rsync — быстрая и гибкая программа, позволяющая копировать файлы на/с удалённых машин.

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

Задача: скопировать всю директорию (включая все файлы) размером более 50ГБ с удаленного сервера под управлением Debian/Ubuntu.

Решение: Воспользуемся утилитой rsync. Подробная информация.

Общий синтаксис команд достаточно простой.

rsync [ОПЦИИ...] ОТКУДА... [КУДА]
    Pull (получение):
        rsync [ОПЦИИ...] [USER@]HOST:ОТКУДА... [КУДА]
    Push (отправка):
        rsync [ОПЦИИ...] ОТКУДА... [USER@]HOST:КУДА

Следуя этим схемам давайте выполним нашу поставленную задачу.

  rsync --archive --verbose --progress -e "ssh -p 22888" root@00.000.00.000:/var/www/site/ ~/newsite/public_html

Данная команда скопирует всё содержимое директории /var/www/site/ удалённой машины в домашнюю директорию пользователя /newsite/public_html текущей машины (с которой осуществлялось подключение).

Данный пример рассматривает подключение по нестандартному ssh порту 22888 (по умолчанию 22-ой).

Опции:

  • —archive (можно сокращённо -a) команда для удобства объединяет в себе ряд других команда (равносильно -rlptgoD). То есть, утилита пройдёт рекурсивно по всем вложенным каталогам, перенесёт символические ссылки как символические ссылки ( -l ), сохранит изначальные права доступа к файлам ( -p ), сохранит время модификации ( -t ) и т.д.
  • —verbose вывод подробной информации о процессе синхронизации.
  • —progress показывать строку прогресса для синхронизации.
  • -e указывает удаленную оболочку для подключения (использования)

Рекомендация

При неуверенности запускайте в пробном режиме, при котором ничего не произойдёт, а только утилита продемонстрирует в консоли свою работу, но файлы скопированы не будут. Для этого нужно добавить опцию —dry-run

В таком случае наша консольная команда может выглядеть вот так:

sudo rsync --dry-run -azvv -e ssh /home/path/folder1/ ЮЗЕР@ХОСТ:/home/path/folder2

На что обратить внимание?

  1. Это закрывающие слэши. Закрывающий слэш означает «внутреннее содержимое». То есть, если в случае /var/www/site/ убрать закрывающий слэш /var/www/site то в итоге будет создана эта директория и мы получим немного неожиданный результат. Наши копируемые файлы окажутся вот тут /newsite/public_html/site
    • При этом, наличие или отсутствие закрывающего слэша в имени директории, в которую будет происходить копирование, значения не имеет. Важно обращать внимание на слэш источника.
  2. Это символы двоеточия при подключении к удалённым машинам.

Как архивировать и разархивировать файлы или папки в Debian, Ubuntu?

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

Начнем мы с алгоритма .zip и неспроста. Данный формат очень популярен и является универсальным для многих операционных систем, будь то Windows или MacOS — а это значит, что полученный zip-архив сможет распознать (зачитать) почти любая операционная система.

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

Задача: Архивировать файлы в архив ZIP, определённой директории на сервере, для дальнейшей работы с их копией в заархивированном виде.

Решение: Первым делом нам нужно проверить наличие пакета zip для дальнейшей работы. В этом нам поможет пакет dpkg — менеджер пакетов для Debian.

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

dpkg --status zip

или при помощи инструмента dpkg-query — чтобы сделать запрос в базу данных пакета dpkg

dpkg-query -s unzip

Ключ -s это сокращение от —status

Вот пример выполнения запроса на боевом сервере одного из моих заказчиков:

Мы видим, что пакет для архивации данных zip отсутствует в нашей ОС. А в свою очередь следующий запрос, который я сделал для разнообразия по второму примеру в коде выше, выдаст нам противоположный результат. Мы видим, что пакет unzip существует в нашей ОС:

unzip

Для разнообразия, можно было осуществить проверку следующей командой:

zip --version

Следовательно, если пакет отсутствует, то требуется его установка в нашу ОС:

sudo apt install zip

Если отсутствовали оба пакета, то можно исправить эту неприятность вот такой командой:

sudo apt install zip unzip

Архивация пакетом zip

Подготовительная часть позади и теперь мы можем перейти непосредственно к выполнению поставленной задачи. Файлы, которые нам нужно заархивировать находятся в директории /var/www/site

cd /var/www/site

Убедимся, что мы находимся в нужной директории и в ней находятся нужные для архивации файлы. Воспользуемся для этого командой ls или dir. Вывод файлов после выполнения:

команда ls

Перейдем непосредственно к делу и нехитрой командой сделаем наш архив:

sudo zip -r archive.zip *

Произойдёт магия… и после выполнения, введя повторно ls — выводит содержимое каталога, мы должны обнаружить наш архив

архив файлов

Разберёмся в этой магии…

ключик -r предписывает утилите zip рекурсивно проходить все директории и архивировать их содержимое. А звездочка в конце команды — равносильно слову «ВСЁ», т.е. — архивировать всё, что есть в директории, в которой мы и находимся.

Как вариант можно указать путь к той директории которую мы архивируем. Это полезно когда вы находитесь в другом месте в системе и вместо звездочки просто указываете нужный, относительно корня ОС, путь:

zip -r filename.zip /path/to/folder

## Наш пример 
zip -r archive.zip /var/www/site

Рассмотрим более сложный пример, в котором мы добавим в архив изображения с расширением файлов: .jpg, .jepg, .png

zip -R archive_image "*.jpg" "*.jepg" "*.png"

В архив archive_image.zip попадут картинки с перечисленными расширениями. Учтите, что в архив попадает и структура директорий:

Image 00000182 - Как архивировать и разархивировать файлы или папки в Debian, Ubuntu?

В принципе, на этом всё. Да, есть много нюансов при работе с zip, таких как: включение в архив только нужных типов файлов (используется ключ -i), можно указать степень сжатия по шкале от 0 до 9, где 0 — это отсутствие сжатия, можно при помощи параметра -P задать пароль на архив. Но все это уже частные случаи.

Подробнее

Распаковка пакетом unzip

Разархивирование данных происходит проще простого. Вместо команды zip нам следует использовать — unzip. Пакет unzip — это распаковщик файлов .zip

И перед распаковкой, начать стоит с проверки целостности данных. Это осуществимо при помощи ключика -t (test). Обратимся к нашему архиву указав следующую команду:

unzip -t archive.zip

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

unzip -t /var/www/site/archive.zip

Результат выполнения:

команда unzip тест

Убедившись в отсутствии ошибок, мы приступаем к разархивированию данных. И здесь нам необходимо придерживаться правила ЧТО / КУДА.

То есть первый путь мы задаем то ЧТО подлежит разархивированию, а второй — КУДА требуется выгрузить файлы из архива. Единственное что нужно тут учесть, так то, что после архива мы указываем ключик -d (директория) и далее путь к папке куда произойдет разархивация:

unzip /var/www/site/archive.zip -d /var/www/html

Эта инструкция распакует наш архив в директорию html. На скриншоте ниже можно посмотреть как отработала эта строка. В данном примере, мы подымаемся на уровень выше из директории site, далее выбираем директорию html и смотрим её содержимое. Файлы из архива на месте!

Image 00000184 - Как архивировать и разархивировать файлы или папки в Debian, Ubuntu?

Если вы забыли ( добро пожаловать в клуб ? ), что находится в вашем архиве, то его содержимое можно посмотреть при помощи параметра -l (list)

unzip -l /var/www/site/archive.zip