ITСooky

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

Настройка, переезд, тестирование нового VPS на CentOS 6!

дата 30.04.2016

Тут увидел у своего хостера HC.RU новый тариф на 50 рублей дороже но на 30Gb больше — прикупил, перенес, протестировал!
Test_Page_for_the_Nginx_HTTP_Server_on_EPEL_-_2016-04-23_14.52.28
Начну сразу с тестирования, VPS тестировался без веб нагрузки, Orange PI и типичный Desktop представлены для сравнения!

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

Нам надо установить бэнчмарк
yum install sysbench
тест CPU 1 запускатся коммандой
sysbench --test=cpu --cpu-max-prime=20000 run
Далее увеличиваем колличество потоков
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run
В ответе главный показатель xecution time (avg/stddev) меньше лучше

Для теста дисков надо создать файлы для теста
sysbench --test=fileio --file-total-size=10G prepare
Для VPS размер ставил 10G, для Опельсинки 8G, для Desktopa 100G — говорят надо ставить гораздо больше чем оперативная память
Запускаем тест
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run > test.io
Результат пишим в файл а то, особенно на VPS результата можно не дождаться, по тайм ауту.

И тест MYSQL
Создаем базу
mysql -u root -p -e "create database sbtest"
Наваливаем в неё строки
sysbench --test=oltp --db-driver=mysql --oltp-table-size=1000000 --mysql-db=sbtest --mysql-user=root --mysql-password=rootpass prepare
И запускаем комманду, смотрим на показатель transaction больше лучше
sysbench --test=oltp --db-driver=mysql --oltp-table-size=1000000 --mysql-db=sbtest --mysql-user=root --mysql-password=rootpass --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=1 run
Ну и уведичваю —num-threads= до 8!

Выводы:

— В тесте CPU явно видна польза от количества ядер
— Xeon дорогой не потому что мощный, а потому что серверный-функционально его можно в кластеры объединять и тп, но один на один с i5 он может и проиграть и сильно!
— Скорость на тарифе SSD-3 меньше чем у HDD, про VPS-3 молчу там какакое-то шаманство!

Прогнал этот HDD тест на настоящем SSD(хоть и кастрированном) SunDisk z400s 128Gb конфигурация такая же как и в таблице Desktop но OS Ubuntu 16.04 64 bit, тестовый файл размер 80Gb — результат 17.362Mb/sec вот это похоже на настоящий SSD

— Mysql обидно есть прирост только при увеличение до двух потоков, потом вообще не заметно, только хуже, почему так то…

Настраиваем
Выбрал CentOS, так как FreeBSD не было! Без всяких гламурных панелек, кто их берет интересно?

Первым делом обновляемся
yum update

ставим редактор vi (ну мне надо, привык)
yum install vi

Далее обычно root не заходит прямо по ssh, сначала заходят юзером и дают ему super права. И этого юзера сильно ограничивают в коммандах ставят ему обрезанный shell
useradd user
passwd user

Ставим тот самый шелл
yum install lshell

по умолчанию настройки устраивают я только выключил логи исправив
vi /etc/lshell.conf
сторку на

loglevel        : 0

и разрешаем только su

[default] 
##  a list of the allowed commands or 'all' to allow all commands in user's PATH 
allowed         : ['su'] 

меняем шелл юзеру на новый
chsh -s /usr/bin/lshell user

даем право этому юзеру заходить по ssh
vi /etc/ssh/sshd_config

добавляем строку

AllowUsers user

и запрешаем заходить рутом

#PermitRootLogin no

Перезапускаем SSH
/etc/init.d/sshd restart

Идем далее, всегда надо от чего то отталкиватся, берем первую ссылку в интернете www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-6 и начинаем настраивать… и хотя фамилия автора скорее всего выдумана Этель Свердлов(Яков Михайлович?) установочный скелет работает, а дальше надо по своим знаниям уже добавить!

Устанавливаем Mysql

нам нужна Mysql 5.5 устанавливать его надо из осбого места
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum --enablerepo=remi install mysql mysql-server

перестартуем MYSQL
/etc/init.d/mysqld restart

меняем рут пароль сделав
/usr/bin/mysqladmin -u root password new-password

есть еще установщик запускаем его и вводим там уже пароль от Mysql который только что сделали, отвечаем по своим нуждам — я закрыл все снаружи и убрал анонимного пользоватлея и тестовый доступ
/usr/bin/mysql_secure_installation

перегружаем
/etc/init.d/mysqld restart

Ставим nginx

yum install nginx
/etc/init.d/nginx start

Конфиг дефолтный, елинственно что выключил логи
меняем
vi /etc/nginx/nginx.conf
доводим до вида

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;
worker_processes  2;

error_log  /dev/null crit;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  off;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}

Устанавливаем php-fpm
yum --enablerepo=remi install php-fpm php-mysql

Все советуют поставить в
vi /etc/php.ini
на

cgi.fix_pathinfo=0

Настраиваем

vi /etc/nginx/nginx.conf

Меняем worker processes цифра должна соответвовать штукам ядра количеств

Доводим до такого вида файл
vi /etc/nginx/conf.d/default.conf
вот до такого, где 111.10.1.111 ваш IP

# 
# The default server 
# 
server { 
    listen       111.10.1.111:80; 
    server_name 111.10.1.111; 

    #charset koi8-r; 

    #access_log  logs/host.access.log  main; 

    # Load configuration files for the default server block. 
    include /etc/nginx/default.d/*.conf; 

    location / { 
        root   /usr/share/nginx/html; 
        index  index.php index.html index.htm; 
    } 

    error_page  404              /404.html; 
    location = /404.html { 
        root   /usr/share/nginx/html; 
    } 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page   500 502 503 504  /50x.html; 
    location = /50x.html { 
        root   /usr/share/nginx/html; 
    } 

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
    # 
    #location ~ \.php$ { 
    #    proxy_pass   http://127.0.0.1; 
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    
    location ~ \.php$ { 
        root           /usr/share/nginx/html; 
        fastcgi_pass   unix:/tmp/php.sock; 
        fastcgi_index  index.php; 
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include        fastcgi_params; 
    } 

    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    location ~ /\.ht { 
        deny  all; 
    } 
} 

в servername пока пишим свой IP

/etc/init.d/nginx restart

в
vi /etc/php-fpm.d/www.conf
меняем на, а то там apache ха

user = nginx
group = nginx

и меняем

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

и меняем

listen = /tmp/php.sock

и

pm = static 
pm.max_children = 5 
pm.start_servers = 1 
pm.min_spare_servers = 1 
pm.max_spare_servers = 2 

также делаем что само не сделалось
mkdir /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session

Рестартуем
/etc/init.d/php-fpm restart

Смотрим слушает ли nginx на нужном порту
netstat -tulpn | grep :80
Смотрим процессы, тут и php-fpm будет
ps aux | grep nginx

Делаем php страницу
vi /usr/share/nginx/html/info.php
Добавляем

<?php
phpinfo();
?>

Права на доступ к этому файлу и всем делаем
chmod -R 755 /usr/share/nginx/html/

ВАЖНО:А так же внимание очень важно
В CentOS есть система повышенной безопасноти SELinux на VPS оно отключено, а вот если ставить самому CentOS 6 minimal она по умолчанию включена.

Если вам на сайте нужна папка куда надо писать, например в phpBB3 есть три папки для писания, туда просят поставить права 777. И их ставишь и ничего неработает, говорит нет прав — это немного сводит ума.

А надо исполнить вот еще что, для папки cache ну и для store и file
sudo chcon -t httpd_sys_rw_content_t -Rv /usr/share/nginx/html/forum/php/cache
sudo chcon -t httpd_sys_rw_content_t -Rv /usr/share/nginx/html/forum/php/files
sudo chcon -t httpd_sys_rw_content_t -Rv /usr/share/nginx/html/forum/php/store

Это сурпрец!!!

Переходим на
http://111.10.1.111/info.php

Ура заработало

ЕСЛИ НЕ ЗАРАБОТАЛО: У меня СentOS с настройками от хостера нестандратными. Если вы установили CentOS 6 minimal тон адо еще подправить iptables
Сюда
vi /etc/sysconfig/iptables
добавляем запись, ВАЖНО чтобы она была выше всех такихже записей

-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT

и перезапускаем его
service iptables restart

ЕСЛИ НАДО: Сразу обновим php до 7.2(по умолчанию ставит старую 5-ку) делается это хитро
yum install yum-utils
yum-config-manager --enable remi-php7.2
yum install php

Все есть семерка

Делаем чтобы грузилось на загрузке
/sbin/chkconfig --levels 235 mysqld on
/sbin/chkconfig --levels 235 nginx on
/sbin/chkconfig --levels 235 php-fpm on

и ребутимся
/sbin/reboot -h now
Заработало

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

Пошли дальше

Можете меня лошить, но я буду ставить Полуночного полковника
yum install mc
делаю папку для сайтов
mkdir /usr/www
mkdir /usr/www/itcooky.com

Делаем файл настроек сайта, пока все по умолчанию потом уже во время работы если вилы встанут буду грабли искать
vi /etc/nginx/conf.d/itcookycom.conf
Вставляем

server { 
    listen       80; 
    server_name www.itcooky.com itcooky.com; 

    #charset koi8-r; 

    #access_log  logs/host.access.log  main; 

    location / { 
        root   /usr/www/itcooky.com; 
        index  index.php index.html index.htm; 
    } 

    error_page  404              /404.html; 
    location = /404.html { 
        root   /usr/www/itcooky.com; 
    } 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page   500 502 503 504  /50x.html; 
    location = /50x.html { 
        root   /usr/www/itcooky.com; 
    } 

  
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    
    location ~ \.php$ { 
        root           /usr/www/itcooky.com; 
        fastcgi_pass   unix:/tmp/php.sock; 
        fastcgi_index  index.php; 
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include        fastcgi_params; 
    } 

    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    location ~ /\.ht { 
        deny  all; 
    } 
} 

Теперь надо сходить на старый сайт и скопировать от туда базу MYSQL и файлы сайта на WordPress
На старом хостинге в папке с папкой сайта делаем
tar -cvf itc.tar ./itcooky.com
и делаем дамп базы
mysqldump --user=root --password=ROOTPASSWORD --host=localhost hearbasename > ./wpita.sql

Тащю все это в папку сайта чтобы было доступно по http
mv ./wpita.sql ./itcooky.com/
mv ./itc.tar ./itcooky.com/

На новом хостинге тащим
wget http://itcooky.com/wpita.sql
wget http://itcooky.com/itc.tar

На новом хостинге распаковываем архив
tar -xvf itc.tar
На счет базы, данные имя пользователь пароль лежат в файле wp-config.php для WordPress берем эт данные для новой базы на новом сервере

А поставимка phpmyadmin
yum install phpmyadmin
или
yum --enablerepo=remi install phpMyAdmin
идем в папку сайта который открывается по ip, потому что это единсвенное место которое пока отзывается
cd /usr/share/nginx/html
ln -s /usr/share/phpMyAdmin phpMyAdmin

в
vi /etc/phpMyAdmin/config.inc.php
надо исправить строку с extentions там mysqli а надо mysql
и blowfish_secret я писал но оно все равно просит

Заходим в вебинтерфейс phpMyAdmin…

Если ругается на session_start(): open(SESSION_FILE, O_RDWR) failed: делаем
chmod 777 /var/lib/php/session/

Потом заходим в mysql
mysql -u root -p
делаем юзера со старым имянем и паролем чи базу со старым названием, чтобы подстроится под те настройки чтобыли
CREATE DATABASE wpit;
GRANT ALL PRIVILEGES ON wpit.* TO 'wpit'@'localhost' IDENTIFIED BY 'pAs$VV0rd';

выходим
exit
делаем
mysql -u root -pROOTPASSWORD wpit < wpita.sql

Вот и все! Что удивительно почти все по умолчанию, MYSQL вообще дефолтный, старый фарш настроек my.cnf со старого хостинга не перетаскивал - и летает пока всё!!!

UPD SSL через Let’s Encrypt is a free, automated, and open Certificate Authority
Разочаровался в CloudFlare в бесплатном(читай доступном) варианте не рабочий сервис из-за Роскомпозора. Один IP на сотни сайтов, из них обычно один уже заблокирован в России, администрация CloudFlare нереагирует на обращения, сменить IP никак только за деньги... а вот от спамеров хорошо защищал, после отключения на форум сроазу прорвались уроды, и SSL включался одной кнопкой!

Однако, после угроз Google помечать все сайты без SSL, SSL становится обязательным, наезд чисто конкртено реальный, в поиске например от itcooky мало что найдешь и ваше не индексируется. Единственный нормальный(принимающий всеми браузерами) сертификат SSL дает Let’s Encrypt is a free, automated, and open Certificate Authority на этот сайт можно не заходить, регистрироваться не надо, просто дает и все, донаты принимает(прям хотел занясти 5 доллоров, но сказали нет братан миним 10, хотел не писать свое имя и почту, но сказали нет братан надо, итит).

Как ставить на CentOS 6 много советов, у меня сработал сборник из оных
делаем папочку любую и там исполняем
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto --nginx

у меня потянуло куча всего выдало ошибку в конце, но не важно

Далее обновляем nginx должен быть свежий
yum update nginx

И собственно вся, для каждого своего сайта делаем
./certbot-auto certonly --webroot --agree-tos --email meganus@itcooky.com -w /usr/www/itcooky.com -d itcooky.com -d www.itcooky.com

В старом конфиге меняю голову, добовляю вот это

server {
listen       111.10.1.111:443 ssl;
    server_name www.shakira.ru shakira.ru;
    ssl_certificate /etc/letsencrypt/live/itcooky.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/itcooky.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/itcooky.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests";

Еще создаю один файл для перенаправления http на https назову его ssl.conf

server {
    listen 111.10.1.111:80;
    server_name itcooky.com www.itcooky.com ;
    return 301 https://itcooky.com$request_uri;
}

А так же если в DNS для ващего домена резолвится еще и IP6 надо обязательно и для него конфиг прописать, потому что Let’s Encrypt по умолчанию берет сначала его, и если ошибка это может помешать обновлению

ВНИМАНИЕ: Вот так писать нельзя, ни в коем случае. Везде надо прописывать ip4 или ip6

listen       443 ssl;

Это все лежит в /etc/nginx/conf.d/

Далее перегружаем(на reload не реагирует кстати) Nginx конфиг
/sbin/service nginx restart
И бац все работает, все браузеры показывают замки, сайт стал надежным!!!

Сертификат надо обновлять каждые 90 дней, делается это автоматически, в крон вставляю

45 */12 * * * /lc/certbot-auto renew --quiet

Кто-то еще делает после этого reload nginx, а кто-то нет... посмотрим через 90 дней надо ли!

ПОМНИТЕ: Если у вас что-то неожиданно на CentOS не работает то это скорее всего из-за системы безопасности SELinux - не хотите заморачиваться отключити её совсем, Хостеры так и делают 🙂
Реальный пример тут Ставим на форум phpBB3 супер быстрый поиск Sphinx!в конце


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

Ваш адрес email не будет опубликован. Обязательные поля помечены *