Отключить REST API в WordPress

Начиная с WordPress 4.4 в ядро CMS добавлена поддержка REST API. Поддержка REST API выводит функционал WordPress совершенно на новый уровень, но в данный момент в большинстве случаев нет никакой необходимости. Чтобы отключить REST API в WordPress, необходимо просто добавить в файл functions.php соответствующие фильтры.

Отключить сам REST API:

add_filter('rest_enabled', '__return_false');

Отключить фильтры REST API:

remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');
remove_action('wp_head', 'rest_output_link_wp_head', 10, 0);
remove_action('template_redirect', 'rest_output_link_header', 11, 0);
remove_action('auth_cookie_malformed', 'rest_cookie_collect_status');
remove_action('auth_cookie_expired', 'rest_cookie_collect_status');
remove_action('auth_cookie_bad_username', 'rest_cookie_collect_status');
remove_action('auth_cookie_bad_hash', 'rest_cookie_collect_status');
remove_action('auth_cookie_valid', 'rest_cookie_collect_status');
remove_filter('rest_authentication_errors', 'rest_cookie_check_errors', 100);

Отключить события REST API:

remove_action('init', 'rest_api_init');
remove_action('rest_api_init', 'rest_api_default_filters', 10, 1);
remove_action('parse_request', 'rest_api_loaded');

Отключить Embeds связанные с REST API:

remove_action('rest_api_init', 'wp_oembed_register_route');
remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);

Установить Disqus в WordPress

Для установки Disqus в WordPress можно использовать официальный плагин Disqus Comment System. И хотя это самый простой вариант, он подходит не для всех сайтов. Для некоторых шаблонов WordPress этот плагин работает некорректно. В результате, после установки Disqus в WordPress, блок комментариев ломает дизайн.

Поэтому, вместо использования плагина, гораздо удобнее добавить код Disqus непосредственно в файл темы WordPress. Предварительно удалите из вашего шаблона WordPress весь код, который отвечает за вывод встроенных комментариев WordPress. Затем добавьте в файл functions.php код функции ниже:

function disqus_embed() {
global $post;
$disqus_shortname = 'DISQUS_NAME';
echo '<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "'.get_permalink($post->ID).'";
this.page.identifier = "'.$disqus_shortname.'-'.$post->ID.'";
};
(function() {
var d = document, s = d.createElement("script");

s.src = "//'.$disqus_shortname.'.disqus.com/embed.js";

s.setAttribute("data-timestamp", +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>';
}

Замените DISQUS_NAME на ваш идентификатор в Disqus. Для вывода блока комментариев, необходимо добавить в файл comments.php:

<?php if (comments_open()) : ?>
<?php disqus_embed(); ?>
<?php endif;?>

Изменить шрифт в WordPress

В данной записи рассмотрим как изменить шрифт в WordPress на примере стандартной темы Twenty Fifteen. По умолчанию тема использует веб-шрифты Google Fonts. Прежде чем изменять шрифт, необходимо предварительно подключить свой набор шрифтов.

Для этого идем на сайт Google Fonts и получаем ссылку на коллекцию шрифтов. Затем чтобы изменить шрифт в WordPress, открываем файл шаблона functions.php и добавляем в него следующие строки:

function load_fonts() {
    // Отключаем стандартные шрифты
    wp_dequeue_style( 'twentyfifteen-fonts' );
    // Подключаем свой набор шрифтов
    wp_enqueue_style( 'google-fonts', 'https://fonts.googleapis.com/css?family=PT+Sans:400,700|Roboto+Mono:400,700&subset=latin,cyrillic');
}
add_action('wp_print_styles', 'load_fonts');

С помощью кода выше сначала мы отменили загрузку стандартных шрифтов, а затем добавили в очередь свой собственный свой набор шрифтов.

Во второй строке вам необходимо изменить id twentyfifteen-fonts на свое значение. Его достаточно просто определить, просто найдите соответствующий параметр в исходнике страницы. Для стандартной темы он выглядит следующим образом:

<link rel='stylesheet' id='twentyfifteen-fonts-css'  href='https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic|Noto+Serif:400,700,400italic,700italic|Inconsolata:400,700&subset=latin,cyrillic' type='text/css' media='all' />

Теперь, для того чтобы изменить шрифты в WordPress, измените названия шрифтов в файле style.css вашей темы.

Переключить тему с помощью кода в WordPress

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

По умолчанию в WordPress нет возможности автоматически переключать темы. Но данный недостаток легко устраняется специальным плагином. Плагин поддерживает родительские и дочерние темы WordPress. По умолчанию плагин устанавливает разные темы для посетителей и администраторов сайта. Но при желании, плагин можно легко изменить таким образом, чтобы WordPress переключал тему по cookie или другим условиям.

<?php
/* 
Plugin Name: Theme Switcher
Plugin URI: http://codebeer.ru
Description: Different WordPress theme, depending of the current user
Author: SK
Version: 0.1.0
Author URI: http://codebeer.ru
*/

$theme_name = 'Code.Beer';
$theme_list = array();

add_action('plugins_loaded', 'start', 1);

function start() {
    if ( current_user_can('manage_options') ) {
        $GLOBALS["theme_list"] = get_theme_list();
        add_filter('stylesheet', 'load_style');
        add_filter('template', 'load_theme');
    }
}

function load_style() {
    foreach ($GLOBALS["theme_list"] as $theme) {
        if ($theme['Name'] == $GLOBALS["theme_name"]) {
            return $theme['Stylesheet'];
	}
    }	
}

function load_theme() {
    foreach ($GLOBALS["theme_list"] as $theme) {
        if ($theme['Name'] == $GLOBALS["theme_name"]) {
            return $theme['Template'];
        }
    }
}

function get_theme_list() {
    $wp_themes = array();

    foreach (wp_get_themes() as $theme) {
        $name = $theme->get('Name');
        if ( isset( $wp_themes[ $name ] ) )
            $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme;
        else
            $wp_themes[ $name ] = $theme;
	}

        return $wp_themes;
}

Дочерняя тема WordPress

Дочерняя тема WordPress служит своего рода надстройкой, используемой для изменения и дополнения функционала родительской темы. Главное преимущество дочерней темы — возможность безопасного обновления родительской темы без риска при этом потерять ранее внесенные изменения. В этой статье я расскажу как создать простую дочернюю тему.

Создать дочернюю тему в WordPress очень просто. Самая простая дочерняя тема состоит всего из одного файла. Для этого в themes создайте каталог дочерней темы и положите в него файл style.css следующего содержания:

/*
Theme Name:     Дочерняя тема WordPress
Theme URI:      http://codebeer.ru/
Description:    Описание для дочерней темы
Author:         Code.Beer
Author URI:     http://codebeer.ru/
Template:       twentyfifteen
Version:        0.1.0
*/

Краткое описание каждой строки:

  • Theme Name — название дочерней темы.
  • Theme URI — адрес сайта дочерней темы.
  • Description — описание дочерней темы.
  • Author URI — адрес сайта автора дочерней темы.
  • Author — имя автора дочерней темы.
  • Template — название папки родительской темы.
  • Version — версия дочерней темы.

Файл стилей родительской темы полостью заменяет стили родительской темы. Если вы планируете использовать стили родительской темы, используя директиву @import, выполните импорт стилей родительской темы.

/*
Theme Name:     Дочерняя тема WordPress
Theme URI:      http://codebeer.ru/
Description:    Описание для дочерней темы
Author:         Code.Beer
Author URI:     http://codebeer.ru/
Template:       twentyfifteen
Version:        0.1.0
*/

/* Импорт стилей родительской темы */
@import url("../twentyfifteen/style.css");

/* Далее идут стили дочерней темы */
#site-title a {
    color: #009900;
}

Файлы шаблона дочерней темы

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

В отличии от других компонентов темы, файл functions.php дочерней темы дополняет функции, описанные в родительской теме. Дочерняя тема может переопределить функцию PHP родительской темы, для этого просто объявите ее снова.

Если для использования функции require_once, вам нужно указать расположение файлов, которые находятся внутри папки дочерней темы, используйте get_stylesheet_directory():

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Установить Ghost в Debian

Мне давно хотелось пощупать Node.js поближе, но все время не было повода для этого. В этой статье решил рассказать о первом опыте работы с этой платформой. Свое знакомство с работой Node.js мне пришлось начать с установки Ghost на Debian.

Хотелось бы упомянуть интересные факты из истории Ghost. Ghost был создан Джоном О’Ноланом, который в свое время выполнял функции заместителя руководителя разработки пользовательского интерфейса WordPress. Изначально Ghost создавался как альтернатива WordPress, но со временем он вырос из движка для блога и превратился в сложную CMS.

Если использовать Ghost в качестве блог-платформы, то его можно считать одним из основных конкурентов WordPress. Одно из преимуществ Ghost — его лаконичность, простота и скорость работы. Что касается функциональности этих CMS, Ghost сильно уступает возможностям WordPrees.

Как вариант, можно использовать Ghost вместе с Nginx. Веб-сервер Nginx будет прослушивать трафик, поступающий на порт 80, а затем передавать все запросы платформе Ghost. Благодаря разнообразию вариантов установки Ghost, вам нет необходимости обязательно устанавливать MySQL или Nginx.

Из недостатков Ghost, хочу отметить потребление ресурсов плаформой Node.js. В моем случае, на сервере Debian 8 х64, под виртуализацией KVM я увидел следующую картину:

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 9135 root      20   0 1039856 120372  10348 S  0.0 23.8   0:05.46 node
 9128 root      20   0  836588  28992   8792 S  0.0  5.7   0:00.32 npm

Под нагрузкой процесс Ghost создает сильную нагрузку на процессор. Этот недостаток устраняется кэшированием в Nginx. Потребление памяти должно компенсироваться за счет отсутствия необходимости держать в системе процессы PHP и MySQL, но это не устраняет проблем с ее утечками.

Как я уже говорил, чтобы установить Ghost в Debian, вам не нужно устанавливать PHP, MySQL и Nginx. Платформа Ghost выполняет функции движка и веб-сервера одновременно. За хранение данных по умолчанию отвечает SQLite, вы можете ее изменить на MySQL или PostgreSQL при необходимости.

Установить Ghost в Debian

Установить Ghost достаточно просто. Вам нужно установить пакеты nodejs, npm и их зависимости. Запустите в консоли команды ниже:

apt-get install nodejs npm
# Необходимо для Node.js в Debian, подробнее /usr/share/doc/nodejs/README.Debian
ln -s /usr/bin/nodejs /usr/bin/node

Чтобы установить Ghost на сервер, используйте npm:

cd /home
npm install ghost
cd node_modules/ghost
npm install

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

npm start --production

Фрагмент результата выполнения команды:

Ghost is running in production...
Your blog is now available on http://my-ghost-blog.com
Ctrl+C to shut down

Остановите процесс при помощи клавиш Ctrl-C. Откройте файл:

nano config.js

Здесь необходимо изменить адрес и порт на котором Ghost будет принимать входящие соединения. Находим секцию и меняем значения параметров на свои:

production: {
    url: 'http://test.codebeer.ru',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        host: '95.213.199.106',
        port: '80'
    }
}

Повторно запускаем Ghost:

npm start --production

Автоматический запуск Ghost

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

apt-get install supervisor

Создадим файл с параметрами запуска Ghost:

nano /etc/supervisor/conf.d/ghost.conf

Добавьте в него следующие строки:

[program:ghost]
command = node /home/node_modules/ghost/index.js
directory = /home/node_modules/ghost
user = ghost
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ghost.log
stderr_logfile = /var/log/supervisor/ghost_err.log
environment = NODE_ENV="production"

В целях безопасности, создадим отдельного пользователя, под которым будем выполнять запуск Ghost:

useradd -r ghost -U

Дадим пользователю права на каталог установки Ghost:

chown -R ghost:ghost /home/node_modules/ghost/

После установки supervisor и изменения настроек, обязательно нужно перезагрузить сервер. Теперь для управления процессом Ghost вручную, можно использовать следующие команды:

supervisorctl start ghost
supervisorctl stop ghost

Подробнее о различных способах управления процессом Ghost, можно прочитать на этой странице.

Установить Ghost вместе с Nginx

Когда Ghost установлен и работает, займемся оптимизацией работы сервера. В качестве примера я настрою Nginx в роли фронтенда. Веб-сервер Nginx, который запущен на внешнем интерфейсе, будет принимать и передавать соединения от клиентов к серверу Ghost. Затем в обход сервера Ghost, Nginx будет отдавать из кэша статику клиентам. Использование Nginx позволит нам более гибко настроить работу сервера.

Для начала меняем host и port в конфигурационном файле Ghost:

production: {
    url: 'http://test.codebeer.ru',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        host: '127.0.0.1',
        port: '8080'
    }
}

Устанавливаем веб-сервер Nginx:

apt-get install nginx

Создайте конфигурационный файл Nginx и добавьте в него следующие строки:

server {
    listen 95.213.199.106:80;

    server_name test.codebeer.ru;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }
}

Чтобы применить настройки, выполните команду:

service nginx reload

После изменения настроек Nginx перестал запускаться:

2015/12/10 22:34:38 [emerg] 9714#0: bind() to 95.213.199.106:80 failed (98: Address already in use)

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

Обновление до Windows 10

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

После выпуска финальной версии Windows 10, Microsoft запустила программу предлагающую выполнить бесплатное обновление до Windows 10. Согласно акции, для операционных систем Windows 7/8/8.1 было выпущено специальное обновление. После установки которого, вы увидите предложение об обновлении до Windows 10.

Обновление до Windows 10 через центр обновлений будет доступно сразу после установки служебного пакета KB3080351. Обновление для перехода на Windows 10 будет автоматически загружено на ваш компьютер и вы сможете автоматически обновить систему до последней версии.

Как быть, если у вас в системе не отображается напоминание об обновлении до Windows 10? Как вариант выхода из ситуации — запустить обновление до Windows 10 вручную. Чтобы выполнить принудительное обновление до Windows 10, скачайте запустите файл по этой ссылке. Чтобы скачать файл нажмите кнопку Обновить сейчас.

После загрузки установочного образа с Windows 10, автоматически начнется обновление до Windows 10. После завершения процесса, необходимо скопировать ключ продукта с помощью программы Everest. В дальнейшем он нам понадобится в процессе установки Windows 10 из iso-образа диска.

Следует отметить, что после выпуска Windows 10 Threshold 2, нет необходимости тратить время на установку старой системы, для того чтобы затем выполнить обновление до Windows 10 через центр обновлений. Начиная с Windows 10 Build 10565, появилась возможность активировать операционную систему ключом от Windows 7 или 8.

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

После завершения установки, откройте:

Настройки - Обновление и безопасность - Активация и выбор кода продукта

Затем необходимо ввести ключ продукта, который шел с копией системы Windows 7 или 8.1. Если всё в порядке, система выполнит активацию автоматически.

Установка PHP 7 с Dotdeb

Дата: 08.12.2015Метки: ,

Буквально на днях в репозиториях Dotdeb появился пакет финальной версии PHP 7. Многие жалуются на Dotdeb, но у меня никогда проблем с пакетами установленными из Dotdeb не возникало. В этой записи я опишу установку PHP7 в связке с Nginx. Вы можете ознакомится с информацией о установке PHP7 для Apache2 в следующей моей записи.

Для установки PHP 7 в Debian сначала необходимо добавить репозиторий в систему. Для этого откройте файл:

/etc/apt/sources.list

Затем добавьте в него следующие строки:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Скачиваем и устанавливаем ключ GnuPG:

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Выполните команду:

apt-get update

Установить PHP 7:

apt-get install php7.0-fpm

Для управления PHP 7, используем команды:

service php7.0-fpm start
service php7.0-fpm stop
service php7.0-fpm restart

Установка PHP 7 в Debian 8

Дата: 08.12.2015Метки: ,

Совсем недавно вышла финальная версия PHP 7.0.0, а это значит, что разработка достигла своего финала и пора обновить инструкцию по установке PHP 7 в Debian. Процесс сборки PHP 7 выполнялся из исходников под OS Debian 8.

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

Для тех кто не осилит сборку PHP 7 из исходников, описание установки PHP 7 из репозитория Dotdeb можно прочитать по этой ссылке.

Для начала установим все необходимые для сборки и работы PHP 7 зависимости:

apt-get install build-essential autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config libpng-dev libxml2-dev libxml2 libcurl3

Указанные выше зависимости составлены исходя из указанных мной модулей PHP 7. Если вы хотите добавить другие модули, возможно, понадобиться дополнительно установить необходимые для сборки пакеты. Иначе в процессе выполнения команды ./configure вы получите ошибку.

Установка PHP 7

Все действия будем выполнять в директории:

cd /usr/src

Скачиваем и распаковываем исходники PHP 7.0.4:

wget http://de1.php.net/get/php-7.0.4.tar.bz2/from/this/mirror -O php-7.0.4.tar.bz2
tar -xvjf php-7.0.4.tar.bz2

Если на момент чтения этой статьи, уже вышла более свежая версия PHP 7, скачайте самостоятельно исходники с официального сайта.

Переходим в каталог с исходниками PHP 7:

cd php-7.0.4

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

./buildconf --force

CONFIGURE_STRING="--prefix=/usr/local/php-fpm 
--enable-fpm
--enable-mysqlnd
--enable-mbstring
--disable-pdo
--disable-phar
--with-config-file-scan-dir=/usr/local/php-fpm/etc/conf.d
--with-curl
--with-gd
--with-fpm-user=www-data
--with-fpm-group=www-data
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysqli=mysqlnd
--with-zlib
--without-sqlite3
--without-pdo-sqlite"

Данная конфигурация проверена мной и протестирована на WordPress 4.4.2 с минимальным набором плагинов. Если вы хотите добавить в PHP 7 другие модули, найдите их в списке доступных параметров сборки:

./configure --help

Для компиляции и установки PHP 7, необходимо выполнить команду:

./configure $CONFIGURE_STRING
make && make install

Настройка PHP 7

Если в процессе компиляции не было ошибок, файлы PHP 7 должны быть расположены в директории:

/usr/local/php-fpm

Нам осталось внести изменения в конфигурационный файлы и добавить PHP 7 в автозагрузку. Для начала скопируем файл php.ini из каталога с исходниками в каталог установки PHP 7:

cp /usr/src/php-7.0.4/php.ini-production /usr/local/php-fpm/lib/php.ini

Чтобы включить модуль Zend OPcache, создайте файл:

mkdir -p /usr/local/php-fpm/etc/conf.d/
nano /usr/local/php-fpm/etc/conf.d/modules.ini

Скопируйте в него следующие параметры:

# Zend OPcache
zend_extension=opcache.so

Для настройки работы PHP-FPM создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.conf

И добавьте в него следующие параметры:

[global]

pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log

include=/usr/local/php-fpm/etc/php-fpm.d/*.conf

Затем создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.d/www.conf

И добавьте в него параметры:

[www]
user = www-data
group = www-data

listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0777

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Добавим PHP 7 в автозагрузку, создадим символическую ссылку на файл php-fpm:

ln -s /usr/local/php-fpm/sbin/php-fpm /usr/local/php-fpm/sbin/php7-fpm

Создадим в каталоге init.d скрипт для запуска PHP-FPM:

nano /etc/init.d/php-fpm

Добавьте в содержимое файла:

Дадим права на запуск, добавим скрипт в автозагрузку:

chmod +x /etc/init.d/php-fpm
update-rc.d php-fpm defaults

Затем необходимо выполнить команду:

service php-fpm restart

Для работы PHP-FPM в Nginx, добавьте в секцию server виртуального хоста:

location ~ .php$ {
    try_files $uri = 404;
    fastcgi_pass unix:/var/run/php-fpm7.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Проблемы в процессе установки PHP 7

Список ошибок, который может возникнуть по причине отсутствия установленных зависимостей.

./buildconf: 46: ./buildconf: make: not found

# Выполните установку:
apt-get install build-essential
buildconf: autoconf not found.
           You need autoconf version 2.59 or newer installed
           to build PHP from Git.
build/build.mk:37: recipe for target 'buildmk.stamp' failed

# Выполните установку:
apt-get install autoconf
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

# Выполните установку:
apt-get install re2c
configure: error: bison is required to build PHP/Zend when building a GIT checkout!

# Выполните установку:
apt-get install bison
configure: error: Cannot find OpenSSL's 

# Выполните установку:
apt-get install libssl-dev libcurl4-openssl-dev pkg-config
configure: error: png.h not found.

# Выполните установку:
libpng-dev
configure: error: xml2-config not found. Please check your libxml2 installation.

# Выполните установку:
apt-get install libxml2 libxml2-dev

Получение сертификата Let’s Encrypt

Ранее мною была подана заявка на участие в тестировании сервиса выдачи бесплатных SSL сертификатов Let’s Encrypt. И вот сегодня, наконец-то пришло письмо о том что я могу принять участие в тестировании и получить сертификат для указанного в заявке домена.

На данный момент процесс закрытого бета-тестирования Let’s Encrypt закончен и любой желающий может создать сертификат для своего сайта.

В этой статье я опишу процесс создания и автоматического продления сертификатов с помощью сервиса Let’s Encrypt. Я использую Nginx на всех своих сайтах, поэтому, инструкция рассчитана под использование именно этого веб-сервера.

Для автоматизации получения сертификата, Let’s Encrypt использует ACME — специальный клиент написанный на Perl. Все действия осуществляются непосредственно через консоль и после получения сертификата, дальнейшее его продление будет проходить полностью в автоматическом режиме.

Для создания сертификатов использовалась виртуальная машина с OS Debian 8.2, но вы можете использовать любой другой Linux дистрибутив по своему усмотрению.

Перед тем как перейти к процессу создания сертификатов Let’s Encrypt, необходимо определится с расположением файлов ACME. Клиент нам понадобится в дальнейшем для продления сертификатов.

В моем случае ACME будет расположен в директории home:

cd /home

Если следовать официальной инструкции, для загрузки ACME необходимо установить клиент Git:

# apt-get install git

После чего загрузить файлы командой:

# git clone https://github.com/letsencrypt/letsencrypt
# cd letsencrypt

Как альтернативный вариант, я предлагаю просто скачать zip-архив ACME с официального репозитория GitHub.

# wget https://github.com/letsencrypt/letsencrypt/archive/master.zip

Извлекаем архив и переходим в каталог с файлами:

# unzip master.zip
# mv letsencrypt-master letsencrypt
# cd letsencrypt

Для проверки владения доменом, необходимо добавить в настройки виртуального хоста Nginx:

server {
        listen 80;
        server_name test.codebeer.ru;

        root /var/www/test.codebeer.ru;

        location '/.well-known/acme-challenge' {
            default_type "text/plain";
            alias /tmp/letsencrypt-auto';
        }
}

Для уже существующего сайта, нужно добавить в секцию server алиас:

location '/.well-known/acme-challenge' {
    default_type "text/plain";
    alias /tmp/letsencrypt-auto';
}

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

Есть несколько параметров запуска клиента Let’s Encrypt. Подробнее о каждом из них можно прочитать на странице официальной документации. Чтобы создать сертификат, просто выполните команды ниже:

# export DOMAINS="-d test.codebeer.ru -d www.test.codebeer.ru"
# export DIR=/tmp/letsencrypt-auto
# mkdir -p $DIR
# ./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --webroot-path=$DIR --agree-dev-preview $DOMAINS

Не забудьте заменить названия доменов на свои.

В процессе генерации сертификата Let’s Encrypt необходимо будет указать email:

Enter email address (used for urgent notices and lost key recovery)

Примите условия использования:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf. You 
must agree in order to register with the ACME server at
https://acme-staging.api.letsencrypt.org/directory

Соглашаемся на сохранение вашего адреса в логах Let’s Encrypt:

NOTE: The IP of this machine will be publicly logged as having
requested this certificate. If you're running letsencrypt in manual
mode on a machine that is not your server, please ensure you're okay
with that.

Are you OK with your IP being logged?

Если проверка прошла успешно, то вы увидите следующее сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/test.codebeer.ru/fullchain.pem. Your cert
will expire on 2016-03-06. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Сгенерированный сертификат и ключи для нашего домена будет расположены в папке:

/etc/letsencrypt/live/test.codebeer.ru/

Не меняя расположение, вам необходимо указать путь к файлам в настройка Nginx или другого веб-сервера.

Продление сертификата Let’s Encrypt

Все сертификаты Let’s Encrypt имеют срок действия равный 90 дней. Поэтому, обновлять вручную сертификаты каждые 3 месяца не совсем удобно. По словам представителей Let’s Encrypt, время жизни сертификата в будущем может быть уменьшено.

Чтобы автоматизировать процесс продления сертификата, необходимо добавить в cron скрипт:

export DOMAINS="-d test.codebeer.ru -d www.test.codebeer.ru"
export DIR=/tmp/letsencrypt-auto
mkdir -p $DIR
/home/letsencrypt/letsencrypt-auto --renew certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --webroot-path=$DIR --agree-dev-preview $DOMAINS
service nginx restart