ITСooky

IT-рецепты съедобные и не очень!

Переезд сайта WordPress и форума phpBB с CentOS на Ubuntu в Hetzner!

дата 25.08.2022

Случилось непредвиденное, самый популярный дистрибутив Linux для хостинга сайтов послал всех в жопу и давно послал это я только сейчас ощутил, когда хотел что-то обновить а уже ничего не работает все грохнули. CentOS погубило его родство с Red Hat типа комерчиским Linux’ом и вот они тянули код(надо признать что в обе стороны) из сообщества и продажники сказали нет, всё, хватит и нет больше CentOS… И тут еще у Hetzner цены поднимаются на 10% с сентября для новых клиентов, для старых с 1 января… Всё, всё, надо переезжать ну и куда как ни в Ubuntu!!!

(Это не вся цена еще +2,26€ за 47Gb места в месяц!)

Не первый мой переезд, конечно, и на Hetzner даже второй, вот первый описан Поднимаем http2 сайт на cloud(VPS) хостинге HETZNER в Германии! подробно как там что создавать не буду писать, создал еще один такой же VPS и быстро за день все перенес!!!

Ubuntu у Hetzner уже 22.04.1.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-46-generic x86_64)

Получаю пароль и захожу на VPS

Обычная практика когда root не заходит прямо по ssh, сначала заходят юзером и дают ему super права.
useradd user1
passwd user1

даем право этому юзеру заходить по ssh (хотя оно уже есть, то есть запрещаем другим)
vi /etc/ssh/sshd_config
добавляем строку
AllowUsers user1
и запрещаем заходить рутом, находим эту строку и доводим до вида
PermitRootLogin no
Перезапускаем ssh
service sshd restart
И теперь по ssh можно заходить только под user1

У меня были довольно старые версии PHP и MySQL

PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
MySQL(i) 5.7.31

PHP версию сохранил, а MySQL поставил 8-ой он, не без проблем конечно, но завелся!

Установка PHP
Популярнейшая и используюмейщая версия PHP не входит в стандартный репозиторий пакетов Ubuntu… ну у них тоже свои тараканы! Так что ставим из какого-то другого места — все так делают!

sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt -y install php7.4
sudo apt -y install php7.4-fpm php7.4-mysqlnd php7.4-xml php7.4-gd php7.4-mbstring

Все эти доп модули мне нужны для форума phpBB

Запускаю php-fpm
sudo systemctl start php7.4-fpm

Редактрую его конфиг
vi /etc/php/7.4/fpm/pool.d/www.conf

Чего тут писать тема мутная, я делал по краосте пятерочки десяточки

user = nginx
group = nginx 

listen = /run/php/php7.4-fpm.sock


listen.owner = nginx 
listen.group = nginx
listen.mode = 0660


pm = dynamic
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 10
pm.max_requests = 1500

Перестартую его
sudo service php7.4-fpm restart

Ubuntu кстати наровить всунуть новый php, но я его удалял и ставил 7.4

PHP 7.4.30 (cli) (built: Aug  1 2022 15:06:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

Установка MySQL
А к черту старую версию установлю 8мую
sudo apt install mysql-server

Ставлю админ пароль
sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Установка Nginx с http2
http2 настраивается легче чем на CentOS. Новейшую версию nginx достаю по инструкции www.nginx.com/resources/wiki/start/topics/tutorials/install/

vi /etc/apt/sources.list.d/nginx.list
deb https://nginx.org/packages/ubuntu/ jammy nginx
deb-src https://nginx.org/packages/ubuntu/ jammy nginx
sudo apt install nginx

jammy тут это кликуха Ubuntu версии 22

Конечно возникает какаято ошиюбка с ключами

If a W: GPG error: https://nginx.org/packages/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key is encountered during the NGINX repository update, execute the following:

Делаем
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
sudo apt update
sudo apt install nginx

Вместо $key ставим тот ключ который в ошибке вылезает… ну бред какой-то, а за чем он тогда нужен если его весм сразу дают эх

Итого
nginx -v

nginx version: nginx/1.22.0

Стартуем nginx и делаем его стартуемым на загрузке сервера
sudo systemctl start nginx
sudo systemctl enable nginx

Для http2 нужна версия OpenSSL нужна 1.0.2
openssl version
Она уже стоит выше

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022

Вот это все, потом в конфигах nginx надо будет только одно слово написать в двух местах!


Перенос и запуск сайта на WordPress

На старом хосте архивруем всю папку с сайтом
tar -cvf itc.tar ./itcooky.com
Делаем дамп базы
mysqldump -user root -p wpit > ./wpit.sql

Удобным способом скачиваем на новый wget или scp

Разархивруем в папку /usr/local/www/
tar -xvf it.tar.gz

Идем в майскл
mysql -u root -p
Делаем юзера, базу, задаем пароль — у меня имя на все wpit

CREATE DATABASE wpit;
CREATE USER 'wpit'@'localhost' IDENTIFIED BY 'QWErty123!';
GRANT ALL PRIVILEGES ON wpit.* TO 'wpit'@'localhost';
ALTER USER 'wpit'@'localhost' IDENTIFIED WITH mysql_native_password BY 'QWErty123!';
exit

В качиаем базу
mysql -u root -p wpit < wpit.sql

В ./wp-config.php прописываем новый пароль от базы если новый

Создаем конфиг для этого сайта
vi /etc/nginx/conf.d/it.conf

Текст

server {
listen        80;
listen [::]:80;
    server_name www.itcooky.com itcooky.com;
    resolver 8.8.8.8;
  

access_log  off;

root   /usr/local/www/itcooky.com;


location / {
        index  index.php;
}

error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html; 

location ~ \.php$ {
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock; 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. itcooky.com *.itcooky.com;
     if ($invalid_referer) {
        return   403;
    }
}

location ~ /\.ht {
        deny  all;
    }
}

Тут надо прописать в fastcgi_pass то что мы писали в конфиге php-fpm

И тут пока без ssl без http2 рано еще

Перечитваем nginx
service nginx reload

Меняем у своего регистратора DNS на новый для этого сайта IP4 и IP6 и ждем пока они обновились!

Сайт появился на http а на https выдает ошибку все правильно, надо получит обновить сертификаты Lets Encrypt

Ставим
sudo apt install certbot python3-certbot-nginx

И тащим
sudo certbot --nginx -d itcooky.com -d www.itcooky.com

Усе сработало и Lets Encrypt вписал что нужно в кончиг nginx для этого сайта, но только в конце, я это переташил на верх!

server {
  listen [::]:443 ssl http2; # managed by Certbot
  listen 443 ssl http2; # managed by Certbot
	server_name www.itcooky.com itcooky.com;
    resolver 8.8.8.8;
    ssl_certificate /etc/letsencrypt/live/itcooky.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/itcooky.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
access_log  off;
root   /usr/local/www/artmundo.ru;

location / {
    index index.php;
}

error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html; 

location ~ \.php$ {
        fastcgi_pass   unix:/run/php/php7.4-fpm.sock; 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. itcooky.com *.itcooky.com;
     if ($invalid_referer) {
        return   403;
    }
}

location ~ /\.ht {
        deny  all;
    }

}

В строках listen я сам дописал http2 и кажется поменял 80 на 443!

Еще добавляю к этому конфигу еще один чтобы с 80 порта кидалось все на 443

server {
    if ($host = www.itcooky.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = itcooky.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name itcooky.com www.itcooky.com;
    return 301 https://itcooky.com$request_uri;

access_log  off;
}

Тут кстати тоже сертбот влезает свое пишет

Перегружаю nginx и смотрю работает и проходит проверку на http2!

Запуск phpBB
Форум у меня оказался слишком большм чтобы его заархивировать и скачать, поэтому качал напрямую по scp
sudo scp -r root@123.123.123.123:/usr/local/www/itcooky.com/forum ./
- для этого октрыл root'у доступ по ssh
- скачивается все даж то что в символических ссылках
- после скачивания надо все chow'нуть на nginx:nginx

Базу скачиваем, создаем, вливаем как описано выше. Пароль прописываем в ./forum/config.php

Пытаюсь запустит а не запускается ругается на GROUP BY DSC LIMITS

Оказывается это известная фигня, один аддон у меня очень старый (Анвар обнови Images from posts, эх проверил его сайт, а он уже всё эх)
Версия MySQL выше 5.7.сколько стала ругаеться на слово GROUP ей надо ORDER

Советуют в my.cnf добавить

sql_mode = NO_ENGINE_SUBSTITUTIO

Перезагрузил MySQL эффекта не последовало

Потом поменял GROUP на ORDER в тех двух местах в которых ругается, это видно в ошибке и заработало! Сейчас так хорошо работает что не могу уже воспроизвести ошибку!

Вот кстати MySQL сам говорит как исправить это косяк...
WL#8693: Remove the syntax for GROUP BY ASC and DESC
...они, значит, накосячили, а мы меняй теперь одно на другой!

Ставим Sphinx для поиска phpBB
Ставится просто и той самой старенькой версии 2.2
sudo apt-get install sphinxsearch

Делаем и човним нужные директории
mkdir {/usr/local/www/sphinx2/,/usr/www/local/sphinx2/log}
chown -R sphinx:sphinx /usr/www/local/sphinx2

Конфиг берем с форума из админ панели там где поиск sphinx кладем его в /usr/local/www/sphinx2/

И запускаем индексирование первый раз
indexer --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_main
indexer --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_phpbb_87ye287ye823ye82_delta
indexer --rotate --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_delta

это вот как раз форум нам дает 87ye287ye823ye82

Запускаем
searchd --config /usr/local/www/sphinx2/sphinx2.conf

И смотрим вродебы слушает
netstat -tunlp;

tcp        0      0 127.0.0.1:9313          0.0.0.0:*               LISTEN      4961/searchd

Чтобы он сам запускался после перезагрузки надо добавить в
crontab -e

@reboot /usr/bin/sleep 10;/usr/bin/searchd --config  /usr/local/www/sphinx2/sphinx2.conf

если без sleep не запускает, видимо рано слишком

Там же добавляем индексер один раз ночью большой и маленький каждые пять минут

*/5 * * * * indexer --rotate --config /usr/local/www/sphinx2/sphinx2.conf index_phpbb_87ye287ye823ye82_delta >> /usr/local/www/sphinx2/log/indexer.log 2>&1 &
13 3 * * * indexer --rotate --config /usr/local/www/sphinx12/sphinx2.conf index_phpbb_87ye287ye823ye82_main >> /usr/local/www/sphinx2/log/indexer.log 2>&1 &

Ну и все с phpBB

Бэкап баз
Тоже добавляем в
crontab -e

5 1 * * * /usr/bin/mysqldump -u backupuser -pf34f\%34f34fKGG wpit > /usr/local/www/archive/wpit_dayly.sql

тут обратите внимание что % закоменчен \% с голым % комнда не сработает

backupuser создаем так

GRANT SELECT, PROCESS, LOCK TABLES ON *.* TO 'backupuser'@'%' IDENTIFIED BY 'f34f\%34f34fKGG';

раньше не надо было добавлять PROCESS чтобы работало

и еще в крон

35 1 7 * * /bin/cp /usr/local/www/archive/wpit.sql  /usr/local/www/archive/wpit.sql

Просто копия каждого 7го дня будет храниться до следующего 7го дня!

Увеличиваем место на VPS
В Hertzner это легко тут есть Volumes можно в любой момент добавить и потом увеличить если надо

Туда скидываю папку с фотками, и ставлю на них символическую ссылку. В папке где была папка с фотками исполняю
ln -s /mnt/HC_Volume_123123123/foto1 ./foto1


Добавить комментарий

Ваш адрес email не будет опубликован.