Рубрика: Новости
Linux Mint 17 и DLNA
Linux Mint — отличная домашняя ОС. Богатый выбор графических сред на любой вкус, простая и понятная даже новичку установка, сразу после установки имеем основной набор необходимого софта, удобный менеджер приложений, основные мультимедийные кодеки. В общем, отличная система для перехода и ознакомления с Linux.
Но возникает проблема для тех, у кого нет дома NAS или чего-то подобного, а смотреть контент с ПК на других устройствах, поддерживающих DLNA хочется. Под Linux существует множество различных DLNA-серверов, но оптимальным, все же, является MiniDLNA. И тому есть несколько причин. Во-первых, это типичный Unix-way: этот сервер является именно DLNA-сервером, а не комбайном с кучей свистелок, при этом контент без проблем воспринимается на любом устройстве. Даже телевизоры Samsung со своим AllShare прекрасно подключаются к нему. Также можно отметить и замечательную скорость работы и нетребовательность к ресурсам этого сервера.
И все бы было хорошо, но вот в с помощью команды
sudo apt-get install minidlna
установить его не получится — нет его в репозитарии.
Существуют разные варианты устранения этого недоразумения, но самый правильный путь — установка из исходников.
Чтобы не отвратить возможных новоиспеченных линуксоидов с этого пути и, возможно, помочь кому-то, напишу как обойти подводные камни, ибо информации много, но в начале пути людям нужно попроще.
Подготовка
Если будете выполнять команды в консоли, запущенной с правами root, команду sudo писать не нужно.
Для начала нужно установить необходимые библиотеки:
Обновляемся:
sudo apt-get update
И устанавливаем сами библиотеки:
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev
Самая свежая версия MiniDLNA на данный момент — 1.1.3, ее можно скачать здесь, либо загрузить из консоли:
wget --trust-server-names http://sourceforge.net/projects/minidlna/files/latest/download
ключ перед адресом нужен, чтобы сохранилось оригинальное имя, с выхдом новой версии имя файла будет отличатся. После этого архив нужно распаковать:
tar -xf minidlna-1.1.3.tar.gz
Теперь перейдем в распакованную папку с исходниками
cd minidlna-1.1.3
Если вы хотите, чтобы на устройстве отображались сразу папки с файлами, нужно немного подправить код:
sudo cp upnpsoap.c upnpsoap.c.old
и откроем в редакторе
sudo nano upnpsoap.c
поиском (F6), ищем процедуру:
"BrowseContentDirectory"static void
BrowseContentDirectory(struct upnphttp * h, const char * action)
{
В начале процедуры выполняется разбор SOAP/XML-запроса, затем его обработка и возврат результата. Разбор запроса завершается формированием отладочного сообщения:
DPRINTF(E_DEBUG, L_HTTP, "Browsing ContentDirectory:\n"
" * ObjectID: %s\n"
" * Count: %d\n"
" * StartingIndex: %d\n"
" * BrowseFlag: %s\n"
" * Filter: %s\n"
" * SortCriteria: %s\n",
ObjectID, RequestedCount, StartingIndex,
BrowseFlag, Filter, SortCriteria);
Далее реализован выбор корневого контейнера в зависимости от конфигурационного параметра root_container:
// Если запрошен корневой контейнер
if( strcmp(ObjectID, "0") == 0 )
{
// Выставляем флаг корневого контейнера
args.flags |= FLAG_ROOT_CONTAINER;
// Если в конфиге задан корневой контейнер
if( runtime_vars.root_container )
{
// Если клиентом является аудио плейер и в конфиге задан обзор папок
// Отправляем его в папку с музыкой
if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_container, BROWSEDIR_ID) == 0) )
ObjectID = MUSIC_DIR_ID;
else // Иначе выставляем контейнер, заданный в конфиге
ObjectID = runtime_vars.root_container;
}
else // Если контейнер в конфиге не задан
{
// Если клиентом является аудио плейер
// Отправляем его в папку с музыкой
if( args.flags & FLAG_AUDIO_ONLY )
ObjectID = MUSIC_ID;
}
}
Сразу после этого блока и перед блоком с запросами к БД добавляем код перенаправления папок для видео, музыки и изображений:
//Redirect video to folder
if( strcmp(ObjectID, VIDEO_ID) == 0 )
{
ObjectID = VIDEO_DIR_ID;
}
//Redirect music to folder
if( strcmp(ObjectID, MUSIC_ID) == 0 )
{
ObjectID = MUSIC_DIR_ID;
}
//Redirect images to folder
if( strcmp(ObjectID, IMAGE_ID) == 0 )
{
ObjectID = IMAGE_DIR_ID;
}
В итоге правленный фрагмент должен выглядеть следующим образом:
if( strcmp(ObjectID, "0") == 0 )
{
args.flags |= FLAG_ROOT_CONTAINER;
if( runtime_vars.root_container )
{
if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_containe$
ObjectID = MUSIC_DIR_ID;
else
ObjectID = runtime_vars.root_container;
}
else
{
if( args.flags & FLAG_AUDIO_ONLY )
ObjectID = MUSIC_ID;
}
}
//Redirect video to folder
if( strcmp(ObjectID, VIDEO_ID) == 0 )
{
ObjectID = VIDEO_DIR_ID;
}
//Redirect music to folder
if( strcmp(ObjectID, MUSIC_ID) == 0 )
{
ObjectID = MUSIC_DIR_ID;
}
//Redirect images to folder
if( strcmp(ObjectID, IMAGE_ID) == 0 )
{
ObjectID = IMAGE_DIR_ID;
}
if( strcmp(BrowseFlag+6, "Metadata") == 0 )
{
args.requested = 1;
sql = sqlite3_mprintf("SELECT %s, " COLUMNS
"from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID$
" where OBJECT_ID = '%q';",
(args.flags & FLAG_ROOT_CONTAINER) ? "0, -1" : "o.OBJECT_I$
ObjectID);
ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
totalMatches = args.returned;
}
Чтобы упростить процедуру последующего обновления, сохраним патч с внесенными изменениями:
diff -u upnpsoap.c.old upnpsoap.c > ../minidlna-folders.patch
Теперь вместо редактирования файла, достаточно применить патч:
cd ~/src/minidlna/minidlna-НоваяВерсия
patch < ../minidlna-folders.patch
Теперь можно переходить к конфигурированию.
Если вам это не нужно, переходите сразу к конфигурированию:
./configure
И компилируем:
make
Установка
1) Для тех, кто в дальнейшем захочет обновить версию, предыдущую можно удалить (конфигурационные файлы при этом сохраняются), если этого не сделать, то в случае, если в новой версии состав установочных файлов изменится, в /usr/local могут остаться старые файлы, при первой установке — переходим сразу к пункту 2.
Для удаления заходим в папку с предыдущей установкой и выполняем команду:
sudo apt-get remove minidlna
2) Запускаем установку (в комментариях предложили более правильный путь, чем make install):
sudo checkinstall -D
Ключ -D указывает, что должен быть создан Debian-пакет
3)Если мы производим первоначальную установку, нужно создать init-скрипт:
sudo nano /etc/init.d/minidlna
, если мы обновляем версию, больше ничего делать не нужно, при первоначальной установке у нас откроется пустой файл, в который нужно внести следующий код:
#!/bin/sh
#
# MiniDLNA initscript
#
# Based on the mediatomb debian package.
# Original authors: Tor Krill <tor@excito.com>
# Leonhard Wimmer <leo@mediatomb.cc>
# Andres Mejia <mcitadel@gmail.com>
#
# Modified by: Benoit Knecht <benoit.knecht@fsfe.org>
#
### BEGIN INIT INFO
# Provides: minidlna
# Required-Start: $network $local_fs $remote_fs
# Required-Stop:: $network $local_fs $remote_fs
# Should-Start: $all
# Should-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start minidlna at boot time
# Description: Manage the minidlna daemon, a DLNA/UPnP-AV media server.
### END INIT INFO
unset USER
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="DLNA/UPnP-AV media server"
NAME=minidlnad
DAEMON=/usr/local/sbin/minidlnad
PIDDIR=/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/minidlna
DEFAULT=/etc/default/minidlna
# Exit if the package is not installed
[ -x $DAEMON ] || exit 0
# Read configuration variable file if it is present
[ -r $DEFAULT ] && . $DEFAULT
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# Do not start the daemon if NO_START is enabled in DEFAULT
if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then
log_warning_msg "$NAME: Not starting $DESC."
log_warning_msg "$NAME: Disabled in $DEFAULT."
exit 0
fi
# Set the default configuration file
if [ -z $CONFIGFILE ]; then
CONFIGFILE=/etc/minidlna.conf
fi
# Set the default log file
if [ -z $LOGFILE ]; then
LOGFILE=/var/log/minidlna.log
fi
# Run as `minidlna' if USER is not specified or is `root'
if [ -z $USER ]; then
USER=minidlna
fi
# If no group is specified, use USER
if [ -z $GROUP ]; then
GROUP=$USER
fi
DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS"
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2
if [ ! -d $PIDDIR ]; then
mkdir $PIDDIR || return 2
fi
chown $USER:$GROUP $PIDDIR || return 2
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER:$GROUP --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -rf $PIDDIR
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
if [ "$1" = "force-reload" ]; then
# Rescan the collection
DAEMON_ARGS="$DAEMON_ARGS -R"
fi
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:
, сохранить комбинацией клавиш Ctrl+O и выйти из редактора — Ctrl+X.
4) После этого даем права на запуск скрипта:
sudo chmod 755 /etc/init.d/minidlna
5) И активируем запуск init-скрипта:
sudo update-rc.d minidlna defaults
6) Так как по умолчанию служба запускается под пользователем minidlna, нам нужно создать соответствующую учетную запись:
sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna
7) Правим файл конфигурации сервера:
sudo nano /etc/minidlna.conf
В нем нам нужно следующее содержимое (здесь подправлен интервал, с которым сервер себя анонсирует, так как не все телевизоры опрашивают сервер, также вам надо прописать путь к папке с медиа, к примеру так: «media_dir=V,/mnt/sdb6/Video/Alex/» в соответствующем разделе файла):
# Порт сервера
port=8200
# Привязка к сетевому интерфейсу
# Можно задать несколько интерфейсов
# в формате network_interface=eth0,eth1
#network_interface=eth0
# Имя пользователя или UID, под которым будет работать служба
# Добавлен в версии 1.1.0
# В Debian задается в параметрах init-скрипта
#user=jmaggard
# Путь к папке с медиа-файлами
# Для сканирования нескольких папок, укажите несколько параметров media_dir
# Чтобы сканировать файлы определенного типа, укажите соответствующий префикс:
# A - аудио: media_dir=A,/home/jmaggard/Music
# V - видео: media_dir=V,/home/jmaggard/Videos
# P - изображения: media_dir=P,/home/jmaggard/Pictures
# Начиная с версии 1.1.0, можно задать несколько типов:
# PV - изображения и видео: media_dir=AV,/var/lib/minidlna/digital_camera
#
# При изменении параметра, потребуется повторное сканирование файлов.
# Необходимо выполнить команду "service minidlna force-reload" от имени root.
# Начиная с версии 1.1.0, при изменении параметра, сканирование выполняется автоматически.
media_dir=/var/lib/minidlna
# Имя DLNA-сервера, отображаемое клиентом
# По умолчанию: "$HOSTNAME:$USER"
#friendly_name=
# Путь к папке для хранения базы данных и кэша обложек альбомов
db_dir=/var/lib/minidlna
# Путь к папке с лог-файлами
log_dir=/var/log
# Уровень детальности лога
# В формате log_level=источник1,источник2=значение1,источник3,источник4=значение2 ...
# Доступные источники: "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo"
# Возможные значения: "off", "fatal", "error", "warn", "info" or "debug"
#log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn
# Перечень имен файлов-обложек альбомов, разделитель: "/"
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
# Автообнаружение новых файлов
# Включено по умолчанию
inotify=yes
# Поддержка устройств TiVo
#enable_tivo=no
# Строго следовать DLNA-стандарту
# Использовать серверное масштабирование для очень больших JPEG-изображений
# Что может снизить скорость их обработки.
#strict_dlna=no
# Адрес веб-страницы устройства
# По умолчанию IP-адрес и заданный порт сервера
#presentation_url=http://www.mylan/index.php
# Интервал отправки SSDP-уведомлений, в секундах
notify_interval=30
# Серийный номер и номер модели DLNA-сервера, сообщаемый клиенту
serial=12345678
model_number=1
# Путь к сокету MiniSSDPd, если установлен
# Требуется для обеспечения работы нескольких DLNA/UPnP служб на одном сервере
#minissdpdsocket=/run/minissdpd.sock
# Контейнер, используемый в качестве корневой папки для клиентов
# * "." - стандартный контейнер
# * "B" - "Обзор папки"
# * "M" - "Музыка"
# * "V" - "Видео"
# * "P" - "Изображения"
# Если задано "B" и клиент представится как аудиоплеер, в качестве корня будет использована папка "Music/Folders"
#root_container=.
# Всегда использовать заданный критерий сортировки, вместо значения, запрошенного клиентом
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title
# Максимальное число одновременных подключений
# Учтите: многие клиенты открывают несколько подключений одновременно
#max_connections=50
8)Затем проверяем параметры init-скрипта /etc/default/minidlna:
sudo nano /etc/default/minidlna
Обычно корректировка не требуется. Если файл отсутствует, при первичной установке из исходников, копируем листинг:
# Запускать демон, если задано "yes"
START_DAEMON="yes"
# Путь к файлу конфигурации
#CONFIGFILE="/etc/minidlna.conf"
# Путь к лог-файлу
#LOGFILE="/var/log/minidlna.log"
# Запуск от имени заданного пользователя и группы
# По умолчанию: minidlna
#USER="minidlna"
#GROUP="minidlna"
# Дополнительные ключи запуска
DAEMON_OPTS=""
Обычно после этого не требуется дополнительных настроек, но если есть проблемы с доступом к медиа (или хотите перестраховаться), можно настроить права доступа:
sudo -u minidlna ls -l папка
Если папка недоступна, задаем права доступа:
sudo chmod -R 755 папка
Вышестоящие папки также должны быть доступны на чтение всем пользователям. Проверяем доступность на чтение каждой папки, указанной в пути. Для вышестоящих папок используем chmod без ключа -R, если не требуется сброс разрешений для всех дочерних файлов и папок.
В качестве альтернативы смене разрешений, можно запустить MiniDLNA от имени пользователя или группы-владельца файлов. Для этого необходимо задать параметры USER и GROUP в /etc/default/minidlna, и сменить владельца папки /var/lib/minidlna командой:
sudo chown -R пользователь:группа /var/lib/minidlna
Запуск сервера
Запускаем:
sudo service minidlna force-reload
Проверяем, работает ли служба, также смотрим параметры запуска:
ps ax | grep minidlna
Проверяем, слушается ли порт:
sudo ss -4lnp | grep minidlna
Проверяем лог:
cat /var/log/minidlna.log
В случае успешного старта, лог должен быть примерно следующим:
Gothician gothician # cat /var/log/minidlna.log
[2014/07/27 10:05:31] minidlna.c:1014: warn: Starting MiniDLNA version 1.1.3.
[2014/07/27 10:05:31] minidlna.c:355: warn: Creating new database at /var/lib/minidlna/files.db
[2014/07/27 10:05:31] minidlna.c:1053: warn: HTTP listening on port 8200
[2014/07/27 10:05:31] scanner.c:706: warn: Scanning /var/lib/minidlna
[2014/07/27 10:05:31] scanner.c:793: warn: Scanning /var/lib/minidlna finished (0 files)!
[2014/07/27 10:05:31] playlist.c:125: warn: Parsing playlists...
[2014/07/27 10:05:31] playlist.c:259: warn: Finished parsing playlists.
[2014/08/03 09:25:35] minidlna.c:1053: warn: HTTP listening on port 8200
Если видим: «WARNING: Inotify max_user_watches [8192] is low.», необходимо увеличить число дескрипторов слежения inotify до 100 000. Для этого в файл /etc/sysctl.conf добавим строки:
#MiniDLNA warning fix
fs.inotify.max_user_watches = 100000
Вручную редактором:
sudo nano /etc/sysctl.conf
Или копипастом команды:
sudo sh -c 'printf "\n\n#MiniDLNA warning fix\nfs.inotify.max_user_watches = 100000\n" >> /etc/sysctl.conf && cat /etc/sysctl.conf'
Изменение параметра вступит в силу после перезагрузки системы.
Открываем в браузере адрес.сервера:8200, видим количество файлов в библиотеке, начиная с версии 1.1.2, также отображается список подключенных клиентов.
Настройка DLNA/UPnP-AV сервера завершена.
При появлении ошибок в каталоге, необходимо выполнить повторное сканирование файлов.
При использовании приведенного выше init-скрипта, для запуска сканирования медиа-библиотеки используем команду:
sudo service minidlna force-reload
Служба при этом будет перезапущена, подключенные клиенты будут отключены.
Для сканирования медиа-библиотеки при каждом старте системы можно задать ключ запуска: “-R” в параметре DAEMON_OPTS в файле /etc/default/minidlna. Сканирование большой медиа-библиотеки существенно нагружает диск, что может замедлить загрузку системы.
Полное формирование каталога может занять несколько минут. Сканирование папок выполняется в порядке их объявления в конфиге. Файлы из небольших папок, объявленных в конфиге выше, появятся в каталоге в самом начале процесса сканирования. Крупные папки с редко воспроизводимым контентом имеет смысл размещать в конфиге последними.
По материалам http://itadept.ru/, wiki.archlinux.org.
Проекты на WordPress: советы по оптимизации
Сегодня WordPress является одной из самых популярных CMS. Задуманная изначально как движок для блогов, сегодня она используется для самых разных типов сайтов, в частности, для новостных порталов и интернет-СМИ. На Wordpress работают корпоративные веб-сайты, образовательные и развлекательные порталы.
Во всех примерах используется Ubuntu 12.04.
Настраиваем СУБД
Выбор СУБД
Как известно, для работы WordPress необходима СУБД MySQL. В последнее время широкое распространение получили альтернативные реализации (форки) этой СУБД, наиболее популярными из которых являются Percona Server и MariaDB. Во многих инструкциях по установке, опубликованных в Интернете, рекомендуется использовать MariaDB.
Мы же рекомендуем использовать Percona Server, так как этот форк по сравнению со стандартным MySQL является более производительным и стабильным. Кроме того, Percona обладает более широкими возможностями для сбора системной статистики.
Чтобы установить Percona на сервер, нужно сначала импортировать ключи:
$ apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
Затем нужно добавить в файл /etc/apt/sources.list следующие репозитории:
deb http://repo.percona.com/apt precise main deb-src http://repo.percona.com/apt precise main
И выполнить команду:
$ sudo apt-get update
После этого можно устанавливать percona-server при помощи стандартного менеджера пакетов:
$ sudo apt-get install percona-server-server percona-server-client
Выбираем движок: MyISAM или InnoDB?
Самыми популярными движками в MySQL-базах являются MyISAM и InnoDB. Если движок выбран неправильно, то возникают проблемы с производительностью и консистентностью.
Рассмотрим особенности этих движков более подробно.
MyISAM показывает хорошие результаты на выборках SELECT, что во многом обусловлено отсутствием поддержки транзакций и внешних ключей. Однако при модификации и добавлении записей вся таблица на время блокируется, что при большой загрузке может стать причиной серьезных задержек.
Несомненными преимуществами этого движка являются также полнотекстовый поиск и компрессия. Формат данных в MyISAM — кроссплатформенный, что позволяет без проблем переносить данные с одного сервера на другой путем простого копирования бинарных файлов (таблиц) баз данных.
InnoDB используется в современных версиях MySQL как движок по умолчанию.
В отличии от MyISAM InnoDB поддерживает транзакции и внешние ключи. В Percona Server используется собственный движок — XtraDB, полностью совместимый с InnoDB. Данные в InnoDB/XtraDB кэшируются. Когда большая часть данных считывается из кэша, производительность InnoDB/XtraDB в разы выше, чем у MyISAM.
Статей, посвященных сравнению MyISAM с InnoDB/XtraDB, а также MySQL c его форками, опубликовано немало (см., в частности, тест производительности здесь). Мы не будем вдаваться в теоретические подробности и ограничимся практическим советом: MyISAM нужно выбирать только в случаях, когда нужен полнотекстовый поиск. Со всеми остальными задачами прекрасно справятся InnoDB/XtraDB. Кстати, в MySQL/Percona Server 5.6+ полнотекстовый поиск для InnoDB уже поддерживается.
Оптимизация конфигурации СУБД
По мере развития сайта количество данных в БД будет расти, и возникнет необходимость изменений настроек базы данных. Чтобы обеспечить оптимальную работу сайта, желательно регулярно проверять, насколько оптимально настроена действующая конфигурация MySQL. Такую проверку проще всего осуществлять с помощью специальных скриптов, самым известным и популярным из которых является mysqltuner.pl. Его можно скачать при помощи следующих команд:
$ wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl $ chmod +x ./mysqltuner.pl $ ./mysqltuner.pl
Этот скрипт собирает статистику MySQL и выдает рекомендации по улучшению существующих настроек.
Настраиваем веб-сервер
Параметры Apache
Настройки apache хранятся в файле /etc/apache2/apache2.conf
В конфигурационном файле Apache имеется такой параметр, как max_clients — максимальное количество процессов, запускаемых для параллельной обработки клиентских запросов. На первый взгляд может показаться, что для этого параметра нужно устанавливать максимальное значение. В реальной практике, однако, все бывает по-другому.
Допустим, один процесс Apache может потребить 20 Мб оперативной памяти. Если для параметра max_clients выставлено значение 200, то при пиковой нагрузке под все процессы потребуется 200×20 Мб = 4Гб памяти — и это только под Apache! В результате нехватки памяти даже самые простые запросы будут выполняться крайне медленно. И программное обеспечение на сервере может перестать работать.
Поэтому слишком большое значение параметра max_clients выставлять не желательно. Если количество запросов превысит установленное значение, то все эти запросы будут поставлены в очередь и обработаны, как только освободятся занятые процессы.
В целях повышения производительности рекомендуется также отключить keepalive-соединения, исправив соответствующую строку в конфигурационном файле:
KeepAlive off
Backend+Frontend = Apache +Nginx
Любой более или менее высоконагруженный веб-проект должен иметь многоуровневую архитектуру (об этом мы уже писали). Для большинства проектов на базе WordPress вполне подойдет двухуровневая архитектура Backend — Frontend. Мы рекомендуем использовать следующую связку: в качестве бэкенда Apache, в качестве фронтенда — Nginx.
Впрочем, возможен и другой вариант — php-fpm в качестве бэкенда, а в качестве фронтенда — все тот же Nginx (см. инструкции по настройке, например, здесь и здесь). Во многих публикациях утверждается, что связка php-fpm+Nginx работает быстрее или потребляет намного меньше памяти. С этими утверждением, однако, вряд ли можно однозначно согласиться.
К тестам, опубликованным в Интернете, нужно относиться со здоровой долей скептицизма: нередко php-fpm+Nginx показывает лучшие результаты лишь потому, что Apache не был настроен должным образом (см., например, отчет о тестировании и его критический разбор; см. также любопытную дискуссию здесь). На основании собственного опыта можем сказать, что для большинства проектов на Wordpress комбинация Apache+Nginx вполне подойдет. Выбор решения должен основываться не только и столько на приросте производительности, сколько на специфке решаемых задач и соображениях технологического удобства. А Apache, на наш взгляд, отличается большей гибкостью конфигурирования. Он может использоваться и как отдельный веб-сервер, и как бэкенд для Nginx, и как фронтенд для php-fpm.
Общая схема работы выглядит так: Nginx принимает запросы от пользователей, которые затем либо передает Apache, либо обрабатывает самостоятельно. Apache будут передаваться запросы, связанные с обработкой динамического контента — например, php-скриптов. Nginx самостоятельно обрабатывает запросы на отдачу статики — например, графики, JS, CSS, текстовых файлов, XML-файлов.
Apache обработав запрос и передав содержимое Nginx, отключается и переходе к обработке других запросов. Благодаря этому работа существенно ускоряется (что немаловажно, например, при медленном интернет-подключении).
Кроме того, раздачу динамических запросов можно ускорить с помощью сервера Memcached (см., например, инструкцию по установке и настройке здесь).
Обеспечиваем безопасность
Для расширения функциональности WordPress используются многочисленные плагины. В этих плагинах постоянно обнаруживаются различные уязвимости, и из-за этого некоторые системные администраторы относятся к ней несколько предвзято. Сайты на базе WordPress действительно часто становятся мишенью для атак, но со временем разработчики совершенствуют плагины, устраняя существующие бреши безопасности. Ниже мы дадим еще несколько советов по настройке WordPress, с помощью которых можно сделать сайт менее уязвимым.
Защититесь от вредоносных программ и уязвимостей в скриптах на сервере, на котором установлен WordPress. Мы рекомендуем использовать сканер ClamAV+Maldet. С инструкцией по установке и настройке AV можно ознакомиться здесь. Для поиска уязвимостей можно также воспользоваться программой WPScan.
Измените префикс таблиц в базе данных. По умолчанию в базе данных WordPress установлен префикс «wp_». Это упрощает использование уязвимостей с MySQL-инъекцией: если известно имя таблицы, в нее гораздо проще вставить вредоносный код, изменить в ней информацию или вообще удалить. В новых версиях WordPress появилась возможность выбора префикса при установке.
Если вы используете раннюю версию WordPress, то изменить префикс можно с помощью специализированных плагинов. Наиболее известным и популярным является Prefix Changer. Следует, однако, учесть, что многие из этих плагинов не всегда работают корректно, поэтому перед их использованием рекомендуется сохранить резервную копию базы данных.
Переместите файл wp-config.php. В файле wp-config.php хранятся важные параметры настройки WordPress, которую желательно защитить от несанкционированного доступа. По умолчанию этот файл сохраняется в корневом каталоге, но его можно переместить на каталог выше. Не обнаружив файла wp-config.php в корневом каталоге, WordPress будет искать его автоматически.
Получите SSL-сертификат и включите SSL-шифрование. Для этого в файл wp-config нужно добавить следующие строки:
/* Enable SSL Encryption */ define(‘FORCE_SSL_LOGIN’, true); define(‘FORCE_SSL_ADMIN’, true);
Удалите информацию о версии WordPress. Если злоумышленник узнает, что вы используете устаревшую версию WordPress, то он может воспользоваться имеющимися уязвимостями и взломать ваш сайт. Поэтому информацию о версии лучше удалить.
Во-первых, нужно удалить файл: ваш_сайт/readme.html, из которого можно без труда узнать, какую версию WordPress вы используете.
Об используемой версии можно также узнать из файла header.php, который находится в папке с темой. Он содержит следующую строку:
<meta name="generator" content="WordPress " />
Можно удалить всю эту строку целиком. Если в файле header.php вашей темы оформления нет такой строки, то, скорее всего она вставляется автоматически WordPress’ом при вызове функции wp_head(). В таком случае удалить информацию о версии из секцииможно, добавив в файл functions.php следующий код:
remove_action(’wp_head’, ’wp_generator’); function selectel_remove_version() { return ’’; } add_filter(’the_generator’, ’selectel_remove_version’);
Измените ключи безопасности. В упомянутом выше файле wp-config.php есть раздел с ключами безопасности. Выглядит он так:
define(’AUTH_KEY’, ’’); define(’SECURE_AUTH_KEY’, ’’); define(’LOGGED_IN_KEY’, ’’); define(’NONCE_KEY’, ’’);
Ключи используются для хэширования паролей. Очень часто на этот раздел не обращают внимания даже опытные пользователи. Между тем изменить ключи безопасности довольно просто: достаточно зайти на страницу https://api.wordpress.org/secret-key/1.1 и скопировать сгенерированные ключи в файл wp-config.php. Эту процедуру достаточно осуществить всего один раз во время первичной настройки сайта.
Ограничьте доступ к папкам wp-content и wp-includes. Из соображений безопасности рекомендуется закрыть доступ к содержимому папок wp-content и wp-includes. Нужно закрыть доступ к любым файлам, кроме графики, JS и СSS. Для этого нужно в каждой папке создать файл .htaccess и поместить в него такой код:
Order Allow,Deny Deny from all Allow from all
Создайте пустой файл wp-content/plugins/index.html. Благодаря этому станет недоступной информация о том, какие плагины вы используете. В плагинах WordPress могут содержаться уязвимости, и этим могут воспользоваться злоумышленники.
Чтобы сделать листинг недоступным, можно также добавить в файл .htaccess, хранящийся в папке с плагинами, следующую строку:
Options -Indexes
Ограничьте доступ к папке wp-admin.
Чтобы ограничить доступ, нужно в этой папке создать файл .htaccess и поместить в него следующий код:
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName «Access Control» AuthType Basic order deny,allow deny from all # указываем, например. IP-адрес домашнего компьютера allow from # здесь указываем адрес один или несколько IP-адресов, с которых мы будем писать в блог на работе allow from allow from
Ограничивать доступ определенным набором IP-адресов не всегда удобно. Можно настроить доступ к папке wp-admin только по паролю. Для этого нужно создать файл .htauth:
$ htpasswd -c /home/yourdirectory/.htauth
И поместить его на один уровень выше директории /public_html/
Затем нужно создать в папке wp-admin файл .htaccess и поместить в него следующий код:
AuthName «Admins Only» AuthUserFile /home/yourdirectory/.htauth AuthGroupFile /dev/null AuthType basic require user <имя пользователя>
Заключение
Настройка даже такой простой и интуитивно понятной CMS, как WordPress — дело довольно непростое и содержащее большое количество нюансов, на которые не всегда обращают внимание даже опытные пользователи.
Тянуто с Хабра
Просто Славянск
Просто Славянск
Правила хорошего тона или Мобильный этикет.
Мобильный телефон сегодня есть у каждого. Это возможность быть на связи, в любое время, куда бы Вы не направились. Но факт обладания трубкой, не учит своих обожаемых владельцев «хорошим манерам». А между тем, соблюдение определенных правил поведения при пользованиисотовым телефоном это проявление вежливости и взаимного уважения. Каждому знакома ситуация, когда находящиеся рядом мучают окружающих своими разговорами по телефону или же ваш собственный «мобильник» звонит в самый неподходящий момент. Немногим известно, что существуют правила этикета и для мобильной связи. Вот о них и пойдет сегодня речь.
1. Согласно правилам хорошего тона в общественных местах, например – библиотека, выставка, театр, кинозал,ресторан или кафе,музей,а также работа (да, да!!!! это тоже общественное место) ваш телефон должен вести себя тихо. А это значит – отключенный звук набора клавиш и виброзвонок.И никаких телефонных разговоров!!! Совсем!!! Да, вообще совсем никаких. Обычно при входе в такое место или началом какого-либо сеанса обычно делается объявление с просьбой перевести телефон в беззвучный режим. Так же могут быть вывешены общепринятые знаки с перечеркнутой телефонной трубкой.Однако использование сотовой связи может создать дискомфорт окружающим не только там где это обозначено. Например, считается неприличным разговаривать в общественном транспорте. Это вполне понятно, ведь громко разговаривающий пассажир, пытающийся перекричать шум двигателя явно будет лишь раздражающим фактором. Для того, чтобы избежать этого, достаточно дождаться своей остановки. Во всех перечисленных ситуациях нужно перевести свой телефон в беззвучный режим, а в случае необходимости такого разговора в данный момент, извиниться перед собеседниками и выйти в другое помещение, где вы спокойно сможете поговорить по телефону. Если возможности выйти нет, так как вы например на улице, отойти от людей на минимум 5 метров. Вы можете поднять трубку в переполненном помещении, но начинать разговор со звонящим следует только после выхода из людного места. Я считаю, что лучше принять звонок до выхода, чем заставлять окружающих слушать мелодию вызова.
2. Следует выключать мобильный телефон в тех местах, где вы встречаете уведомление «Пожалуйста, выключите Ваш мобильный телефон», а также в самолетах и медицинских учреждениях.
3. Не стоит использовать в качестве звонка на вызов или в режиме ожидания то, что может оскорбить других людей, как окружающих, так и звонящих вам. Это касается нецензурной лексики, различных грубых и резких выражений.Да и прежде чем ставить на режим ожидания какую либо мелодию, хорошо подумайте как она будет звучать в разных ситуациях. Например если вам позвонит ваш директор. Или потенциальный партнер по бизнесу. Однажды звоня приличной женщине, бальзаковского возраста, с хорошей должностью,
услышала “Владимирский централ” Двусмысленно….А представьте звонок шефа…а там великолепное исполнение Масяни…с общеизвестным посылом…аха…его самого….директора.
4. Не стоит использовать чужие мобильные телефоны в своих целях, читать с них сообщения и сообщать номера третьим лицам без разрешения их владельцев. Разумеется, данное правило распространяется даже на самых близких друг другу людей: мать не может копаться в телефоне сына, муж – в телефоне жены и т.п.
5. Нежелательно звонить человеку по рабочим вопросам на личный мобильный телефон в его свободное время, а именно до начала и после завершения официального рабочего дня, а также на выходные и праздники. На личные звонки также существуют ограничения с 9 утра до 22 вечера. Если все же необходимо нарушить эти правила и позвонить, но только если повод для звонка действительно очень важный и совершенно не может ждать, извинитесь за беспокойство и спросите о возможности говорить с вами именно сейчас. Не забывайте учитывать разницу во времени,если звоните в другую страну или далёкий город.
6. Большинство современных моделей телефонов помнят номера, с которых им был сделан вызов, и сообщают своим владельцам о пропущенных звонках. Если вам не ответили немедленно, не нужно звонить пока у вас или у вашего абонента сядет батарея, либо до тех пор пока вам не ответят — наберитесь терпения и подождите, когда вам смогут перезвонить. Например как-то, будучи у врача, после приема я обнаружила 47 непринятых вызовов. От одного человека. За 20 минут. Причина настойчивости? Очень проста – узнать на работе ли я уже. Аха…в собственный выходной день. С утра пораньше. Только вас и жду. А теперь представьте что было бы, если бы звук был включен?Лежа на кресле стоматолога или например, гинеколога, не очень то поскачешь за телефоном((( В том случае если Вам не перезвонили, спустя 2 часа, мобильный этикет позволяет совершить повторную попытку дозвониться.
7.Ваш телефон оснащен фото и видео камерой? Запомните – снимать других людей, без их согласия, это дурной тон. Более того, за подобную любовь к фотографии могут и привлечь к суду. Или просто начистить физиономию.
8.Слушать музыку, используя мобильные динамики в общественном месте очень неприлично. Если уж очень хочется, используйте наушники.
9.Хвастаться крутостью своего телефона может только ребенок до тринадцати лет. Взрослого и воспитанного человека такое поведение не достойно. Телефон в первую очередь, средство коммуникации, а не статуса. Так, что держать его на виду и демонстрировать каждому, не стоит.
10.Записывайте в телефонную книгу абонентов только под именами и фамилиями. Не стоит использовать клички или прозвища. Это может обидеть.
11.Не стоит постоянно использовать гарнитуру. Это должно быть уместно. Кстати, разговаривающий сам с собой человек, идущий по улице, странно смотрится, не правда ли?
12.Когда Вы находитесь за рулём автомобиля, разговаривать по мобильному телефону можете только посредством гарнитуры. Но и этого лучше избегать. Ни в коем случае не берите мобильный телефон в руки во время движения,в лучшем случае вы заплатите штраф, в худшем – могут пострадать люди.
13.Согласно правилам хорошего тона, не стоит класть сотовый телефон на стол в ресторане или кафе.
14. Когда Вы звоните кому-либо на мобильный телефон, сразу же после взаимных приветствий обязательно поинтересуйтесь, удобно ли абоненту сейчас разговаривать. А также следует узнать, сколько времени он сможет уделить сейчас общению с Вами по мобильному телефону. В завершение общения желательно звонящему выразить благодарность собеседнику за то, что тот смог уделить ему время, и закончить разговор. А вот трубку после прощания первым лучше пусть положит тот, кому звонили.
15.Разговаривая по мобильному телефону лучше улыбаться.Говорить стоит внятно и достаточно громко, чтобы на другом конце никто не мучился, разбирая ваши слова.Не стоит закатывать скандал – эмоции это не телефонный разговор.Не стоит тратить своё и чужое время на пустую и бессмысленную болтовню.Особенно если это деловой разговор.
Основное правило этикета мобильной связи, можно выразить так – будь взаимно вежлив с окружающими.
Это к тому же еще и создаст хорошее впечатление о Вас и улучшит оценку окружающих.
“Относись к окружающим так, как ты хочешь, чтобы они относились к тебе”
Годовщина Чернобыля. 28 лет.
Прошло 28 лет с момента катастрофы на Чернобыльской АЭС, последствия
которой специалисты со всего мира устраняют до сих пор. Миллионы
людей, участвовавшие в ликвидации аварии, рискуя своими жизнями,
делали все возможное, чтобы снизить уровень радиационного заражения.
На 25 апреля 1986 года была запланирована остановка 4-го энергоблока
Чернобыльской АЭС для очередного планово-предупредительного ремонта.
Во время этой остановки должны были пройти очередные испытания и
мощность реактора постепенно снижали. Катастрофа произошла в 1:23 по
местному времени. Прогремел мощнейший взрыв и 4-й энергоблок был
В описаниях действий той ночи и причин аварии до сих пор очень мало
абсолютных фактов. Есть и нажатие кнопки аварийной защиты А3-5
(правда, не выяснено до конца, до взрыва её нажали или после),
версия землетрясения, приведшего ко взрыву, версия шаровой молнии…
Так или иначе, очевидно, что в первые часы после катастрофы истинных
масштабов произошедшего не оценил никто.
В эти первые дни происходило беспрецедентное утаивание информации:
тогда как СМИ Европы сообщали о катастрофе и внимательно следили за
движением воздушных потоков, несших смертельное заражение, на
Украине и в Белоруссии вовсю готовились, а потом и встречали
Первомай…
День 26 апреля 1986 года навсегда стал чёрной датой в истории
России, Украины и Белоруссии. Вышедший из-под контроля человека
мирный атом на 4-м блоке Чернобыльской АЭС показал всему миру, каких
бед он может натворить. И натворил. За короткое время радиационный
пепел выпал на обширные территории. Последствия трагедии в Чернобыле
затронули судьбы миллионов людей. Только в нашей стране пострадало
16 регионов. Более 59 тысяч квадратных километров территории
Российской Федерации были загрязнены радиоактивными веществами. В
ликвидации последствий атомной стихии приняли участие 200 тысяч
россиян. Многие из тех, кто в 1986-1990 годы вёл жестокий бой с
вышедшей из-за контроля радиацией, выполняя свой гражданский или
воинский долг, не думали об опасности. Ценой здоровья, а иногда и
жизни они спасли мир от более страшных последствий катастрофы. Их по
праву называют героями Чернобыля. Они и сегодня на переднем крае,
продолжают жить, работать, растить детей.
До сих пор в загрязненных радиацией регионах Украины, Белоруссии и
России проживают 5 млн человек. По данным Союза “Чернобыль” России,
на апрель 2014 года около 9 тысяч только российских ликвидаторов
аварии умерли, свыше 55 тысяч стали инвалидами.
“Чернобыль” поставил немало вопросов российским атомщикам, главным
из которых стала безопасность. Все последующие годы в отрасли были
практически полностью пересмотрены устаревшие технологические
решения и разработаны системы, которые, по словам специалистов,
полностью исключают возможность подобной аварии.
“Сама промышленность очень сильно изменилась после Чернобыля. На
всех блоках АЭС была проведена огромная программа по модернизации с
большим финансированием. Она включала более современные системы
безопасности, более современное топливо и лучшее регулирование”, –
рассказал член-корреспондент РАН, директор Института проблем
безопасного развития атомной энергетики.
“В течение 28-ми лет вся мировая и российская энергетика работала
для того, чтобы избежать аварии, подобной Чернобылю. Произошла
модернизация всех станций. Сегодня атомная энергетика – это
великолепные технологии, – отметил президент НИЦ “Курчатовский
институт” Евгений Велихов. – В угольной и газовой промышленности
происходят взрывы, выбросы и химическое загрязнение. Согласно
статистике, именно в атомной энергетике погибло меньше всего людей.
Надо научиться делать атом безопасным так, чтобы это никак не
задевало благополучие граждан”.
Много воды утекло с тех пор…Сама страна в которой произошла
катастрофа уже прекратила свое существование…
В дни, когда весь мир склоняет головы перед памятью жертв катастрофы
на Чернобыльской АЭС, выражаю искреннее соболезнование родным и
близким погибших, а также хочу пожелать здоровья и успехов всем
ликвидаторам-чернобыльцам, их родным и близким.
Правила приличия и этикета, которые должен знать каждый
Сегодня мы начинаем серию публикаций по правилам этикета. Многие из перечисленных пунктов знает далеко не каждый. Будем бороться вместе с невоспитанностью.
Пункт 1
Цветы, которые можно подарить мужчине: хризантемы, розы, гвоздики, дельфиниумы, орхидеи, бамбук, каллы, лилии, антуриумы, гладиолусы, тюльпаны, ирисы, герберы, плюмерии, геликонии, маргаритки, подсолнухи.
Когда дарите мужчинам цветы не следует забывать и о цветовой гамме, Приветствуются такие цвета: фиолетовый, бордовый, белый, синий, зеленый.
Случаи, когда цветы мужчине дарить принято:
1) Премьера фильма;
2) Концертная премьера;
3) Издание книги;
4) Публикация статьи;
5) Серьезное открытие;
6) День Рождения;
7) Вручение какой-либо премии;
8) Спортивный рекорд.
Считается, что начальнику лучше дарить каллы зеленого или изумрудного цвета. Композицию и ее составление лучше доверить флористам – профессионалам.
Пункт 2
Рукопожатие
С женщинами не принято здороваться за руку, но если она протягивает руку первой, следует пожать ее, но не так крепко как мужчинам. Но твое рукопожатие не должно быть слабее, чем женщины или она решит, что ты слабак.
Старший по возрасту подает руку первым, учитель или наставник – ученику, начальник — подчиненному. Не стоит менять правила игры, хоть касты в нашем обществе и отсутствуют, вы можете вызвать неприятие и непонимание у окружающих или просто попасть в неловкую ситуацию.
При пожатии руки стоит смотреть в глаза и немножко улыбнуться в знак дружеского расположения. Отводить глаза или вообще смотреть в сторону при рукопожатии неуважительно. Иногда отвод глаз воспринимается как лживость и служит сигналом, что доверять такому человеку нельзя.
Пункт 3
По правилам этикета тарелку с супом во время еды нужно наклонять ОТ СЕБЯ! Некоторые источники пишут, что наклонять вообще нельзя.
Пункт 4
Мужчины ВСЕГДА должны вставать, когда дама выходит из-за стола! И кстати когда дама входит в помещение!
Пункт 5
Нет ничего плохого, когда муж называет жену “зайка”, а она его “зайчик”. Однако эти ласкательные прозвища не предназначены для посторонних ушей!
Находясь не наедине, лучше называть друг друга по имени.
Пункт 6
Иногда очень приятно выпить напиток через соломинку, но в таких случаях не следует высасывать его до последней капли, так как пронзительное бульканье внесет некоторый диссонанс в общую беседу.
Пункт 7
Вот основные современные правила этикета в ресторане:
а) Резать большие куски на более мелкие;
б) Когда блюдо едят руками, не нужно горбиться и вторгаться локтями в пространство соседа, локти вообще широко расставлять за столом не следует;
в) На очень горячую пищу дуть нельзя, нужно дождаться, пока она остынет;
г) Во время еды руками лучше откусывать по чуть-чуть;
д) Использовать салфетку и не облизывать пальцы;
е) Всегда промокать рот салфеткой;
ж) Никогда не вытирать рот рукой и не говорить с набитым ртом;
з) Даже если все вокруг едят руками, вполне приемлемо есть самому вилкой и ножом;
и) Никогда не стоит класть телефон на стол.
Пункт 8
Жевать жевательную резинку на публике и во время беседы, считается вульгарным!
Пункт 9
Верхом невоспитанности, считается во время разговора отвлекаться на свои часы, мобильный телефон или записную книжку. Если вас прервал очень важный звонок, извинитесь перед собеседником и отойдите в сторону, а еще лучше выйдите из помещения. Позже я отдельно коснусь правил поведения касающихся мобильного телефона.
Даже если Вы устали и Вам скучно, не показывайте этого собеседнику!
Пункт 10
На лестнице:
– Если на лестнице оказываются мужчина и женщина, то поднимаясь, мужчина должен оставить женщину позади себя, а спускаясь, нужно наоборот, чтобы женщина оказалась впереди. Но если лестница слишком узкая, крутая или темная, то мужчина должен идти впереди женщины.
– Женщина, идя по лестнице, должна выбрать ту сторону, которая с перилами. Она может не отходить от перил, если встретит на пути мужчину, даже если это противоречит правилам правостороннего движения.
– Мужчина, находясь на лестнице, должен уступать место у перил женщинам, пожилым людям и детям.
– Если мужчина поднимается по лестнице, держа женщину под руку, то подвигаться корпусом он должен ровно настолько, чтобы служить достаточной опорой женщине, но при этом не двигаться порывисто и не тянуть ее вперед, так же себя мужчина должен вести и спускаясь с женщиной по лестнице.
– Если вы встречаетесь на лестнице с человеком, несущему тяжелую ношу, то следует приостановиться или сойти на ближайшую площадку и уступить ему дорогу.
Источник – всемирная паутина
Почему я принимаю Велнес-пэк?
Наверное каждый из вас задумывался о факте приема витаминов. То что они нужны нашему организму уже давно является неоспоримым фактом. Каждый день наш организм работает как часики. И в зависимости от того что мы в него кладем, часики бывают разными))) У кого-то это старый, покрытый ржавчиной и скрипящий механизм. У кого-то слегка разболтанный и все время опаздывающий. Есть и такие, чьи колесики крутятся немного быстрее чем нужно. От чего же это зависит и как сделать так чтобы ваш организм работал исключительно правильно, как хорошие швейцарские часы? Ответ прост – кормите его правильно! Давайте ему все необходимые вещества и он вас порадует точной работой!!! Нужно ему всего-лишь небольшое кол-во витаминов и минералов. Но каждый день! Так как не все они имеют свойство накапливаться, к тому же еще и расходуются каждую минуту. Несколько лет назад я начала задумываться над приемом витаминно-минерального комплекса, но планомерно отвергала все имеющиеся в продаже. Какие-то не вызывали доверия в происхождении, какие-то не отвечали требованием по дозировкам. В тот момент я уже знала о существовании Велнесс от Орифлэйм, но не придавала ему должного значения.
Все таки косметическая компания))) При чем тут казалось бы витамины? И только спустя некоторое время пришло понимание – красота и здоровье очень взаимосвязаны. На тот момент мы с мужем уже 2,5 года безуспешно пытались зачать третьего ребенка. Никаких явных проблем не было. Но беременность не наступала.В это же время я попала на лекцию врача здорового питания, где услышала для себя зачем нам нужны витамины и минералы, почему каждый день.Почему мужчинам и женщинам они нужны в разных пропорциях.Зачем нам нужны антиоксиданты и омега-3. В этот же день мной были приобретены 2 упаковки Велнес-пэк. Для мужа, себя и моих дочерей. Ведь в нем есть все это. И омега, и астаксантин, и витаминно-минеральный комплекс. А самое главное – они отдельно для мужчин и отдельно для женщин. После 2,5 месяцев приема я начала замечать интересные изменения в своем организме.Сначала даже не поверила, так как надежда была практически потеряна))) Но тест все поставил на свои места. Мы будем родителями. В третий раз.Мой организм
заработал как швейцарские часики и начал выполнять все свои функции правильно.
Сейчас нашей дочери уже 1 год и 4 месяца.Всю беременность и во время кормления я продолжала принимать Велнес-пэк. Беременность в мои 32 года протекала великолепно!!! Никакого токсикоза,никакой усталости, шикарный аппетит и огромное кол-во энергии!!!
Гемоглобин ни разу не упал ниже нормы. Во время первых 2 беременностей я постоянно боролась с анемией,лежала по несколько раз в больнице на сохранении. Ничего этого не было в этот раз. Сами роды прошли очень хорошо, а после родов,
через 2 часа открылось обширное внутреннее кровотечение. Врачи справились с этим, но предстоял путь восстановления. И знаете что самое интересное? Уже на следующий день мой гемоглобин был 84. Врач хлопал в ладоши, видя мой анализ крови, никто не ждал такого результата. Уже решался вопрос о вливании крови. Оно конечно же не понадобилось. Со мной в палате лежали девочки после планового кесарево, у них гемоглобин был ниже чем у меня)))
На 5 сутки мы отправились домой.Полностью восстановилась я уже через месяц.
Причем проявлялось это только в небольшой слабости. Василиса родилась здоровой и крепкой. Активно развивается,даже немного опережая свой возраст, все специалисты,
включая невропатолога не находят никаких отклонений. А вся моя семья чувствует себя великолепно! Старшие девочки активны и редко болеют простудными заболеваниями, несмотря даже на то,что карантины в городе никто не отменял)))
Нужно ли мне еще какое-то доказательство?
Нет. Я свой выбор сделала. Мы всей семьей принимаем витамины каждый день!
Велнес-пэк от Орифлэйм это наш выбор.
Программу постоянного покупателя можно оформить связавшись со мной n.igoshina@gmail.com
Не вставайте у меня на пути — я строю мир
Здравствуйте. Я — русский. Так сложилось исторически.
Я оккупировал Сибирь.Теперь там добывают нефть, газ, алюминий и еще кучу всего полезного. Теперь там города, в которых стоят многоэтажные дома, детские сады, горячая вода и больницы.
Теперь там нельзя продавать женщин за вязанку соболиных шкурок, как это было до оккупации.
Я оккупировал Прибалтику. Построил там заводы, электростанции и школы на месте смешных хуторов. Русская Прибалтика делала высококлассную радиотехнику и автомобили, славилась духАми и бальзамами. Меня попросили оттуда уйти.
Теперь на месте знаменитого завода VEF и других заводов развалины. Помните, как от Калининграда до Сахалина рассекали дороги прибалтийские микроавтобусы РАФ? Так теперь от этого завода остались только заброшенные цеха. У Прибалтики теперь НЕТ своей промышленности. А часть трудоспособного населения чистит евроунитазы во второсортных отелях в хвалёном ЕС.
Я оккупировал Среднюю Азию. Построил там каналы, заводы, космодромы, больницы и стадионы. Там строили космические ракеты и самолеты, нефтегазовое и химическое оборудование, добывали медь, нефть и золото, выращивали пшеницу и хлопок для всей страны. Меня попросили оттуда уйти.
Теперь там добывают американские кредиты и выращивают коноплю, а половина трудоспособного
населения уехала работать на стройках бывших оккупантов.
Я оккупировал Украину. И там Я тоже построил заводы и электростанции, мосты и фабрики, шахты и университеты. Украина делала самолетные двигатели, корабли, танки, автомобили. Меня попросили оттуда уйти.
Теперь там производят “майданы” в товарных количествах. А больше там ни хера не производят, но уверены в том, что Европа их ждет с распростертыми объятиями…
И знаете что? Меня достало извиняться за то, что Я оккупант. Да, Я ОККУПАНТ. По праву рождения.
Устройство автомата Калашникова, я знаю лучше, чем устройство соски для молока. Я агрессор и кровожадный урод. Бойтесь… Это Я сжег Москву, чтобы не отдать ее Наполеону Бонапарту, но как кончил Бонапарт?…
Это Я сидел в окопе у Волоколамска, и горел в танке под Курском, понимая, что немцев удержать
невероятно трудно, но по другому просто никак. Где сегодня те немцы, где их Гитлер?…
Я оккупант, но в демократической Европе об этом не знали, поэтому именно ко мне домой ,
на мою землю, приходили все, кому не лень. Турки, англичане, поляки, немцы, французы.
Земли им хватило на всех — по 2,5 метра на каждого. Американцы, правда , приходить опасаются.
Наверное, они всё же слегка меня боятся. Они надеются на свои ракеты, майданы, смешного
Тягнибока, гражданина Германии КлЯчко, и разных других своих друзей и соратников.
Но и для них у нас земли много — хватит на всех, с избытком. Кстати, кто-нибудь знает, что за национальность такая “американец”?…
Я был, есть и буду русским оккупантом.
Мне чужого не надо, но свое я никогда не отдам. Мне не нужна ваша лицемерная свобода от того,
чтобы быть человеком, мне не нужна гнилая демократия капитализма, мне чужды двуличные
понятия и все то, что вы называете западными ценностями — извращения, пороки, обман и
бесконечная жадность… У меня другие интересы. Русскому оккупанту больше интересны космос, образование, медицина, наука и развитие творческих способностей человека. Русскому оккупанту нравится созидать.
И не вставайте у меня на пути — я строю мир.Я люблю мир, но воевать я умею лучше всех… Не будите Лихо, мои хорошие евро-американские друзья, пока оно тихо.. Ну, это просто так у нас говорится…
Краткий обзор контейнеров
Open source решения на базе Linux для создания виртуальных окружений
Встречайте героев сегодняшнего рассказа!
Поименно:
- KVM
- Xen
- Linux VServer
- OpenVZ
- LXC (Linux Containers)
Таблица: сравнение имеющихся технологий для реализации виртуальных окружений в Linux
Хотелось бы отметить, что Oracle VirtualBox был не включен в таблицу осознанно, так как не является полностью открытым, а в статье мы рассматриваем только открытые технологии.
Данная таблица позволяет легко сделать выводы, что готовых для промышленного использования технологий на сегодняшний день всего три: KVM, Xen и OpenVZ. Также очень активными темпами развивается технология LXC и по этой причине мы просто обязаны ее рассмотреть. Все четыре технологии в свою очередь реализуют два подхода к изоляции — полная виртуализация и контейнеризация, о них мы и поговорим.
Полная виртуализация
Давайте отойдем от сугубо теоретических описаний и посмотрим наглядную схему на примере KVM.
Как Вы видите, у нас имеется три уровня:
- Аппаратное обеспечение (Disk, NIC, CPU, Memory на изображении — система хранения, сетевые устройства, процессор и память)
- Linux ядро (совершенно любое, из любого более-менее современного дистрибутива, но рекомендуется 2.6.32 и выше; для определенности назовем его HWN, HardWare Node)
- Виртуальные машины (клиентские ОС), работающие как обычные процессы в Linux системе рядом с обычными Linux демонами
Все взаимодействие здесь довольно прозрачно — базовое ядро Linux (HWN) взаимодействует с железом (процессор, память, ввод-вывод), и в свою очередь обеспечивает возможность работы процессов, в которых и крутятся с помощью специального модуля ядра полноценные ядра Linux, FreeBSD или даже Windows. Стоит обратить внимание, что это не совсем обычные процессы, работа виртуальных машин обеспечивается посредством модуля ядра (KVM) осуществляющего трансляцию системных вызовов из клиентской операционной системы к HWN. Данное описание работы нельзя считать полностью корректным, но оно полностью передает смысл данного подхода.Самое важное на что стоит обратить внимание, что трансляция из вызовов клиентской ОС в вызовы HWN осуществляется с помощью специальной технологии процессора (AMD-V, Intel VT).
Недостатки данного типа изоляции сводятся к дополнительным задержкам в работе дисковой подсистемы, сетевой подсистемы, памяти, процессора из-за использования дополнительного аппаратно-программного слоя абстракции между реальным железом и виртуальной средой. Силами различных технологий и подходов (например, программный virtio, аппаратный VT-d) эти задержки сводятся к минимуму, но устранить их полностью не удастся никогда (разве что виртуализацию встроят в железо) по причине того, что это дополнительный слой абстракции, за который нужно платить.
Затраты на реализацию полной виртуализации
Согласно недавним исследованиям IBM оверхед (это разница между производительностью приложения внутри виртуального окружения и того же приложения работающего без использования виртуализации вообще) технологии KVM при вводе-выводе составляет около 15% при тестировании на SUSE Linux Enterprise Server 11 Service Pack 3.
Также есть очень интересное тестирование, представленное в Journal of Physics: Conference 219 (2010), в котором озвучиваются цифры: 3-4% оверхед для процессора, и 20-30% для дискового ввода-вывода.
В это же время в презентации RedHat за 2013й год озвучивается цифра в 12% (то есть 88% производительности конфигурации работающей без виртуализации).
Разумеется, эти тесты проведены в разных конфигурациях ПО, для разных паттернов нагрузки, для разного оборудования и я даже допускаю, что часть из них проведены некорректно, но суть их сводится к одному — накладные расходы (оверхед) при использовании как KVM, так и Xen достигают 5-15% в зависимости от типа используемого по и конфигурации системы. Согласитесь, немало?
Контейнеризация
Поступим аналогично, воспользуемся иллюстрацией.
Сразу хочется оговорится, что все сказанное ниже справедливо как для OpenVZ, так и для LXC. Эти технологии очень и очень похожи и являются крайне близкими родственниками (эту тему я постараюсь раскрыть в следующей своей публикации).
Хоть и изображение нарисовано в немного ином стиле, сразу же бросается в глаза ключевое отличие — ядро используется лишь одно и никаких виртуальных машин (VM) нет в помине! Но как же оно работает? На низком уровне все происходит аналогично — Linux ядро HWN взаимодействует с аппаратным обеспечение и выполняет все запросы, касающиеся обращения к аппаратной части, из виртуальных окружений. Но как же виртуальные окружения отделены друг от друга? Они отделены с помощью встроенных в Linux ядро механизмов!
В первую очередь это видоизмененный аналог chroot (видоизменения касаются в первую очередь защиты, чтобы не было возможности вырваться из chroot’нутого окружения в корневую файловую систему), который всем нам хорошо знаком, он позволяет создать изолированные друг от друга иерархии внутри одной файловой системы. Но chroot не позволяет, например, запустить свой собственный init процесс (pid 1, так как на HWN уже существует init процесс с данными PID), а это обязательное требование, если мы хотим иметь полностью изолированную клиентскую ОС внутри контейнера. Для этого используется механизм PID namespaces, который внутри каждого chroot окружения создает полностью независимую от HWN систему идентификаторов процессов, где мы можем иметь свой собственный процесс с PID 1 даже если на самом сервере уже запущен init процесс. В общем случае, мы можем создать сотни и даже тысячи отдельных контейнеров, никак не связанных друг с другом.
Как же при этом ограничивается память, нагрузка на процессор и жесткий диск? Они ограничиваются также посредством механизма cgroups, который, к слову, также используется и для точь-в-точь тех же самых целей в технологии KVM.
Затраты на реализацию контейнеризации
Как мы обсуждали ранее, любая технология изоляции имеет оверхед, хотим мы этого или не хотим. Но в случае контейнеризации этот оверхед ничтожно мал (0.1-1%) за счет того, что используются очень простые преобразования, который зачастую можно объяснить буквально на пальцах. Например, изоляция PID процессов и пространств сокетов осуществляется посредством добавления дополнительного 4-х байтного идентификатора, обозначающего, к какому контейнеру принадлежит процесс. С памятью все немного сложнее и происходит ее определенная потеря (из-за особенностей выделения памяти), но на скорость выделения и работы с памятью это почти не влияет. С дисковой системой и подсистемой ввода вывода ситуация аналогична. В цифрах оценки оверхеда для OpenVZ приводятся в работах — инженеров HP и исследователей из Университета Бразилии для HPC и они находятся в районе 0.1-1% в зависимости от типа нагрузки и методики тестирования.
Контейнеризация против виртуализации
Вот мы и подошли к теме заявленной в самом начале! Мы обсудили оверхед технологий полной виртуализации и технологий контейнеризации, теперь самое время сравнить их напрямую между собой. Обращаю внимание, что в некоторых тестах вместо OpenVZ используется его коммерческая версия PCS, это имеет минимальное влияние на тесты, так как ядро используемое как в открытой, так и коммерческой ОС полностью идентично.
В сети довольно мало качественно проведенных тестов с участием всех трех игроков и почти все они проведены компанией Parallels, которая в свою очередь разработчик OpenVZ. Если приводить такие тесты без возможности их проверки и повторения — могут возникнуть вопросы о предвзятости.
Я довольно долго думал как этого добиться и мне в руки попался чудесный документ, в котором KVM, XEN и OpenVZ/PCS тестируются на основе тестовой методологии разработанной компанией Intel — vConsolidate, а также стандартизированного LAMP теста, что позволяет проверить все результаты в домашних условиях и убедиться в их истинности.
Так как данный тест сугубо в попугаях, я не стал приводить его промежуточных графиков и вывел итоговые результаты. Как можно видеть — преимущество OpenVZ на лицо. Разумеется, компания Intel учла многое в своем тесте, но все же очень сложно интерпретировать эти цифры.
Поэтому предлагаю более понятный LAMP тест, из того же документа от Parallels, он тестирует производительность LAMP приложения в зависимости от числа запущенных виртуальных окружений:
Тут все намного понятнее и четко виден почти 2-х кратный прирост в суммарном числе транзакций выполняемых LAMP приложением! Чего же еще можно пожелать? 🙂
Разумеется, можно было охватить еще больше тестов, но, к сожалению, мы итак сильно вышли за рамки типовой Хабра-статьи, поэтому милости прошу вот сюда.
Надеюсь, я смог Вас убедить в том, что решения на базе контейнеризации позволяют выжать из железа почти всю возможную его мощность
Контейнеризация — это будущее облаков!
В данной статье мы попробовали доказать, что эффективность использования аппаратных ресурсов при использовании контейнеризации вместо полной виртуализации позволяет экономить до 10% (мы берем среднюю оценку) всех вычислительных ресурсов сервера. Довольно сложно судить в процентах, намного проще представить, что у Вас было 100 серверов и они решали некую задачу с использованием полной виртуализации, то внедрив контейнеризацию можно освободить почти 10 полноценных серверов, которые потребляют много электричества, занимают место (которое стоит очень дорого в случае современных ЦОД), стоят сами по себе много денег, а также требуют персонала для их обслуживания.
Как же уйти от абстрактных «дорого» к реальным цифрам? Наиболее весомую экономию нам дает экономия на электричестве. Затраты на электричество, по данным Intel, составляют почти 10% всех операционных затрат на эксплуатацию Дата Центров. Которые в свою очередь, по данным Агентства Защиты Окружающей среды, US EPA, потребляют суммарно почти 1.5% всего электричества вырабатываемого в США. Таким образом, мы не просто экономим средства компаний, но и вносим значительный вклад в сохранение экологии за счет меньшего потребления электричества и более эффективного его использования!
Также стоит отметить, что самые крупные системы вычислений в мире — собственные облака Google, Yandex, Heroku и многих-многих других построены именно с использование технологии LXC, что еще раз доказывает преимущество контейнеризации в облачных вычислениях и показывает на примере реальных компаний.
Кроме того, обе озвученные технологии контейнеризации — OpenVZ и LXC имеют свободные лицензии и крайне активно развиваются и LXC (пусть, частично) есть на почти любом Linux сервере установленном в последние год-полтора. Открытые лицензии и активное сообщество разработчиков — залог успеха технологии в ближайшем будущем.
Цельнотянуто с Хабра