Миграция сайта с centos 7 на ubuntu 22.04

0
(0)

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

Старый VPS оставляем как есть, ничего не трогая. Заводим в ЛК хостера новый сервер с нужным дистрибутивом. Получаем креды, заходим по ssh и создадим пользователя с sudo правами из под которого будем в дальнейшем ходить через ssh.

Bash
useradd <user> -s /bin/bash -m
passwd <user>
usermod -G sudo <user>

Далее копируем ключи с локальной машины на сервер:

Bash
ssh-copy-id -i /path/to/privatekey <user>@<ip>

В конфиг /etc/ssh/sshd_config добавляем следующее:

Bash
Port <custom ssh port>
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no

Тут мы меняем наш стандартный 22 порт для ssh, запрещаем логин от root пользователя, выключаем авторизацию по пароля и включаем авторизацию по ssh ключам.

Ставим нужные пакеты:

Bash
apt install -y - nginx php8.2 php8.2-fpm php8.2-mysqlnd php8.2-intl php8.2-opcache \
  php8.2-cli php8.2-gd php8.2-xml php8.2-igbinary php8.2-common php8.2-mbstring \
  php8.2-zip php8.2-imagick php8.2-msgpack php8.2-memcached php8.2-curl mysql-client \
  mysql-server memcached fail2ban snapd

snap install --classic certbot

ln -s /snap/bin/certbot /usr/bin/certbot

Копируем бэкап всех конфигов. Для nginx и php-fpm меняем юзера с «nginx» на «www-data». Процесс «копирования» конфигов я показывать не буду, думаю тут все предельно понятно, взяли nginx.conf из одного места, положили в точно такое же, но только на другой машине.

Создаем в СУБД пользователя и базу:

Bash
create database wordpress;
create user '<wp_admin_user>'@'localhost' identified by '<password>';
GRANT ALL ON wordpress.* TO '<wp_admin_user>'@'localhost';

По дефолту mysql на ubuntu будет доступен без ввода пароля с localhost соединения. Исправить это можно так:

Bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<root_password>'; EXIT;

Если нужно посмотреть историю mysql команд, то это можно сделать так:

Bash
cat ~/.mysql_history | python3 -c "import sys; print(''.join([l.encode('utf-8').decode('unicode-escape') for l in sys.stdin]))" 

Далее заливаем наш дамп:

Bash
mysql -u root -p wordpress  < wordpress.sql

Конфиг для memcached:

Bash
# cat /etc/memcached.conf 
-d
logfile /var/log/memcached.log
-m 1024
-p 11211
-u memcache
-l 127.0.0.1
-c 1024
-P /var/run/memcached/memcached.pid

Конфиг для fail2ban:

Bash
# cat /etc/fail2ban/jail.d/defaults-debian.conf 
[sshd]
enabled = true

[nginx-limit-req]
enabled = true
port    = http,https
logpath = %(nginx_error_log)s
findetime = 600
bantime = 600
maxretry = 5

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 43200

Так как мы используем базовую авторизацию в nginx, не забываем положить файл /etc/nginx/.htpasswd.

Далее копируем весь каталог рута сайта в новое место. Меняем владельца файлов:

Bash
chmod -R www-data: /var/www/html

На этом этапе мы подготоволи базу и залили дамп, разлили наши конфиги для nginx, php-fpm. Следовательно сейчас мы имеем полную копию сайта на другой машине.

Идем в ЛК домен регистратора и меняем там А запись на наш новый IP адрес.

Я хотел обойтись без даунтайма, но решил не использовать старые сертификаты, а сгенерировать через certbot новые. Это занимает секунды простоя, в данном случае совершенно не критично.

Bash
certbot certonly --nginx

Сертификаты легли в новое место, пути от CentOS отличаются. Это нужно поправить в nginx конфиги, сделать рестарт и сайт доступен на новой машине.

Из косяков, был только один с файлов db.php который был сделан как symlink на файл, которого нет на новой машине. Об этом любезно сообщил плагин W3 Total Cache. Файл достаточно удалить, плагин сам пересоздаст его.

Сделал замеры wrk на «свежих пакета» и свежем ядре.

Выиграли примерно 10-11 RPS, а также улучшили latency.

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий