Случилось непредвиденное, самый популярный дистрибутив Linux для хостинга сайтов послал всех в жопу и давно послал это я только сейчас ощутил, когда хотел что-то обновить а уже ничего не работает все грохнули. CentOS погубило его родство с Red Hat типа комерчиским Linux’ом и вот они тянули код(надо признать что в обе стороны) из сообщества и продажники сказали нет, всё, хватит и нет больше CentOS… И тут еще у Hetzner цены поднимаются на 10% с сентября для новых клиентов, для старых с 1 января… Всё, всё, надо переезжать ну и куда как ни в Ubuntu!!!
Не первый мой переезд, конечно, и на 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:
Делаем
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
sudo apt update
sudo apt install -y nginx
Итого
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
Добавить комментарий