Архив метки: Wordpress

Как сделать резервную копию сайта WordPress?

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

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

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

Компоненты резервного копирования сайта WordPress

Чтобы понять, как работает резервное копирование WordPress, важно понимать компоненты сайта WordPress, резервное копирование которых необходимо выполнить для восстановления.

  • База данных MySQL: эта базовая база данных содержит данные о содержимом и конфигурации вашего сайта. Это основная часть содержания вашего сайта.
  • Основная установка WordPress: они состоят из большинства файлов и папок, содержащихся в корневом каталоге, где ваш сайт хранится на веб-сервере.
  • Содержимое веб-сайта: каталог wp-content содержит все ваши файлы тем и плагинов, которые вы использовали для настройки вашего сайта WordPress.
  • Конфигурация WordPress: Для правильного подключения к вашей базе данных, WordPress нужны данные для входа в базу данных, которые хранятся в файле wp-config.php, хранящемся в вашем корневом каталоге.

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

В этом случае вам нужно только сделать резервную копию базы данных MySQL, каталога wp-content и файла wp-config.php.

Как сделать резервную копию вашего сайта WordPress вручную

Если у вас уже есть установочный ZIP-файл Core WordPress, вы можете выполнить самый быстрый тип резервного копирования для вашего сайта WordPress.

  • Чтобы создать резервную копию базы данных WordPress MySQL, войдите в cPanel и в разделе «Файлы» выберите «Резервные копии».
  • Прокрутите вниз до Частичное резервное копирование и в разделе Загрузка резервной копии базы данных MySQL выберите ссылку для базы данных WordPress, которую вы хотите сделать резервную копию.

  • Вы можете сохранить файл *.gz в любом месте на вашем компьютере. Позже, если вам когда-нибудь понадобится восстановить эту базу данных, вы можете вернуться на ту же страницу на cPanel. В разделе Восстановление базы данных MySQL просто нажмите кнопку «Загрузить» и выберите ранее загруженный файл *.gz.
  • Чтобы загрузить только каталог wp-contents и файл wp-config.php , подключитесь к своей учетной записи веб-хостинга с помощью своего любимого инструмента FTP. Используйте для входа идентификатор FTP и пароль, предоставленные вашим веб-хостингом.

  • Используйте FTP-клиент для загрузки всей папки wp-content и файла wp-config.php.

Примечание. Если вы хотите выполнить полное резервное копирование всего в своем домашнем каталоге, на той же странице резервных копий cPanel в разделе «Частичные резервные копии» вы можете нажать кнопку «Загрузить» в разделе «Загрузить резервную копию домашнего каталога», и это позволит загрузить все папки и файлы в вашем каталоге. домашний каталог сайта.

Выполнять автоматическое резервное копирование WordPress плагинами

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

Более разумное решение — установить один из множества превосходных плагинов WordPress, доступных для автоматизации процесса резервного копирования.

Существует множество отличных плагинов для резервного копирования WordPress (см. Список внизу этого раздела). В приведенном ниже примере используется плагин для резервного копирования UpdraftPlus WordPress.

UpdraftPlus позволяет создавать резервные копии вашего сайта WordPress для любых популярных облачных сервисов, таких как Dropbox, Google Drive, Rackspace Cloud или даже FTP или электронная почта.

  • Чтобы установить UpdraftPlus, просто загрузите файлы плагинов и скопируйте их (используя FTP-клиент) в папку плагинов в каталоге wp-content.

  • После того, как вы скопировали туда папку, войдите в свою панель администратора WordPress, перейдите в раздел Плагины и активируйте плагин UpdraftPlus.
  • После активации вы увидите Резервные копии UpdraftPlus, перечисленные в меню Настройки. Выберите его, чтобы посетить панель управления UpdraftPlus.
  • Чтобы настроить частоту резервного копирования, выберите меню «Настройки». Здесь вы можете выбрать, как часто выполнять резервное копирование файлов WordPress (wp-контент) и как часто выполнять резервное копирование базы данных WordPress.

  • Здесь вы также выбираете облачный сервис, который хотите использовать для хранения резервных копий. После выбора облачной службы, в которую вы хотите выполнить резервное копирование, информация для аутентификации, которую вам нужно ввести, появится ниже на той же странице.
  • Чтобы просмотреть последние три последних резервных копии, просто выберите меню «Существующие резервные копии».

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

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

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

В дополнение к UpdraftPlus есть несколько превосходных плагинов для автоматического резервного копирования WordPress.

  • Vaultpress: Этот плагин не бесплатный, но доступный. Помимо выполнения автоматического резервного копирования вашего сайта (хранение резервных копий продолжительностью до 30 дней), он также обеспечивает сканирование безопасности для защиты от хакеров или вредоносных программ.

  • BackupBuddy: купите BackupBuddy за один раз и используйте его на своем сайте (или сайтах) навсегда. Он может создавать автоматические резервные копии и сохранять их в любой основной учетной записи облачного хранилища. Он также создает резервные копии основных файлов WordPress, поэтому переустановка WordPress не требуется после полной потери веб-сайта.
  • BoldGrid Backup: этот плагин для резервного копирования WordPress похож на другие, за исключением того, что он также имеет очень полезную функцию, которая автоматически откатывает ваш сайт к предыдущему рабочему резервному копированию в случае сбоя обновления WordPress.
  • BackWPup: Если вы все о бесплатных плагинах, то это хорошая альтернатива UpdraftPlus. Этот плагин будет выполнять автоматическое резервное копирование с использованием запланированного задания WordPress для одной из предпочитаемых вами облачных учетных записей. Он также будет проверять, оптимизировать или восстанавливать вашу базу данных WordPress.

Практикуйте свое решение для резервного копирования WordPress

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

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

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



2020-01-13T17:01:48
WordPress

Лучшие SEO плагины для WordPress

Здесь я привожу самые толковые плагины, которые позволяют провести SEO оптимизацию сайта на Вордпрессе, чтобы он не просто был, а активно рос в поиске и в идеале находился на первых местах – ведь для этого обычно и создаются сайты :smile:

Читать

Лучшие плагины для WordPress в каждый сайт

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

Читать

Что делать, если после обновления php до версии 7.1/7.2/7.3 не попасть в админку wordpress

Причиной тому является старая версия самой CMS WordPress




Бывает так, что версию php обновить пришлось, а версию wordpress пока обновлять рано и в итоге мы имеем следующую ошибку:




Error thrown

Cannot create references to/from string offsets




Открываем в корне сайта файл wp-login.php и




Строку:
$user = wp_signon('', $secure_cookie); 
Заменяем на:
$user = wp_signon(array(), $secure_cookie); 






2019-12-18T07:23:29
Без рубрики

Установка и настройка кеширующего прокси-сервера VARNISH за NGINX и Apache2 на Ubuntu 18.04 LTS для WordPress в 2019 году

Устанавливаем Varnish:




apt-get install varnish




Файл параметров запуска располагается здесь — /etc/default/varnish. В DAEMON_OPTS задаём следующие параметры:




DAEMON_OPTS="-a :8181 
              -T 127.0.0.1:8282 
              -f /etc/varnish/default.vcl 
              -S /etc/varnish/secret 
              -s malloc,128m"




-a — задаёт порт, на котором Varnish будет принимать соединения, в нашем случае от фронтенда — nginx;
-T — здесь крутится админка, подробнее в описании к флагу -S;
-f — файл с конфигурацией VCL — специальном языке, предназначенном для определения правил обработки запросов и кэширования в Varnish;
-S — Varnish имеет панель администрирования. Для входа необходимо выполнить команду varnishadm, при этом пользователь должен иметь права на чтение файла /etc/varnish/secret для прохождения аутентификации;
-s указание места хранения кэша и его размер, в данном случае 128Mб в оперативной памяти.




Как вы уже, наверное, поняли, самое интересное нас ждёт в файле с правилами обработки запросов. Во время старта процесса Varnish’а данный файл компилируется. В VCL используется несколько подразделов-функций, в которых описываются эти правила. Кратко расскажу о них, полное описание рекомендую прочитать на официальном сайте.




sub vcl_recv — данная функция используется когда приходит запрос от клиента;
sub vcl_pass — выполняется, когда запрос клиента необходимо передать напрямую бэкенду, не кэшировать и не искать соответствия в кэше;
sub vcl_hash — определяет правила кэширования, можно использовать несколько хранилищ для одного и того же документа, в зависимости от разных условий, например, поддержки сжатия клиентом, или каких-либо других особенностей клиента. В нашем случае не будет использоваться, так как клиент у нас для Varnish’а один — nginx на фронтенде;
sub vcl_backend_response — данная функция используется когда приходит запрос от бэкенда (nginx);
sub vcl_deliver — используется непосредственно перед отправкой данных клиенту, например, для добавления/изменения заголовков.




Схема работы компонентов VCL может быть представлена следующим образом:







Если обращение к бэкенду происходит при этом из функции vcl_miss ответ бэкенда отправляется и в кэш. Сам язык очень похож на C. Приступим к настройке. Открываем файл /etc/varnish/default.vcl и начинаем кодить:




# Сообщаем компилятору о том, что используется новая версия VCL 4
vcl 4.0;

# Настройки бэкенда
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

# Диапазон IP/Хостов, которым разрешено выполнять PURGE-запросы для очистки кэша
acl purge {
    "localhost";
    "127.0.0.1";
}

# Получение запроса от клиента
sub vcl_recv {
        # Разрешить очистку кэша вышеописанному диапазону
        if (req.method == "PURGE") {
                # Если запрос не из списка, то разворачивать
                if (!client.ip ~ purge) {
                        return(synth(405, "This IP is not allowed to send PURGE requests."));
                }
                return (purge);
        }

        # POST-запросы а также страницы с Basic-авторизацией пропускать
        if (req.http.Authorization || req.method == "POST") {
                return (pass);
        }

        # Пропускать админку и страницу входа
        if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true") {
                return (pass);
        }

        # Пропускать sitemap и файл robots, у меня sitemap генерируется плагином Google XML Sitemaps
        if (req.url ~ "sitemap" || req.url ~ "robots") {
                return (pass);
        }

        # Удаляем cookies, содержащие "has_js" и "__*", добавляемые CloudFlare и Google Analytics, так как Varnish не будет кэшировать запросы, для которых установлены cookies.
        set req.http.Cookie = regsuball(req.http.Cookie, "(^|;s*)(_[_a-z]+|has_js)=[^;]*", "");

        # Удаление префикса ";" в cookies, если вдруг будет обнаружен
        set req.http.Cookie = regsub(req.http.Cookie, "^;s*", "");

        # Удаляем Quant Capital cookies (добавляются некоторыми плагинами)
        set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");
        # Удаляем wp-settings-1 cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");

        # Удаляем wp-settings-time-1 cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", "");

        # Удаляем wp test cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", "");

        # Удаляем cookie, состоящие только из пробелов (или вообще пустые)
        if (req.http.cookie ~ "^ *$") {
                    unset req.http.cookie;
        }

        # Для статических документов удаляем все cookies, пусть себе кэшируются 
        if (req.url ~ ".(css|js|png|gif|jp(e)?g|swf|ico|woff|svg|htm|html)") {
                unset req.http.cookie;
        }

        # Если установлены cookies "wordpress_" или "comment_" пропускаем напряиую к бэкенду
        if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") {
                return (pass);
        }

        # Если cookie не найдено, удаляем данный параметр из пришедшего запроса как таковой
        if (!req.http.cookie) {
                unset req.http.cookie;
        }

        # Не кэшировать запросы с установленными cookies, это уже не касается WordPress
        if (req.http.Authorization || req.http.Cookie) {
                # Not cacheable by default
                return (pass);
        }

        # Кэшировать всё остальное
        return (hash);
}

sub vcl_pass {
        return (fetch);
}

sub vcl_hash {
        hash_data(req.url);

        return (lookup);
}

# Приём ответа от бэкенда
sub vcl_backend_response {
        # Удаляем ненужные заголовки
        unset beresp.http.Server;
        unset beresp.http.X-Powered-By;

        # Не хранить в кэше robots и sitemap и .xml файлы
        if (bereq.url ~ "sitemap" || bereq.url ~ "robots" || bereq.url ~ ".xml") {
                set beresp.uncacheable = true;
                set beresp.ttl = 30s;
                return (deliver);
        }

        # Для статических файлов, которые отдаёт бэкенд...
        if (bereq.url ~ ".(css|js|png|gif|jp(e?)g)|swf|ico|woff|svg|htm|html") {
                # Удаляем все куки 
                unset beresp.http.cookie;
                # Устанавливаем срок хранения в кэше - 70 дней
                set beresp.ttl = 70d;
                # Устанавливаем заголовки Cache-Control и Expires, сообщая браузеру о том, что эти файлы стоит сохранить в кэше клиента и не нагружать лишниий раз наш сервер
                unset beresp.http.Cache-Control;
                set beresp.http.Cache-Control = "public, max-age=6048000";
                set beresp.http.Expires = now + beresp.ttl;
        }

        # Не кэшировать админку и страницу логина
        if (bereq.url ~ "wp-(login|admin)" || bereq.url ~ "preview=true") {
                set beresp.uncacheable = true;
                set beresp.ttl = 30s;
                return (deliver);
        }

        # Разрешить устанавливать куки только при обращении к этим путям, всё остальное будет резаться
                if (!(bereq.url ~ "(wp-login|wp-admin|preview=true)")) {
                unset beresp.http.set-cookie;
        }

        # Не кэшировать результат ответа на POST-запрос или Basic авторизации
        if ( bereq.method == "POST" || bereq.http.Authorization ) {
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }

        # Не кэшировать результаты поиска
        if ( bereq.url ~ "?s=" ){
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }

        # Не кэшировать страницы ошибок, только нужные вещи в кэше!
        if ( beresp.status != 200 ) {
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }


        # Хранить в кэше всё прочее на протяжении одного дня
        set beresp.ttl = 1d;
        # Срок жизни кэша после истечения его TTL
        set beresp.grace = 30s;

        return (deliver);
}

# Действия перед отдачей результата пользователю
sub vcl_deliver {
        # Удаляем ненужные заголовки
        unset resp.http.X-Powered-By;
        unset resp.http.Server;
        unset resp.http.Via;
        unset resp.http.X-Varnish;

        return (deliver);
}




После чего выполняем команду:




service varnish restart 




Проблема Varnish и UBUNTU 18.04 LTS




А что если вы захотите изменить порт, на котором Varnish будет принимать входящие соединения или изменить объём кэша. Судя по официальной документации нужно изменить файл с параметрами запуска Varnish, располагающийся по пути: /etc/default/varnish и перезапустить сервис. Но нет! Ничего не изменится, и если мы зайдём в top и нажмем на клавишу ‘c’, то увидим, что сервис запущен с прежними настройками. А всё дело в том, что в новой версии Ubuntu используется systemd вместо init.d в качестве системы инициализации, и поэтому нужно зайти в файл /lib/systemd/system/varnish.service и прописать там в директиве ExecStart те же параметры запуска:




[Unit]
Description=Varnish HTTP accelerator

[Service]
Type=forking
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStartPre=/usr/sbin/varnishd -C -f /etc/varnish/default.vcl
ExecStart=/usr/sbin/varnishd -a :8181 -T 127.0.0.1:8282 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,128m
ExecReload=/usr/share/varnish/reload-vcl

[Install]
WantedBy=multi-user.target




После сохранения выполнить следующие команды для вступления изменений в силу:




systemctl daemon-reload
service varnish restart 




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




После чего нужно изменить порт доступа у nginx




proxy_pass: http://127.0.0.1:8181/;




Настройка WordPress — плагин «Varnish HTTP Purge»




Устанавливаем в панели администрирования WP плагин «Varnish HTTP Purge». Теперь при обновлении данных на измененные страницы будет отправлен PURGE-запрос, очищающий кэш в Varnish, и для посетителей данные всегда будут обновлёнными.




После чего нужно ещё настроить пару строчек по примеру:







Varnish Vontrol Key берется из файла: /etc/varnish/secret




Статья на основе: https://habr.com/ru/post/278189/




Настройка множества сайтов на одном сервере: https://stackoverflow.com/questions/3334023/configure-multiple-sites-with-varnish



2019-12-18T03:40:30
wordpress

7 способов продвижения вашего нового сайта и увеличения трафика

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

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

 

Почему скорость имеет значение?

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

И это еще не все!

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

Теперь, когда вы знаете, почему скорость имеет значение, позвольте мне показать вам, как вы можете оптимизировать свой новый или существующий веб-сайт WordPress. Вы также можете прочитать еще одну статью экспертов, которые поделились своим опытом о том, как ускорить работу сайта WordPress.

 

1. Выберите хороший и надежный веб-хостинг

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

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

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

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

2. Выберите быструю тему WordPress

Тема играет важную роль в оптимизации WordPress!

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

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

3. Оптимизируйте свою базу данных WordPress

Оптимизация вашей базы данных должна быть следующей задачей в вашем списке дел, чтобы ускорить ваш сайт WordPress. Тем не менее, это также одна из самых сложных и трудоемких задач из всех, особенно когда это делается вручную. Хотя MySQL является одной из лучших баз данных на рынке, она сталкивается с серьезными проблемами, когда речь идет о регулярной эффективной очистке.

 

Так что вы можете с этим поделать?

Установите плагины для оптимизации WordPress, такие как WP-Optimize или WP-DB Manager.

Эти умные маленькие плагины помогут вам без особых усилий оптимизировать и управлять всей вашей базой данных, включая пост-ревизии, спам, черновики, таблицы и т. д. Кроме того, WP-DB Manager будет регулярно устанавливать даты для оптимизации, чтобы ваш веб-сайт работал исключительно и всегда.

 

5. Используйте сеть доставки контента (CDN)

Сегодня сети доставки контента очень часто используются через Интернет, чтобы доставлять пользователям контент высочайшего качества. Это делается путем репликации статического содержимого, включая изображения, CSS, Javascript и т. д. С вашего веб-сайта и предоставления его пользователям с ближайших серверов. Это значительно ускоряет время загрузки на вашем сайте, тем самым предотвращая переход ваших посетителей на другие сайты.

Хотя на рынке доступно много CDN, наиболее известными из них являются CloudFlare, MaxCDN и Amazon CloudFront CDN. Эти CDN просты в использовании и включают чрезвычайно удобную панель управления.

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



2019-11-18T22:08:40
Лучшие учебники по Wodpress