Создаем ECDSA сертификаты Let’s Encrypt

Дата: 21.07.2016

Как показывает практика, использование ECDSA сертификатов позволяет добиться примерно в два раз большего количества соединений на одной аппаратной платформе. К недостаткам использования ECDSA сертификатов следует отнести проблему с поддержкой браузерами. Но данная проблема легко решается если мы будем использовать ECDSA и RSA сертификаты одновременно.

Перед тем как начать проверьте, что в системе установлен git, в противном случае необходимо запустить установку командой:

apt-get install git

Выберите каталог, в который будут загружены файлы клиента Let’s Encrypt. В этой статье я буду использовать каталог /usr/local. Переходим в указанный каталог, а затем загружаем и запускаем клиент Let’s Encrypt:

cd /usr/local
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

Последняя команда установит все необходимые пакеты и выведет справочную информацию для работы с клиентом. Далее вам нужно создать каталог для файлов ключа и сертификата домена:

mkdir -p /usr/local/letsencrypt/live-ecdsa/codebeer.ru/letmp

Перед тем как создать файл ключа, важно правильно выбрать тип кривой. Большинство современных браузеров поддерживает кривые secp256r1, secp384r1, secp521r1. Я буду использовать 256-битная кривую prime256v1, которая по современным меркам обеспечивает достаточной секретности. Список кривых OpenSSL можно вывести командой:

openssl ecparam -list_curves

Создаем приватный ключ:

cd /usr/local/letsencrypt/live-ecdsa/codebeer.ru
openssl ecparam -genkey -name secp256r1 > key-256r1.pem

Теперь создаем свой CSR:

openssl req -new -sha256 -key key-256r1.pem -subj "/CN=codebeer.ru" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:codebeer.ru,DNS:www.codebeer.ru")) -outform der -out csr-256r1.der

Переходим в каталог letmp и создаем ECDSA Let’s Encrypt сертификат:

cd letmp
/usr/local/letsencrypt/letsencrypt-auto certonly -a webroot --email webmaster@codebeer.ru --webroot-path /www/codebeer.ru/ --csr /usr/local/letsencrypt/live-ecdsa/codebeer.ru/csr-256r1.der --renew-by-default --agree-tos

Если вы используете веб-сервер Nginx, то во время создания сертификата клиент Let’s Encrypt вы можете получить такую ошибку:

 Failed authorization procedure. www.codebeer.ru (http-01): urn:acme:error:unauth orized :: The client lacks sufficient authorization :: Invalid response from htt p://www.codebeer.ru/.well-known/acme-challenge/oVRUfF1DISR8zRpq1Vju4C7XrYm2YULSe 5TVRfmGy64: "<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>", codebeer.ru (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://codebeer.ru/.well -known/acme-challenge/yKovcd-Eemc6ezWUWNKiL3MKgs6htk06lfuQmYeBwdA: "<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>"

IMPORTANT NOTES:
 - The following errors were reported by the server:

 Domain: www.codebeer.ru
 Type: unauthorized
 Detail: Invalid response from
 http://www.codebeer.ru/.well-known/acme-challenge/oVRUfF1DISR8zRpq1Vju4C7XrYm 2YULSe5TVRfmGy64:
 "<html>
 <head><title>403 Forbidden</title></head>
 <body bgcolor="white">
 <center><h1>403 Forbidden</h1></center>
 <hr><center>"

 Domain: codebeer.ru
 Type: unauthorized
 Detail: Invalid response from
 http://codebeer.ru/.well-known/acme-challenge/yKovcd-Eemc6ezWUWNKiL3MKgs6htk0 6lfuQmYeBwdA:
 "<html>
 <head><title>403 Forbidden</title></head>
 <body bgcolor="white">
 <center><h1>403 Forbidden</h1></center>
 <hr><center>"

 To fix these errors, please make sure that your domain name was
 entered correctly and the DNS A record(s) for that domain
 contain(s) the right IP address.

В этом случае вам нужно добавить в конфиг виртуального следующие строки:

location ~ /.well-known {
    allow all;
}

Если все прошло успешно, в каталоге letmp появятся следующие файлы:

0000_cert.pem  0000_chain.pem  0001_chain.pem

Копируем их содержимое в один файл:

cat 0001* > /usr/local/letsencrypt/live-ecdsa/codebeer.ru/chain.pem

Теперь необходимо указать путь к сертификату и ключу в конфиге nginx:

ssl_certificate /usr/local/letsencrypt/live-ecdsa/codebeer.ru/chain.pem;
ssl_certificate_key /usr/local/letsencrypt/live-ecdsa/codebeer.ru/key-256r1.pem;

Удалить все таблицы из базы MySQL

Дата: 24.06.2016Метки:

Во время работы с MySQL может возникнуть необходимость удалить сразу все таблицы из базы. С такой задачей приходится сталкиваться достаточно редко. Поэтому чаще всего для удаления таблицы используют команду drop table, а затем через запятую перечисляют список всех таблиц. Когда нужно удалить не один десяток таблиц, данный метод будет не самым лучшим выбором.

drop table table1, table2, table3;

Поэтому если таблиц много, то удобнее всего удалить сразу всю базу целиком. Проблема заключается в том, что затем вам придется снова создать эту базу. А с этим могут возникнуть трудности, если у вас нет доступа к учетной записи пользователя root.

drop database database_name;

Как быть и что делать в этой ситуации? Самый простой способ сразу удалить все таблицы из базы MySQL — использовать утилиту mysqldump:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

Вместо переменных, которые указаны в квадратных скобках, вам необходимо указать свои данные.

Изменить пароль пользователя MySQL

Дата: 24.06.2016Метки:

Небольшая заметка на тему как изменить пароль пользователя MySQL. Мне не часто приходится менять пароли, но решил добавить эту заметку связи с тем, что даже для такой простого действия MySQL есть несколько решений. Для начала из под консоли сервера выполните команду:

mysql -uroot -p

Чтобы изменить свой пароль, а точнее пароль пользователя под которым выполнена авторизация, в консоли MySQL нужно просто выполнить команду:

SET PASSWORD = PASSWORD('пароль')

Когда необходимо изменить пароль для другого пользователя MySQL, нужно использовать команду:

SET PASSWORD FOR 'mysqluser'@'localhost' = PASSWORD('пароль');
SET PASSWORD FOR 'mysqluser'@'%' = PASSWORD('пароль');

Первая команда отличается от второй тем, что пользователю mysqluser будет разрешена авторизация только с localhost. В плане безопасности это более предпочтительный вариант.

Аналогичное действие можно выполнить с помощью запроса SQL:

UPDATE mysql.user SET Password=PASSWORD('пароль') WHERE User='mysqluser' AND Host='localhost';
FLUSH PRIVILEGES;

Сохранить изображение в PDF на C#

Дата: 23.03.2016Метки:

Сегодня расскажу как написать простую программу на C#, которая будет выполнять преобразование изображений в PDF. Все началось с того, что мне понадобилось перевести в PDF большое количество изображений. Нужно было группировать и сохранять изображения в отдельный PDF-документ. Для этого я попытался использовать готовые решения, но несмотря на кажущуюся простоту, процесс быстро утомлял и требовал достаточно много времени.

Я уже давно не занимаюсь разработкой на C#, поэтому для конвертации изображений в PDF взял первую попавшуюся мне библиотеку — iTextSharp. Ничего не могу сказать про ее возможности, я использовал только базовый функционал. Но в плане производительности библиотека зарекомендовала себя вполне неплохо.

Создайте новый проект и подключите библиотеку itextsharp.dll. Укажите в программе пространства имен:

using iTextSharp;
using iTextSharp.text.pdf;

Для своей задачи я использовал группировку файлов по маске на основе названия файла. Для лучшей наглядности, приведу самый простой вариант, когда необходимо преобразовать в PDF все изображения. При необходимости вы сможете быстро переписать этот код под свои потребности.

Для начала запишем в массив путь ко всем изображениям в каталоге. Чтобы получить список только файлов изображений, создадим специальный фильтр на основе расширения файла:

string folder;
string[] images;

DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
    folder = folderBrowserDialog1.SelectedPath;
    images = Directory.GetFiles(folder);

    var files = Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
               .Where(s => s.EndsWith(".jpg") || s.EndsWith(".tif"));
    textBox1.Text = folderBrowserDialog1.SelectedPath;
}

Далее идет код для преобразования изображений в PDF:

private void ImgToPdf(string folder, string[] images)
{
    // Создаем документ
    var document = new Document(iTextSharp.text.PageSize.A4, 25, 25, 25, 25);
    using (var stream = new FileStream(folder + "\\document.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
    {
        PdfWriter.GetInstance(document, stream);
        document.Open();

        // Проходим по всем изображениям в каталоге
        foreach (var image in images)
            {
                using (var imageStream = new FileStream(image, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    var page = iTextSharp.text.Image.GetInstance(imageStream);

                    // Размеры изображения
                    float width = page.Width;
                    float height = page.Height;

                    if (width < height)
                    {
                        // Книжная
                        document.SetPageSize(iTextSharp.text.PageSize.A4);
                    }
                    else
                    {
                        // Альбомная
                        document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
                    }

                    document.NewPage();

                    // Масштабируем размеры изображения под параметры страницы
                    if (width < height)
                    {
                        // Для книжной ориентации
                        if (page.Height > iTextSharp.text.PageSize.A4.Height - 25)
                        {
                            page.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
                        }
                        else if (page.Width > iTextSharp.text.PageSize.A4.Width - 25)
                        {
                            page.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
                        }
                    }
                    else
                    {
                        // Для альбомной ориентации
                        if (page.Height > iTextSharp.text.PageSize.A4.Height - 25)
                        {
                            page.ScaleToFit(iTextSharp.text.PageSize.A4.Height - 25, iTextSharp.text.PageSize.A4.Width - 25);
                        }
                        else if (page.Width > iTextSharp.text.PageSize.A4.Width - 25)
                        {
                            page.ScaleToFit(iTextSharp.text.PageSize.A4.Height - 25, iTextSharp.text.PageSize.A4.Width - 25);
                        }
                    }
                    // Добавляем страницу в документ
                    page.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
                    document.Add(page);
            }
        }

        document.Close();
    }
}

Для вызова функции преобразования изображений в PDF используйте код:

ImgToPdf(folder, images);

Чтобы уменьшить размер PDF-файлов на выходе, можно добавить код для сжатия изображений. Но об этом постараюсь написать в следующей статье.

Тест микро-сервера Scaleway

Вчера Scaleway обновил линейку тарифов на свои серверы. Теперь, кроме arm архитектуры можно заказать сервер на базе процессора Intel Avoton. Про существование Scaleway мне известно с момента его основания, но из-за процессоров arm для меня он был практически бесполезен. Но теперь появилась поддержка x86-64, и я не удержался протестировать новые серверы.

Начну с бенчмарка UnixBench, запущенного на сервере со следующими характеристиками: 4 Cores, 8GB RAM, 50GB SSD. В тарифной линейке Scaleway просто указывает количество ядер процессора и при этом не акцентирует внимание на его модели.

Если вникнуть в детали, сервер использует процессор Atom C2550. Лично мне очень нравятся процессоры Avoton. В качестве хранилища Scaleway использует nbd-сервер, со всеми вытекающими из этого недостатками. Если использовать утилиту dd, скорость записи на диск составляет около 150 MB/s. С результатами теста UnixBench вы можете ознакомится ниже.

   BYTE UNIX Benchmarks (Version 5.1.3)

   System: scw-e65790: GNU/Linux
   OS: GNU/Linux -- 4.4.4-std-3 -- #1 SMP Tue Mar 8 17:31:34 UTC 2016
   Machine: x86_64 (unknown)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Atom(TM) CPU C2550 @ 2.40GHz (4787.8 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 1: Intel(R) Atom(TM) CPU C2550 @ 2.40GHz (4787.8 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 2: Intel(R) Atom(TM) CPU C2550 @ 2.40GHz (4787.8 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 3: Intel(R) Atom(TM) CPU C2550 @ 2.40GHz (4787.8 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   20:14:29 up 8 min,  1 user,  load average: 0.42, 0.42, 0.20; runlevel 3

------------------------------------------------------------------------
Benchmark Run: Tue Mar 08 2016 20:14:29 - 20:42:23
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       12023541.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1997.5 MWIPS (10.0 s, 7 samples)
Execl Throughput                               2948.7 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        466822.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          130023.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1076922.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1181371.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 171680.1 lps   (10.0 s, 7 samples)
Process Creation                               6692.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4089.8 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1415.1 lpm   (60.0 s, 2 samples)
System Call Overhead                        1715644.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   12023541.2   1030.3
Double-Precision Whetstone                       55.0       1997.5    363.2
Execl Throughput                                 43.0       2948.7    685.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     466822.8   1178.8
File Copy 256 bufsize 500 maxblocks            1655.0     130023.7    785.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    1076922.4   1856.8
Pipe Throughput                               12440.0    1181371.1    949.7
Pipe-based Context Switching                   4000.0     171680.1    429.2
Process Creation                                126.0       6692.0    531.1
Shell Scripts (1 concurrent)                     42.4       4089.8    964.6
Shell Scripts (8 concurrent)                      6.0       1415.1   2358.5
System Call Overhead                          15000.0    1715644.4   1143.8
                                                                   ========
System Benchmarks Index Score                                         890.5

------------------------------------------------------------------------
Benchmark Run: Tue Mar 08 2016 20:42:23 - 21:10:19
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       48086188.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     7983.9 MWIPS (10.1 s, 7 samples)
Execl Throughput                               8619.6 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        507421.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          144153.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1306977.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             4696577.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 649011.6 lps   (10.0 s, 7 samples)
Process Creation                              21121.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  11345.8 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1748.2 lpm   (60.1 s, 2 samples)
System Call Overhead                        4611936.7 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   48086188.5   4120.5
Double-Precision Whetstone                       55.0       7983.9   1451.6
Execl Throughput                                 43.0       8619.6   2004.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     507421.4   1281.4
File Copy 256 bufsize 500 maxblocks            1655.0     144153.5    871.0
File Copy 4096 bufsize 8000 maxblocks          5800.0    1306977.4   2253.4
Pipe Throughput                               12440.0    4696577.4   3775.4
Pipe-based Context Switching                   4000.0     649011.6   1622.5
Process Creation                                126.0      21121.3   1676.3
Shell Scripts (1 concurrent)                     42.4      11345.8   2675.9
Shell Scripts (8 concurrent)                      6.0       1748.2   2913.7
System Call Overhead                          15000.0    4611936.7   3074.6
                                                                   ========
System Benchmarks Index Score                                        2101.6

UnixBench выдал результат в 2101 балл. Следует признать, что для выделенного сервера это достаточно скромный показатель. Следует отметить, что за свою цену процессор имеет хорошую производительность, а итоговый результат можно объяснить посредственной скоростью работы файловой системы.

Пользуясь моментом, решил заодно протестировать новый VPS от Scaleway, который судя по цене 2.99 явно позиционирует себя как конкурент OVH. Для работы виртуального сервера выделено 2 ядра Atom C2750, 2GB RAM и SSD-хранилище объемом в 50Gb. Скорость записи на диск аналогична выделенному серверу.

   BYTE UNIX Benchmarks (Version 5.1.3)

   System: scw-8d1a9f: GNU/Linux
   OS: GNU/Linux -- 4.4.4-std-3 -- #1 SMP Tue Mar 8 17:31:34 UTC 2016
   Machine: x86_64 (unknown)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Atom(TM) CPU C2750 @ 2.40GHz (4787.8 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
   CPU 1: Intel(R) Atom(TM) CPU C2750 @ 2.40GHz (4787.8 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
   11:41:32 up 0 min,  1 user,  load average: 0.00, 0.00, 0.00; runlevel 3

------------------------------------------------------------------------
Benchmark Run: Wed Mar 09 2016 11:41:32 - 12:09:24
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       11997789.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1988.9 MWIPS (9.9 s, 7 samples)
Execl Throughput                               2725.6 lps   (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        488226.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          137303.1 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1155855.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1172252.5 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  71710.5 lps   (10.0 s, 7 samples)
Process Creation                               4063.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3872.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    852.6 lpm   (60.0 s, 2 samples)
System Call Overhead                        1710983.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   11997789.1   1028.1
Double-Precision Whetstone                       55.0       1988.9    361.6
Execl Throughput                                 43.0       2725.6    633.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     488226.0   1232.9
File Copy 256 bufsize 500 maxblocks            1655.0     137303.1    829.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    1155855.2   1992.9
Pipe Throughput                               12440.0    1172252.5    942.3
Pipe-based Context Switching                   4000.0      71710.5    179.3
Process Creation                                126.0       4063.9    322.5
Shell Scripts (1 concurrent)                     42.4       3872.9    913.4
Shell Scripts (8 concurrent)                      6.0        852.6   1421.0
System Call Overhead                          15000.0    1710983.2   1140.7
                                                                   ========
System Benchmarks Index Score                                         762.7

------------------------------------------------------------------------
Benchmark Run: Wed Mar 09 2016 12:09:24 - 12:37:16
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables       24101165.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3977.8 MWIPS (9.9 s, 7 samples)
Execl Throughput                               4615.2 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        507579.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          146215.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1427126.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2339280.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 220652.3 lps   (10.0 s, 7 samples)
Process Creation                              11975.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6292.7 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    884.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        2695262.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   24101165.8   2065.2
Double-Precision Whetstone                       55.0       3977.8    723.2
Execl Throughput                                 43.0       4615.2   1073.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     507579.1   1281.8
File Copy 256 bufsize 500 maxblocks            1655.0     146215.2    883.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    1427126.4   2460.6
Pipe Throughput                               12440.0    2339280.4   1880.5
Pipe-based Context Switching                   4000.0     220652.3    551.6
Process Creation                                126.0      11975.4    950.4
Shell Scripts (1 concurrent)                     42.4       6292.7   1484.1
Shell Scripts (8 concurrent)                      6.0        884.6   1474.3
System Call Overhead                          15000.0    2695262.1   1796.8
                                                                   ========
System Benchmarks Index Score                                        1268.2

К дополнительным возможностям, которые выделяют Scaleway на фоне конкурентов, можно отнести гибкость в управлении томами и ip-адресами. Вы можете легко перенести ip или хранилище одного сервера к другому и при необходимости изменить ip сервера. Если вы решите заказать сервер на базе Atom, я вам советую лучше обратить внимание на сервер DEDIBOX XC.

Установка UnixBench в Debian

Недавно я написал свой обзор выделенный сервер от Kimsufi. В этот раз я протестирую VPS от OVH для того чтобы иметь возможность адекватно сравнить производительности VPS и микро-сервера на базе процессора Atom N2800. Ну и заодно, пользуясь случаем решил отдельно упомянуть о том как установить UnixBench в Debian для того чтобы протестировать производительность сервера.

Сразу после установки, на чистой системе для запуска UnixBench в Debian необходимо установить следующий набор пакетов:

apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules gcc make

Далее скачиваем и распаковываем архив с файлами UnixBench:

wget http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
tar xvf UnixBench5.1.3.tgz

Для запуска программы выполните команды ниже:

cd UnixBench
./Run

Ниже привожу результаты теста UnixBench на VPS SSD 1:

1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       28881574.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3758.7 MWIPS (9.7 s, 7 samples)
Execl Throughput                               6423.7 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1100112.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          300976.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2152804.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2058718.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 390629.5 lps   (10.0 s, 7 samples)
Process Creation                              17677.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   8510.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1087.0 lpm   (60.0 s, 2 samples)
System Call Overhead                        4052402.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   28881574.8   2474.9
Double-Precision Whetstone                       55.0       3758.7    683.4
Execl Throughput                                 43.0       6423.7   1493.9
File Copy 1024 bufsize 2000 maxblocks          3960.0    1100112.0   2778.1
File Copy 256 bufsize 500 maxblocks            1655.0     300976.0   1818.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    2152804.6   3711.7
Pipe Throughput                               12440.0    2058718.7   1654.9
Pipe-based Context Switching                   4000.0     390629.5    976.6
Process Creation                                126.0      17677.5   1403.0
Shell Scripts (1 concurrent)                     42.4       8510.5   2007.2
Shell Scripts (8 concurrent)                      6.0       1087.0   1811.7
System Call Overhead                          15000.0    4052402.4   2701.6
                                                                   ========
System Benchmarks Index Score                                        1786.3

Исходя из результатов полученных в процессе работы теста UnixBench можно сделать вывод, что производительность VPS более чем в два раза выше сервера на базе процессора Atom N2800 от Kimsufi.

Фильтры Google Analytics

Для точного учета статистики можно использовать встроенные фильтры Google Analytics. Причем следует отметить, что фильтры в Google Analytics предлагают гораздо больший функционал по сравнению с возможностями Яндекс.Метрики. Единственный недостатком сервиса является то, что с первого взгляда интерфейс Google Analytics кажется сильно запутанным.

В большинстве случаев я используя фильтр по ip-адресу для того чтобы исключить из статистики все нежелательные посещения. Для добавления нового фильтра зайдите в интерфейс Google Analytics. В верхнем меню нажмите на ссылку ‘Администратор’, выберите нужный аккаунт и ресурс, а затем в крайнем правом столбце ‘Представление’ нажмите на ссылку ‘Фильтры’.

Чтобы добавить новый фильтр нажмите кнопку ‘Добавить’, введите ip-адрес в название нового фильтра. Измените тип фильтра на ‘Встроенный’, ‘Исключить’. В качестве источника цели укажите ‘трафик с IP-адресов’ и затем укажите один ip-адрес или диапазон ip-адресов.

Отзыв на микро-сервер от Kimsufi

Хочу поделится опытом использования сервиса Kimsufi от компании OVH. Если вы еще не знакомы с этой компанией, OVH является крупнейшим в мире хостинг-провайдером. У хостера несколько сотен тысяч серверов во Франции и Канаде. Про OVH я узнал из рекомендаций. В первую очередь их хвалят за качество и низкие цены.

После регистрации на сайте Kimsufi, новым пользователям необходимо подтвердить свою информацию. У вас попросят отправить скан-копию паспорта и квитанцию за коммунальные услуги. Следует отметит, что в выходные дни служба верификации пользователей в Европейском офисе не работает.

Все мои основные доходы в долларе, для удобства подсчета расходов я сделал заказ на американском сайте Kimsufi. Здесь изначально нет VAT и, если я не ошибаюсь, то служба верификации работает по выходным дням.

Изначально планировалось заказать сервер на базе процессора Atom N2800/4GB RAM/1TB HDD, из-за высокого спроса мне пришлось заказать похожую конфигурацию на базе SSD 40GB. На будущее дам совет. Если в данный момент нет нужной конфигурации, попробуйте заказать сервер в выходной день.

Всего сервер обошелся мне в 11$, плюс дополнительно 14$ за установку. Через час сервер был готов, на почту пришла информация о тестировании сервера и параметры доступа к ssh. При установке системы из образов OVH, на работе сервер не пускал меня по ssh. Причину я не выяснил, но проблема была решена после самостоятельной установки Debian.

Следует отметить, что кроме достоинства в виде низкой цены, Kimsufi есть множество недостатков. Каждому серверу выдают по одному IPv4 и IPv6 адресу и заказать дополнительный ip вы не сможете. Есть ограничения по объему и скорости трафика.

Неудобство создает отсутствие KVM консоли. Установить систему можно только из списка доступных образов, но если поизвращаться, можно установить Debian/Ubuntu через Debootstrap или накатить любую систему с помощью утилиты dd. Для этого необходимо загрузить сервер в режиме восстановления.

Выкладываю лог SMART:

smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.14.32-xxxx-std-ipv6-64-rescue] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Intel 320 Series SSDs
Device Model:     INTEL SSDSA2CT040G3
Serial Number:    CVPR130107A8040AGN
LU WWN Device Id: 5 001517 959613165
Firmware Version: 4PC10362
User Capacity:    40,020,664,320 bytes [40.0 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Wed Feb 17 10:56:50 2016 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		(    1) seconds.
Offline data collection
capabilities: 			 (0x75) SMART execute Offline immediate.
					No Auto Offline data collection support.
					Abort Offline collection upon new
					command.
					No Offline surface scan supported.
					Self-test supported.
					Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   1) minutes.
Extended self-test routine
recommended polling time: 	 (   1) minutes.
Conveyance self-test routine
recommended polling time: 	 (   1) minutes.
SCT capabilities: 	       (0x003d)	SCT Status supported.
					SCT Error Recovery Control supported.
					SCT Feature Control supported.
					SCT Data Table supported.

SMART Attributes Data Structure revision number: 5
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  3 Spin_Up_Time            0x0020   100   100   000    Old_age   Offline      -       0
  4 Start_Stop_Count        0x0030   100   100   000    Old_age   Offline      -       0
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       16398
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       65
170 Reserve_Block_Count     0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
183 SATA_Downshift_Count    0x0030   100   100   000    Old_age   Offline      -       0
184 End-to-End_Error        0x0032   100   100   090    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
192 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       64
199 CRC_Error_Count         0x0030   100   100   000    Old_age   Offline      -       0
225 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       21000
226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       527
227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       80
228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       983880
232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   100   100   000    Old_age   Always       -       0
241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       21000
242 Host_Reads_32MiB        0x0032   100   100   000    Old_age   Always       -       87967

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Offline             Completed without error       00%     16398         -
# 2  Reserved (0x08)     Completed without error       10%     16228         -
# 3  Offline             Completed without error       10%     16225         -
# 4  Offline             Completed without error       10%     16225         -
# 5  Reserved (0x80)     Completed without error       10%     11543         -
# 6  Reserved (0x80)     Completed without error       10%     11540         -
# 7  Reserved (0x80)     Completed without error       10%     11540         -
# 8  Reserved (0x38)     Completed without error       10%     11482         -
# 9  Offline             Completed without error       10%     11479         -
#10  Vendor (0x70)       Completed without error       10%     11479         -
#11  Offline             Completed without error       10%        14         -
#12  Vendor (0xf8)       Completed without error       10%         1         -
#13  Vendor (0xf8)       Completed without error       10%         1         -

SMART Selective self-test log data structure revision number 0
Note: revision number not 1 implies that no selective self-test has ever been run
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Тест скорости записи:

root@kimsufi:~# dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 23.2924 s, 46.1 MB/s

Тест скорости чтения:

root@kimsufi:~# dd if=/tmp/tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 5.28607 s, 203 MB/s

Как видите на сервере установлен SSD Intel 320, анонсированный в 2011 году. Диск сильно устарел и имеет низкие скоростные показатели. Это все наталкивает на мысль отдать предпочтение серверу с HDD на 1TB.

Тест производительности UnixBench:

4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        6990123.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1012.6 MWIPS (9.8 s, 7 samples)
Execl Throughput                                766.1 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        205392.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           57849.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        512877.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                              618230.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  44671.2 lps   (10.0 s, 7 samples)
Process Creation                               2147.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1939.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    634.4 lpm   (60.1 s, 2 samples)
System Call Overhead                        1087567.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    6990123.7    599.0
Double-Precision Whetstone                       55.0       1012.6    184.1
Execl Throughput                                 43.0        766.1    178.2
File Copy 1024 bufsize 2000 maxblocks          3960.0     205392.1    518.7
File Copy 256 bufsize 500 maxblocks            1655.0      57849.3    349.5
File Copy 4096 bufsize 8000 maxblocks          5800.0     512877.5    884.3
Pipe Throughput                               12440.0     618230.1    497.0
Pipe-based Context Switching                   4000.0      44671.2    111.7
Process Creation                                126.0       2147.6    170.4
Shell Scripts (1 concurrent)                     42.4       1939.9    457.5
Shell Scripts (8 concurrent)                      6.0        634.4   1057.4
System Call Overhead                          15000.0    1087567.9    725.0
                                                                   ========
System Benchmarks Index Score                                         384.5

------------------------------------------------------------------------
Benchmark Run: Wed Feb 17 2016 15:15:17 - 15:43:22
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       19389920.4 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3642.8 MWIPS (9.8 s, 7 samples)
Execl Throughput                               3043.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        183580.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           54375.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        519889.3 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1181437.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 199232.0 lps   (10.0 s, 7 samples)
Process Creation                               6534.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5150.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    672.7 lpm   (60.3 s, 2 samples)
System Call Overhead                        2702706.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   19389920.4   1661.5
Double-Precision Whetstone                       55.0       3642.8    662.3
Execl Throughput                                 43.0       3043.0    707.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     183580.0    463.6
File Copy 256 bufsize 500 maxblocks            1655.0      54375.5    328.6
File Copy 4096 bufsize 8000 maxblocks          5800.0     519889.3    896.4
Pipe Throughput                               12440.0    1181437.3    949.7
Pipe-based Context Switching                   4000.0     199232.0    498.1
Process Creation                                126.0       6534.7    518.6
Shell Scripts (1 concurrent)                     42.4       5150.3   1214.7
Shell Scripts (8 concurrent)                      6.0        672.7   1121.2
System Call Overhead                          15000.0    2702706.3   1801.8
                                                                   ========
System Benchmarks Index Score                                         795.3

Что касается реальных задач, скорость работы WordPress примерно в 5-7 раз ниже по сравнению c самым дешевым тарифом на VPS у OVH. Это дополнительный аргумент в пользу сервера диском на 1TB.

Вывод будет краток. Я не вижу смысла заказывать выделенный сервер за 11$, который значительно хуже самого дешевого VPS за 3.5$ от OVH. Для сравнения вы можете ознакомится с результатами теста UnixBench на VPS от OVH. Если вы остро нуждаетесь в дешевом выделенном сервере, я могу посоветовать обратить внимание на online.net.

Primary script unknown while reading response header from upstream

Дата: 17.02.2016Метки:

Собирал на днях PHP 7 для своего VPS, на котором крутится этот блог. Ради интереса решил провести небольшой эксперимент и максимально отключить все неиспользуемые WordPress компоненты PHP. В процессе сборки я стараюсь всегда отключать все неиспользуемые модули. В этот раз решил дополнительно указал параметры, которые ранее никогда не использовал:

--disable-fileinfo
--disable-json
--disable-posix

После того как я запустил процесс php-fpm, я обнаружил, что сайт не работает. Не могу сказать, что я был сильно удивлен, поэтому решил сразу проверить логи nginx. В логах повторялась следующая ошибка:

"Primary script unknown" while reading response header from upstream.

Благо эту напасть удалось быстро победить. Для того чтобы завести PHP, необходимо указать в секции location ~ \.php$ директорию root, которая будет указывать на расположение файлов php. Если вы столкнулись с подобной ошибкой, убедитесь что в конфиге виртуального хоста nginx присутствуют следующие директивы:

location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    ...
}

VMware образы операционных систем

Дата: 24.01.2016Метки:

По специфике своей работы, мне часто приходится использовать VMware образы операционных систем. Когда образ виртуальной машины становится ненужен, я его просто удаляю. Если задуматься, можно заметить, что много времени уходит только на то, чтобы повторно выполнить установку операционной системы на виртуальную машину VMware.

Я решил оптимизировать рабочий процесс. Для этого я решил создать свой архив VMware образов операционных систем. Для установки я использую минимальные образы NetInstall/Minimal дистрибутивов Linux. После распаковки VMware образ можно сразу использовать для быстрого разворачивания операционной системы и тестирования программного обеспечения.

Архив VMware образов операционных систем Данный создан в первую очередь для себя и всех других людей, которые часто используют виртуализацию VMware в процессе своей работы. Имя пользователя user, пароль 123.

VMware образы операционных систем:

  • CentOS 7.1 64-bit
  • Debian 8.3 64-bit
  • Ubuntu Server 15.10 64-bit

Все VMware образы доступны для скачивания с сервера Яндекс.Диск.