вторник, 28 ноября 2017 г.

ПЕРЕНОС САЙТА WORDPRESS

По разным причинам вам может понадобиться перенести свой сайт на другой хостинг или VPS сервер. Это может быть вызвано тем, что ваш проект развивается и для него уже недостаточно ресурсов сервера, а может просто вас не устраивает уровень обслуживания. За все время развития Losst я менял хостинг провайдера много раз, то, что описано в истории сайта далеко не все. Возможно, позже у меня дойдут руки дописать, но не сейчас.
В этой статье я расскажу как выполняется перенос сайта wordpress, как это лучше сделать, что вам необходимо знать для того чтобы переезд прошел гладко и незаметно для пользователей. Ведь это главное.

ЧТО МЫ БУДЕМ ИСПОЛЬЗОВАТЬ?

Несмотря на то что WordPress — это популярный движок и для него существует не только встроенная возможность переноса базы данных на другой сервер, но и огромное количество плагинов для этого, я не рекомендую их использовать. На своем опыте я убедился, что при использовании стандартного экспорта-импорта почему-то теряется множество картинок и потом нужно их восстанавливать. На losst еще до сих пор остались статьи с битыми картинками с тех времен. Мы будем делать все вручную с помощью таких инструментов:
  • ssh;
  • mysql;
  • rsync;
Этого будет вполне достаточно, если вы менее опытный пользователь, то сюда можно добавить еще два инструмента:
  • phpmyadmin;
  • клиент ftp;
Упор я делаю на VPS, рассчитывая на то, что у вас есть доступ к серверу по SSH. Но эта инструкция может быть использована чтобы выполнить перенос сайта на Wordpres на другой хостинг. Большинство современных хостингов дают доступ к ssh консоли хотя бы в html интерфейсе.

ПОДГОТОВКА К ПЕРЕНОСУ WORDPRESS

Первое на что нужно обратить внимание, и желательно, при регистрации хостинга, это DNS. Нам нужно чтобы пользователи ничего не заметили. А поэтому сервера имен не должны меняться. Лучше всего, если ваши сервера имен будут у регистратора доменных имен и он же будет управлять доменной зоной.
Если же вы используете сервера имен вашего хостинга, то при передаче управления на другой хостинг сайт будет недоступен несколько часов. Поэтому сервера имен передайте регистратору, даже если сейчас они у вашего хостинга, а пользователей направляйте на ip сервера с помощью A записи.

ПЕРЕНОС САЙТА WORDPRESS

Сначала нам нужно перенести все файлы сайта на другой сервер. Конечно, вы можете использовать для этого FTP клиент, сначала скачать все файлы по одному с одного сервера, а потом загрузить по одному на другой. Но это сработает, только если у вас немного файлов. С сайтом в несколько гигабайт это может занять дни. Поэтому будем использовать более простой способ через SSH. Подключитесь к вашему серверу по SSH:
ssh root@address1
Обычно для переноса сайтов рекомендуется использовать tar, но это тоже не вариант, если на вашем хостинге недостаточно места для создания архива, поэтому оптимальный ответ на вопрос как скопировать сайт wordpress — использовать rsync:
rsync -avz -e ssh /папка/с/файлами/сайта root@address2:/папка/для/файлов/сайта/
Естественно, что папка для файлов сайта должна уже существовать. Дальше, на этом сервере нам нужно создать резервную копию базы данных, для наших целей этой команды будет вполне достаточно:
mysqldump -u root -p имя_базы > dump.sql
Если у вас большая база данных, то выполнение может занять несколько минут. Осталось передать базу на другой сервер, кладем ее в домашний каталог:
rsync -avz -e ssh dump.sql root@address2:~/
Если ваш сайт использует https, то нужно передать на новый сервер сертификаты, пока вы не подключите домен и не создадите новые:
rsync -avz -e ssh /путь/к/сертификату/site.pem root@address2:~/
rsync -avz -e ssh /путь/к/сертификату/site.key root@address2:~/
Дальше нам останется выполнить еще несколько настроек на этом сервере, но сначала нужно развернуть все на другом. Я предполагаю, что сервер уже настроен, веб-сервер и система управления базами данных установлены и работают. Подключаемся к нему по SSH:
ssh root@address2
Сначала файлы. Утилита rsync сохранит владельца файла из предыдущего сервера или сделает им root. А нам нужно чтобы файлы сайта принадлежали тому пользователю, от имени которого запущен Nginx и php-fpm или Apache. Посмотрите группу и пользователя, от которых они запущены:
Затем поменяйте текущего пользователя и группу всех файлов сайта на нужные с помощью утилиты chown:
chown -R losst:losst /путь/к/файлам/сайта/
Флаг -R включает рекурсивную обработку всех файлов, первый параметр — пользователь, второй, через двоеточие — группа. Дальше мы готовы перейти к базе данных. Сначала нужно создать нашу базу и создать пользователя, с помощью которого WordPress будет к ней подключаться. Для этого войдите в интерфейс mysql:
mysql
> CREATE DATABASE имя_базы_данных;
> CREATE USER 'имя_пользователя'@'%' IDENTIFIED BY 'пароль';
> GRANT ALL PRIVILEGES ON 'имя_базы_данных' . * TO 'имя_пользователя'@'localhost';
> GRANT ALL PRIVILEGES ON 'имя_базы_данных' . * TO 'имя_пользователя'@'address1';
> FLUSH PRIVILEGES;
С помощью этих команд мы создаем новую базу, затем пользователя, даем ему права делать с ней все что он захочет, если он подключен с localhost или сервера с ip address1, а последней командой обновляем таблицу привилегий. Нам осталось только загрузить информацию в базу:
mysql -u root имя_базы_данных < dump.sql
В принципе, для создания базы, пользователя и ее разворачивания можно было использовать Phpmyadmin, но в консоли все проще. Дальше нам осталось отредактировать файл wp-config и указать новые параметры доступа к базе:
vi /путь/к/файлам/сайта/wp-config.php
define('DB_NAME', 'имя_базы_данных');
/** MySQL database username */
define('DB_USER', 'имя_пользователя');
/** MySQL database password */
define('DB_PASSWORD', пароль');
/** MySQL hostname */
define('DB_HOST', 'localhost');
Если хотите использовать HTTPS, то укажите путь к переданным сертификатам в конфигурации Nginx или Apache. Вы уже знаете как перенести wordpress, осталось только протестировать. Теперь возвращаемся на ваш локальный компьютер и добавляем в файл /etc/hosts псевдоним вашего домена, который будет указывать на новый адрес. В Windows тоже есть этот файл, но только находится он по другому адресу:
vi /etc/hosts
address2 ваш_домен.ru
Дальше открываем сайт в браузере, убеждаемся, что это именно новая версия и кэш DNS обновился, затем проверяем как все работает, если все хорошо, то можно перенаправлять A запись регистратора на этот, новый ip адрес:
Доменная зона обновится не мгновенно, на это потребуется довольно много времени, до нескольких дней. Все это время некоторые пользователи будут обращаться к старому серверу чтобы он выдавал новые страницы нужно подключить сюда базу данных. Помните, мы разрешили подключаться к нашей базе от этого сервера, теперь просто укажите на старом сервере address1 в wp-config.php данные доступа и адрес сервера address2 вместо localhost. Готово. Теперь ваш сайт перенесен. Осталось дождаться полного обновления доменной зоны и можно выключать первый сервер. Не забудьте обновить SSL сертификаты, если их использовали.

четверг, 23 ноября 2017 г.

БЕСПЛАТНЫЙ VPS СЕРВЕР

Бесплатный VPS сервер, реально ли? Существует ли такое решение? Многие новички в разработке сайтов, программисты и опытные пользователи интересуются таким сервисом, ведь это удобно, иметь возможность протестировать сайт в интернете, проверить его скорость и другие параметры еще до того, как он будет опубликован. Но большинство подобных сервисов готовы выдавать бесплатные VPS не бесплатно, а за какие-либо услуги, например, перспективным сайтам, чтобы в будущем выкладывать на них рекламу, а это совсем не годится для тестирования. Сервис от Amazon тоже в расчет не берем, поскольку там вы можете получить vps сервер бесплатно только на первый год, а это уже нехорошо.
Но на самом деле есть решение, в этой статье мы рассмотрим как получить бесплатный VPS 2017 от компании Red Hat. Возможно, вы еще не слышали о нем, потому что этот сервис позиционируется не совсем как VPS. Это платформа OpenShift, которая предназначена для разработки приложений.

ЧТО ТАКОЕ OPENSHIFT?

OpenShift — это платформа для разработчиков, вы получаете контейнер под управлением Red Hat Linux, вы можете авторизоваться по SSH и устанавливать там различные программы из репозиториев, компилировать и выполнять свои программы, создавать файлы и так далее. Но есть одно но. Этот сервис имеет собственную фишку. OpenShift интегрирован с Git и разработчики предусмотрели, что любые файлы и любые изменения в ваши проекты на сервере будут вноситься с помощью коммитов.
Поэтому ваша рабочая папка после каждого коммита из вашего локального компьютера перезаписывается и если вы там создавали вручную какие-либо файлы, то они будут удалены. Но для многих приложений это не проблема, например, все еще можно работать с базой данных или сохранять ваши файлы на худой конец не в домашнем каталоге. А для разработчиков это и вовсе очень удобно, вам не нужно думать что обновлено, а что нет, вы просто ввели одну команду и состояние проекта на сервере синхронизировалось с тем, что есть у вас на локальной машине.
У сервиса есть еще один минус, если вы или другие пользователи не обращаетесь к нему на протяжении 24 часов, то он засыпает. Как только вы попробуете снова открыть его в браузере или авторизоваться все снова заработает, но настроить запуск какого-либо скрипта по крону в определенное время не получится. А теперь рассмотрим как зарегистрироваться и получить этот vps сервер бесплатно 2017.

КАК ПОЛЬЗОВАТЬСЯ OPENSHIFT?

Первым делом вам нужно зарегистрироваться. Весь интерфейс сайта на английском, но вам не нужно никаких кредитных карт или чего-то подобного. Для регистрации откройте официальный сайт OpenShift и выберите Sign up for Free.
Затем откройте ссылку Sign Up:
Вы попадете на страницу, где сможете создать новую учетную запись или использовать учетную запись из существующих социальных сетей, например, GitHub:
На следующей странице вам нужно указать персональную информацию:

Затем выберите тарифный план. Нас интересует бесплатный (Free). Здесь вам будет доступно 1 гигабайт оперативной памяти и один гигабайт места на диске под ваши файлы. Также сервер будет работать только 30 минут с момента последней активности, потом будет засыпать. И еще одно условие. Сервер должен спать 18 часов каждые 72 часа.
Выберите расположение, а затем еще раз ознакомьтесь с характеристиками и нажмите кнопку «Submit subscription»:

Теперь вам придется дождаться пока завершится разворачивание нового контейнера, это может занять несколько минут.
Когда аккаунт будет развернут, нажмите кнопку «Open Web console» чтобы перейти к управлению контейнером.
Следующий шаг, который вам предстоит сделать — это создать новый проект, нажмите кнопку «Create Project»:
В следующем окне введите название проекта и его описание, а затем нажмите кнопку «Create»:

На следующем шаге вам предстоит выбрать язык программирования, который вы собираетесь использовать. И программное обеспечение, которое нужно установить:

Последний шаг, вам нужно выбрать имя для нового проекта и указать репозиторий Git, на котором находится его код.
В последнем окне сайт сообщает, что для работы с проектом нам понадобиться использовать их собственную утилиту oc, которую нужно скачать и установить. Сначала перейдите на страницу загрузки и скачайте архив для вашей операционной системы. Например, для Linux:
После того как файл будет загружен, просто распакуйте его и можете использовать. Запускать программу нужно из папки, куда вы ее распаковали. Сначала нужно авторизоваться. На сайте нам уже предложили команду для этого. Например, если программа находится в текущей папке:
./oc login https://api.starter-us-west-1.openshift.com
Для вас адрес может немного отличаться. Дальше вам предстоит ввести свой логин и пароль. На следующем этапе вернитесь в браузер и нажмите «Overview». Нам нужно посмотреть какие контейнеры сейчас доступны и как мы их назвали. По умолчанию был создан один контейнер, которому я дал имя losst-utils. Но нам нужно знать его точное имя. Но перед этим рассмотрим сам веб-интерфейс управления. Нас интересует вкладка «Overview».
Здесь есть список всех приложений, например, мое приложение losst-utils. Если вы откроете приложение, то увидите список последних «Deployment», то есть синхронизаций с репозиторием GitHub. Здесь же можно запустить новую синхронизацию с помощью кнопки Deploy. Файлы берутся из релизов, а именно последний релиз. Также в окне Overview можно посмотреть URL по которому можно открыть наш проект в браузере:
Но нас интересует другой параметр, это надпись 1pod в правой стороне окна Overview. Здесь отображается информация о контейнере:
В частности нас интересует имя контейнера, оно меняется после каждой синхронизации с Git поэтому если вы хотите подключиться к контейнеру по ssh, то нужно будет сначала зайти сюда и посмотреть его:
Или выполнить команду:
./oc get pods
Нас интересует запущенный контейнер, running. Теперь можно подключиться к нему по ssh с помощью oc:
./os rsh  losst-utils-1-9gc9t
Пользоваться yum вы не сможете, но такие инструменты, как pip, pecl будут работать. Если вам нужно не только PHP, но и база данных Mysql, то придется создать отдельный контейнер в панели управления веб. Если сравнивать со старой версией, то теперь стало немного сложнее. Как я уже сказал, вы можете размещать файлы прямо здесь, в вашей домашней папке через ssh. Это не только ваша домашняя папка, но и корневая папка вашего веб-сервера, так что все появившиеся файлы будут доступны из сети, например, php скрипты будут выполняться, как и ожидалось. Считайте, что вы получили vps бесплатно навсегда, или точнее пока компания не решит поменять тарифы.
Но можно пойти и другим, правильным путем. Поскольку файлы, которые вы сюда добавите будут стерты при следующей синхронизации с Github. Просто загрузите новые файлы на Github, выпустите новый релиз, а затем нажмите кнопку Deploy в панели управления вашим контейнером:

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

ВЫВОДЫ

В этой статье мы рассмотрели как получить бесплатный VPS от Red Hat. Как видите, это возможно. Их решение отлично подойдет для разработки различных приложений. Или демонстрации своих наработок друзьям или заказчику. А вы пользуетесь OpenShift? Знали о нем раньше? Напишите в комментариях!

воскресенье, 12 ноября 2017 г.

Установка Ubuntu Linux на SSD

Многие слышали, что на рынке появились твердотельные жёсткие диски без движущихся частей, SSD диски. Они пока относительно дорогие и объем не велик, но операционная система на них просто летает, а тяжёлые приложения стартуют в разы быстрее, чем с обычных HDD. Чем достигается такое волшебство?
У SSD нет головок, которые необходимо позиционировать над затребованными данными и поэтому скорость чтения случайных секторов происходит намного быстрее. А как показывает практика, именно работа с мелкими файлами, расположенных в разных местах диска - это обычный портрет работы операционной системы.
Лучшее решение на сегодняшний день - это покупка SSD для операционной системы и хранение личных и медиа файлов на обычных HDD.
Вот и я решился купить себе SSD диск для Ubuntu. Много прочёл про этот новый вид дисков - твердотельные накопители. Хотел модель Intel X25-V, но денег как всегда мало, пришлось приобрести модель OCZ "Onyx" OCZSSD2-1ONX32G с контроллером Indilinx Amigos, про который много отрицательного не пишут.
Ниже описаны этапы, которые помогут правильно подготовить SSD для работы с Ubuntu Linux. Если вы проигнорируете этапы, то получите работающую систему, но не оптимальную, с меньшей скоростью чтения-записи и, возможно, подвергните свой SSD диск опасности раннего выхода из строя.

Прочтите все о вашем SSD на официальном сайте

Не пренебрегайте данным советом, например я вычитал на официальном сайте моего OCZ "Onyx" OCZSSD2-1ONX32G, что обновлять прошивку нужно, установив в BIOS, режим IDE для SATA дисков, а не родной AHCI режим. Мало ли чего важного вы вычитаете?

Обновите прошивку

Внутри жёстких дисков, SSD не исключение, есть микроконтроллер, который управляется микропрограммой. Её можно обновлять и это называется "прошивкой" (firmware). Прочтите что и как рекомендует производитель вашего SSD диска для обновления прошивки. Обычно обновление прошивки устраняет ошибки и добавляет новые функции. Очень важно чтобы SSD диск поддерживал TRIM и, если для этого нужно обновить прошивку, обновляйте!
Узнать текущую версию прошивки можно командой sudo hdparm -i /dev/ваш_диск | grep -i Fw

Выравнивание разделов на SSD

Суть проблемы в том, что если начало разделов в секторах не кратно размеру кластера файловой системы, то резко падает производительность при чтении/записи с диска, а в случае с SSD диском ещё и увеличивается износ диска. То есть когда разделы не выравнены, то кластер файловой системы занимает несколько секторов и тем самым увеличивается количество операций чтения/записи. Подробнее об этой проблеме выравнивания разделов лучше прочесть в Интернете. Главное запомнить простое правило: создаёте раздел - его стартовый сектор должен делиться на 8 без остатка.

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdh1 2048 514047 256000 83 Linux
/dev/sdh2 514048 55810047 27648000 83 Linux
Начальные сектора 2048 и 514048 кратны 8! Я использовал fdisk и в нём создал разделы /boot, / и swap. Из статьи на Хабре выяснил, что работа со swap в современных операционных системах идёт примерно ~40:1 чтение:запись. Поэтому размещение swap на SSD это отличная идея. Чуть позже мы заставим Ubuntu Linux меньше использовать swap, а больше быструю ОЗУ.
Некоторое место на вашем SSD зарезервировано и недоступно вам, это место будет использовано для замены износившихся во время записи-перезаписи ячеек. Во время разметки диска, я оставил не размеченой область ~3,5 Гб, чтобы контроллеру диска было чем заменять, в далёком будущем, вышедшие из строя ячейки. Вам так же рекомендую не жадничать и при разметке оставить чуток не размеченной области.

Установка на SSD Ubuntu

Во время установки я указал, что первый раздел на SSD это /boot и файловая система ext3. Просто я решил помочь grub'у и не огребать не нужных проблем. В /boot хранятся ядра системы и размера 250 мб должно хватить на много установленных параллельно ядер.
Второй раздел на SSD стал корнем / в BTRFS. У этой продвинутой файловой системы, есть замечательный параметр -o ssd. Указав его, мы сообщаем, что жёсткий диск вида SSD и улучшаем работу с ним. Указать параметр можно позже, отредактировав /etc/fstab

# мой корень
UUID=6f1fedb8-2dc7-4d19-a1f4-2eac082f879e / btrfs defaults,noatime,barrier=0,nodatacow,discard,commit=600,ssd 0 0

Раздел /home был и его не форматируя через установщик, я задействовал как и раньше. Все файловые системы, кроме /boot, указаны в BTRFS.

Оптимизация Ubuntu для SSD

Если у вас есть UPS, он же ИБП, то можно применить советы из Ускорение Ubuntu.
Параметр discard.
Включает полезную команду TRIM и настоятельно рекомендуется к применению к различным файловым системам. discard нужно указать в /etc/fstab. Разработчики многих дистрибутивов linux обсуждали иногда возникающую проблему с discard, которая приводит к падению производительности. Альтернативным путём является вызов fstrim из cron. Пробуйте и выбирайте своё!
Параметр ssd для btrfs.
Указывайте для файловых систем btrfs в /etc/fstab.
Параметр commit=600.
Замечательный параметр commit равный 600 можно применять ко многим файловым системам и commit указывает на сброс грязных файловых буферов каждые 10 минут (600). Настоятельно рекомендуется иметь ИБП. commit=600 нужно указать в /etc/fstab.
barrier=0
Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени. Отключая шлагбаум barrier=0, мы ускоряем операции записи на разделы.
barrier=0 нужно указать в /etc/fstab.
Для btrfs указывайте nobarrier.
LVM.
Если вы используете технологию LVM, то нужно указать в /etc/lvm/lvm.conf параметр issue_discards = 1.
Preload.
Демон, кешируюший обращения к файлам и ускоряющий IO вывод. В SSD диске нет вращающихся блинов и считывающих головок, то желательно в /etc/preload.conf изменить параметр и привести его к виду sortstrategy = 0. Этим самым вы прикажете не производить сортировку очереди запросов, так как для SSD это не имеет смысла. Перезапустите preload - sudo /etc/init.d/preload restart
Увеличим сброс грязных буферов vm.dirty_writeback_centisecs = 15000 в /etc/sysctl.conf.
У демонов журналирования rsyslogd или syslogd перед всеми путями к журналам поставим знак минус и заставим не делать sync после добавления одной строки в журнал. Демон ведения журналов syslog (а также идущий ему на смену - rsyslog) пишет журналы в каталоге /var/log/ и добавив одну строку делает операцию sync, которая сводит на нет кэш диска и более долгий сброс буферов. Можно изменить поведение демона и указать не делать sync после каждого добавления. Найдите файл конфигураций демона, обычно это /etc/syslog.conf или /etc/rsyslog.d/ и все пути вида /var/log/что-то-там/ измените, дописав знак минус ("-") перед путями.
В файл /etc/sysctl.conf в конец файла вставьте строку vm.swappiness = 10 и тем самым заставьте Ubuntu Linux больше занимать ОЗУ, чем swap. Как это достигается подробно расписано в Ускорении Ubuntu.
По умолчанию в Ubuntu Linux в качестве файлового планировщика используется CFQ, он старается минимизировать перемещения головок, но у SSD нет движущихся частей и CFQ не нужен. Нужно в файле /etc/default/grub добавить elevator=noop и получить строку, типа GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop". Не забудьте sudo update-grub
Теперь перезагрузка вашего ПК и получите оптимизированную под плюсы и скрывающая минусы SSD систему Ubuntu Linux. Порадуйте себя скоростью SSD sudo hdparm -t /dev/ваш_диск_ssd

Советы SSD

1) Меньше пишешь на SSD, лучше.
2) Постоянная запись множества мелких файлов - самое большое зло для SSD. Запись на SSD производится блоками (вплоть до 128 Кб) и маленькие файлы вынуждают стирать блоки большего размера.
3) Располагать раздел подкачки на SSD можно и нужно. Работа с подкачкой характеризуются большим количеством чтения по сравнению с записью (40 к 1), и относительно большими объемами записи, так что пользы от гораздо более быстрого доступа к данным больше, чем вреда.
4) Если команда iotop часто показывает запись процесса в раздел, находящийся на SSD, сделай так, чтобы процесс туда писал реже или вообще не писал. Не бойся редкой записи - бойся постоянной, периодической записи. Смотри п.п 1.
5) Забудь про дефрагментацию, её больше для тебя не существует. Если увидел слово онлайн дефрагментация или дефрагментация на-лету, найди и выключи это.
6) В Ubuntu Linux кроме системного индексатора updatedb, остальные индексаторы хранят файлы-базы-данных в домашнем каталоге. Подумайте о необходимости этих индексаторов-поисковиков, если не нужны - отключайте/удаляйте.
Отличный видеоматериал, правда на английском языке, но всё понятно из самого видео и открытых окон как оптимизировать Linux для SSD.