Да здравствует Ябунта!

Да, настал момент! Попиарю немного вот этого хостера, ибо есть за что. Переустановил ОС на VDS, поставил новенькую Ubuntu-16.04 c nginx + php-fpm (про прирост производительности можно не говорить, это факт)


Хочется отметить, что здесь уже из «коробки» идет php7, поддержка APLN (Application-Layer Protocol Negotiation), — способа, необходимого для использования HTTP/2 протокола, а именно для переключения с обычного TLS на HTTP2. И nginx собран тут также из «коробки» с OpenSSL версии 1.0.2+, что приятно радует глаз, когда в хроме горит синий значок специального расширения, проверяющего коннект по http2. До этого собирал вручную из исходников php7 и nginx 1.11.1 с OpenSSl 1.0.2h, что естественно не очень удобно (на всякий случай закину сюда инфу об этом) и к тому же обновляя пакеты в системе, есть риск потерять все сборки или наломать дров, как я :). Поэтому переустановка ОС и восстановление своих проектов для меня оказалась проще.

Делаем бэкап

А для того, чтобы сделать бэкап системы, проектов и всех баз данных своих приложении, воспользуемся хорошим скриптом вот отсюда. В терминале запускаем: backup.sh . Закидываем туда, где организовано у вас хранение бэкапов, например у меня это ЯД. Продублирую код Олега:

#!/bin/bash

#################################################
# Created by olegpro.ru
# Author: Oleg Maksimenko
# Date: 04.01.2015 19:33
#################################################

# {{{ config
mysql_host="localhost"
mysql_user="root"
mysql_pass="password"

dir_backup="/backup/daily/"
dir_sites="/var/www/"

date_folder=`date +%Y-%m-%d`

days_keep_backup=5
# }}}

# {{{ remove old backups
find ${dir_backup} -maxdepth 1 -ctime +$[${days_keep_backup}-1] -exec rm -rf {} \; >/dev/null 2>&1
# }}}

# {{{ create folder backup
if ! [ -d ${dir_backup}${date_folder}/ ]; then
    mkdir -p ${dir_backup}${date_folder}/
    chmod 700 ${dir_backup}${date_folder}/
fi
# }}}

# {{{ mysql dump
if ! [ -d ${dir_backup}${date_folder}/mysql/ ]; then
    mkdir ${dir_backup}${date_folder}/mysql/
fi

for db_name in `mysql -u${mysql_user} -p${mysql_pass} -h${mysql_host} -e "show databases;" | tr -d "| " | grep -Ev "(Database|information_schema|performance_schema)"`
do
    if [[ ${db_name} != "information_schema" ]] && [[ ${db_name} != _* ]] ; then
        echo "Dumping database: ${db_name}"
        mysqldump -u${mysql_user} -p${mysql_pass} -h${mysql_host} --events ${db_name} > ${dir_backup}${date_folder}/mysql/${db_name}.sql
    fi
done
# }}}

# {{{ files sites backup
if ! [ -d ${dir_backup}${date_folder}/home/ ]; then
    mkdir ${dir_backup}${date_folder}/home/
fi

cd ${dir_sites}

for site_folder in `ls ${dir_sites} | grep -Ev "*.(html|php)"`
do
    echo "Dumping site: ${site_folder}"
    tar cpfP ${dir_backup}${date_folder}/home/${site_folder}.tar ${site_folder}/ --exclude "logs" "bitrix/updates" --exclude "bitrix/backup" --exclude "bitrix/cache" --exclude "bitrix/managed_cache" --exclude "bitrix/stack_cache" --exclude "bitrix/html_pages" --exclude "upload/tmp" --exclude "upload/resize_cache"
done
# }}}

# {{{ etc folder backup
if ! [ -d ${dir_backup}${date_folder}/etc/ ]; then
    mkdir ${dir_backup}${date_folder}/etc/
fi

echo "Dumping /etc/"
tar cpfP ${dir_backup}${date_folder}/etc/etc.tar /etc/
# }}}

Устанавливаем isp manager, вот вики по этому вопросу.

Прикручиваем SSL/HTTP2 + Nginx

Бесплатный ssl выдается здесь.

Важно! Обновление от 9.02. Сам недавно узнал, но сертификаты от этой компании гуглом уже банятся, так что если вы получили сертификат до 21.10.16 можете радоваться еще, но если после то уже нет :) Вот ссылка на источник: https://xakep.ru/2016/11/02/google-bans-wosign/

Нужно подтвердить права на домен, на сайте, но перед этим пройти аутентификацию по e-mail. После этого загрузить CSR-запрос там (где найти уже разберетесь), который генерируем у себя:

openssl req -new -newkey rsa:4096 -nodes -keyout /etc/ssl/site.com.key -out /etc/ssl/site.com.csr

В директории etc/ssl получим .csr и .key, копируем все содержимое site.com.csr в окно ввода CSR на startssl, после чего получаем пачку сертификатов для разных веб-серверов. В данном случае у меня nginx+php-fpm, поэтому покажу на примере конфига nginx для интересующего домена. Но перед этим выполним еще одну команду, которая пригодится для усиления шифрования, а следовательно и защиты вашего сайта:

openssl dhparam -out /etc/ssl/dh2048.pem 2048

В самом исп устанавливаем себе в качестве основного веб-сервера nginx (как я сказал уже, в новой убунте, он по умолчанию со всеми «плюшками»), ставим менеджер процессов FastCGI для PHP, PHP-FPM, Apache вырубаем вообще. Создаем нового пользователя в системе, даем ему все привелегии, в частности «Может использовать SSL», «Может использовать PHP в режиме FastCGI (Nginx + PHP-FPM)», Тип обработчика PHP: FastCGI (Nginx + PHP-FPM). В директорию /etc/nginx/ssl переносим наш .key и файл сертификата .crt, полученный из скаченного архива. Создадим еще ssl.pass в этой папке с любым паролем. Создаем домен в исп и открываем конфиг через редактор, пишем в общем случае каркас для ssl и http2, все что в ... может относится к тому какую cms/фреймворк может использовать ваш сайт, а значит быть разным для разных систем:

#user 'user' virtual host 'site.com' configuration file
 
server {
        listen *:80;
        server_name site.com;
        return 301 https://$server_name$request_uri;  # enforce https
}
 
server {
        listen *:443 ssl http2;
        server_name site.com;
 
        # Устанавливать Keep-Alive соединения с посетителями
        keepalive_timeout               60 60;
         
        # Отдавать предпочтение шифрам, заданным на сервере
        ssl_prefer_server_ciphers on;
 
        # Установка длительности TLS сессии в 2 минуты
        #ssl_session_cache shared:TLS:2m;
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;
         
        ssl_password_file /etc/nginx/ssl/ssl.pass;
 
        # Задание файла, содержащего сертификат сайта и сертификат УЦ
        ssl_certificate /etc/nginx/ssl/1_site.com_bundle.crt;
 
        # Указание закрытого ключа
        ssl_certificate_key /etc/nginx/ssl/site.com.key;
 
        # Для усиления криптостойкости необходимо использовать файл параметров Диффи — Хеллмана с длиной не менее 2048 бит.
        ssl_dhparam /etc/ssl/dh2048.pem;
            
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
 
        # Наборы шифров, данный набор включает forward secrecy
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 
        # браузер будет автоматически перенаправлять на https, если пользователь зашел на сайт через http
        add_header Strict-Transport-Security 'max-age=31536000';
 
        # OCSP Stapling ---
        # fetch OCSP records from URL in ssl_certificate and cache them
        ssl_stapling on;
         
        ssl_stapling_verify on;
 
        charset UTF-8;
     
        disable_symlinks if_not_owner from=$root_path;
        index index.html index.php;
     
        root $root_path;
        set $root_path /var/www/user/data/www/site.com;
     
        access_log off ;
        error_log /var/www/httpd-logs/site.com.error.log notice;
     
        include /etc/nginx/vhosts-includes/*.conf;
        include /etc/nginx/vhosts-resources/site.com/*.conf;
 
        # включаем сжатие gzip
        gzip on;
        gzip_disable 'msie6';
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
         
        # запрет для скрытых файлов
        location ~ /\. {
            deny all;
        }
         
        # ...
 
        # кеширование статики
        location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|js|css|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
            access_log off;
            log_not_found off;
            expires 7d;
        }
 
        location ~ \.php$ {
            fastcgi_index index.php;
            fastcgi_pass unix:/var/www/php-fpm/user.sock;
            fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
            fastcgi_param PHP_ADMIN_VALUE 'sendmail_path = /usr/sbin/sendmail -t -i -f your@site.com';
            try_files $uri =404;
            include fastcgi_params;
        }
 
        # repositories
        location ~* /\.(svn|hg|git) {
                deny all;
                access_log off;
                log_not_found off;
        }
         
        ssi on;
        listen x.x.x.x:80;
}

Решающей здесь является строка listen *:443 ssl http2; которая запускает шифрование и включает http2 протокол. Вот и все. Все управление идет через исп (90%, — php, конфиги, WWW, бд, резервное копирование и т. д.), никаких танцов с бубном делать не надо, идти в терминал, чего то там делать, компилировать, пересобирать новые версии, фиксировать пакеты, дабы они не затерлись при apt-get update & upgrade и т. д. Но если не терпится что то собрать, то, можно собрать php7. Например, я пользовался различными мануалами, что находил в интернете, по сборке php7, там же можно и по сборке nginx найти.

Ошибка в редакторе phpStorm

После того, как все настроил, подняв все свои ключевые проекты, подключаясь в IDE (у меня версия 8.0.1) по sftp к серверу через 22 порт, вываливалась ошибка: Session.connect:java.io.IOException: End of IO Stream Read. Помог только вот такой java-пакет — jsch-0.1.54.jar (гугл даст ссылку дл скачки). Положить нужно в \JetBrains\PhpStorm 8.0.1\plugins\webDeployment\lib и перезапустить Шторм.

Дополнительная информация по этому в обсуждении здесь: youtrack.jetbrains.com/issue/WI-9741



Похожие заметки:

Блог

Мой старый блог на вордпресс

Открыть здесь

262

Запуск блога

Добро пожаловать в мой блог

Открыть здесь

220


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии


5
avatar

Павел сказал 02-11-2017 в 12:25


Добрый день, Роман, Вы указали, что из коробки убунта у этого хостера со всеми плюшками, которые указаны в статье - попробовал вчера их услуги, но они предлагают чистую ОС, подскажите пожалуйста как поставить как сказано у Вас? Спасибо.


avatar

Админ

Роман Жариков сказал 02-11-2017 в 18:40

   В ответ на комментарии автора Павел

Добрый вечер, Павел!

Не совсем понятен ваш вопрос. Всё верно, убунту нужно просто установить (возможно даже с установленным ISP Manager панелью), не скажу уже точно как там, но в статье есть ссылка на вики про установку панели администрирования сервером вручную.

Насчет SSL рекомендую почитать про Let’sEncrypt и настройку автоматического продления сертификатов. Насчет HTTP/2, сжатия и прочей оптимизации, все это прописывается в конфиге nginx (пример конфига в этой статье), который как и php-fpm (и версию php7) легко выбрать и установить настройки из панели. Вообще практически всё нужное вам можно настроить из isp, в частности, вроде даже модуль Let’sEncrypt, настроить кэширование, бэкапы и многое другое


avatar

Павел сказал 02-11-2017 в 18:48

   В ответ на комментарии автора Роман Жариков

"Хочется отметить, что здесь уже из «коробки» идет php7, поддержка APLN (Application-Layer Protocol Negotiation), — способа, необходимого для использования HTTP/2 протокола, а именно для переключения с обычного TLS на HTTP2. И nginx собран тут также из «коробки» с OpenSSL версии 1.0.2+, что приятно радует глаз, когда в хроме горит синий значок специального расширения, проверяющего коннект по http2."

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


avatar

Админ

Роман Жариков сказал 02-11-2017 в 18:52

   В ответ на комментарии автора Павел

в ubuntu сборка идет со всеми указанными модулями и достаточно просто установить

Всё верно, но еще воспользоваться этим мануалом под свои потребности.


avatar

Павел сказал 02-11-2017 в 18:59

   В ответ на комментарии автора Роман Жариков

Она там голая идет)

Ubuntu-16.04-i686-minimal Ubuntu-16.04-x86_64-minimal