Развертывание блога jekyll на страницах github с помощью пользовательских плагинов и TravisCI

  1. Основные настройки
  2. Автоматическое развертывание сайта с TravisCI
  3. Настройка Github Branch
  4. Личный токен Github
  5. Конфигурация сайта Jekyll
  6. Настройка TravisCI
  7. Дополнительно: пользовательские домены
  8. Необязательно: Включить html_proofer
  9. Заключительные мысли

Развертывание нового блога с помощью Github Pages очень просто. Все, что вам нужно, это новый репозиторий, названный в честь вашего имени пользователя Github, и сайт jekyll в вашей главной ветке.

Github также предоставляет несколько плагинов из белого списка для простоты использования, которые можно найти здесь , К сожалению, некоторые из них немного устарели (я смотрю на вас, jekyll-paginate). Еще одна плохая новость заключается в том, что, поскольку плагины находятся в белом списке, вы не можете использовать другие плагины.

Мы разработчики, хотя, как белый список остановит нас ...

Основные настройки

Если вы просто хотите иметь очень простой сайт Github Pages и не заботитесь о пользовательских плагинах, руководство, которое предоставляет Github Вот будет более чем адекватным.

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

Автоматическое развертывание сайта с TravisCI

Чтобы обойти ограничение плагинов, мы автоматически создадим наш сайт на TravisCI, используя сборку jekyll, а затем перенесем статический сайт в нашу главную ветку на Github. Это простой процесс, но он может стать утомительным, если вы будете делать это каждый раз, когда пишете новое сообщение. Рабочий процесс описан в блок-схеме ниже.

Настройка Github Branch

Первое, что мы хотим сделать, это создать новую ветку от master с именем source . (Названия здесь не важны, но выберите то, что вы помните). После того, как вы создали свою ветку с исходным кодом, больше не нужно будет использовать основную ветку для этого репо.

Источник будет там, где вы пишете свои записи в блогах, а мастер останется там, откуда Github Pages загружает ваш статический сайт. Например, master будет включать только каталог site /, а source будет иметь весь проект jekyll.

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

Личный токен Github

Далее, мы хотим дать TravisCI что-то для аутентификации, чтобы выполнить git push для нас. Для этого создадим токен личного доступа.

Заметка

Вы также можете безопасно передать свой личный токен доступа, зашифровав его в свой файл .travis.yml.

Сначала щелкните меню « Настройки» , расположенное под вашим профилем в правом верхнем углу Github.

Затем найдите Настройки разработчика на левой боковой панели и щелкните по ней.

После этого перейдите к токенам личного доступа и нажмите кнопку « Создать новый токен» . Назовите токен чем-нибудь запоминающимся (я использую Travis CI) и установите области разрешений для всего репо .

Назовите токен чем-нибудь запоминающимся (я использую Travis CI) и установите области разрешений для всего репо

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

Конфигурация сайта Jekyll

Нам нужно настроить несколько вещей, чтобы наш сайт Jekyll функционировал надлежащим образом с TravisCI.

Сначала добавьте следующее в ваш Gemfile.

source "https://rubygems.org" ruby ​​RUBY_VERSION # Нам понадобится rake для создания нашего сайта в travisCI gem "rake", "~> 12" gem "jekyll" # Необязательно: Добавьте сюда любые пользовательские плагины. # Ниже перечислены некоторые полезные примеры: jekyll_plugins do gem "jekyll-feed" gem "jekyll-sitemap" gem "jekyll-paginate-v2" gem "jekyll-seo-tag" gem "jekyll-compose", "~> 0.5 "gem" jekyll-redirect-from "end

Любые плагины, которые мы используем выше в нашем Gemfile, мы также хотим перечислить в файле _config.yml сайта Jekyll.

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

Используя приведенный выше пример, ваш _config.yml может выглядеть так:

title: заголовок вашего блога email: [email protected] # множество других настроек # ... # Все плагины в группе jekyll_plugin из плагинов Gemfile: - jekyll-feed - jekyll-sitemap - jekyll-paginate-v2 - jekyll-seo -tag - jekyll-compose - jekyll-redirect-from # Исключить эти файлы из результатов процесса сборки. # Не позволяет им появляться в главной ветке, # которая является живым сайтом. исключить: - поставщик - Gemfile - Gemfile.lock - ЛИЦЕНЗИЯ - README.md - Rakefile

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

Добавьте это к вашему .gitignore.

, sass - кеш. Джекилл - метаданные _сайт

Далее, и самое главное, нам нужен файл .travis.yml, чтобы TravisCI знал, как мы хотим, чтобы он работал. Я собираюсь пробежаться по нему построчно с объяснениями настроек.

язык: ruby ​​rvm: - 2.3.1 установить: - установить пакет развернуть: провайдер: страницы skip_cleanup: true github_token: $ GITHUB_TOKEN local_dir: _site target_branch: master on: branch: source

язык: ruby ​​использовать язык ruby

rvm: - 2.3.1 Используйте RVM для установки версии ruby ​​на 2.3.1

установить: - установить пакет Запустить пакетную установку, чтобы установить все гемы.

провайдер: страницы Использование провайдера TravisCI Github Pages

skip_cleanup: true Сохранить файлы, созданные на этапе сборки.

github_token: $ GITHUB_TOKEN Наш личный токен доступа. В настоящее время это ссылка на переменную среды, которая будет добавлена ​​в разделе настройки TravisCI ниже.

local_dir: _site Используйте все файлы, найденные в этом каталоге, для развертывания.

target_branch: master Перенесите полученные файлы сборки в эту ветку на Github.

on: branch: source Запустите TravisCI только для этой ветви.

Вы можете найти дополнительную информацию из документация по развертыванию ,

Все это вместе в основном говорит: «Используя исходную ветку из этого репо, переместите все файлы, найденные в каталоге сайта, в основную ветку репо». Это работает только при использовании следующего Rakefile для ручной сборки сайта.

# filename: задача Rakefile: по умолчанию do ставит «Выполняемые задачи CI ...» # Запускает команду сборки jekyll для производства # TravisCI теперь будет иметь каталог сайта с нашими # статически сгенерированными файлами. sh ("JEKYLL_ENV = exec jekyll build производственного комплекта") ставит конец "Jekyll успешно собран"

Rakefile выше запускается на каждой сборке. Из-за этого вы можете добавить другие проверки к этому процессу, такие как html_proofer , Они должны будут пройти без сбоев, прежде чем TravisCI развернет сборку.

Давайте перейдем к последнему шагу. Настройка TravisCI для Github Pages.

Настройка TravisCI

Теперь, когда у нас есть настройки нашего сайта, нам нужно подключить его к TravisCI.

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

Найдите свой репозиторий и включите его . Это должно быть в формате username.github.io .

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

Помнишь, когда я это сказал?

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

Пришло время снова выкопать этот токен-код.

Заметка

GITHUB_TOKEN должен соответствовать строке вашего файла .travis.yml github_token: $ GITHUB_TOKEN для правильной аутентификации использования.

Получив код, создайте новую переменную среды с именем GITHUB_TOKEN на странице настроек TravisCI.

Получив код, создайте новую переменную среды с именем GITHUB_TOKEN на странице настроек TravisCI

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

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

После того, как у вас все настроено, попробуйте добавить новый коммит в ветку исходного кода . Вы должны увидеть запуск, прохождение сборки TravisCI и, в конечном итоге, если вы перейдете на username.github.io, ваш сайт будет работать! Если по какой-то причине ваша сборка не удалась, просмотрите журнал заданий на предмет подробностей об ошибках. Я был бы рад помочь устранить их в комментариях.

Я был бы рад помочь устранить их в комментариях

Это оно! Начните вести блог.

Дополнительно: пользовательские домены

Вы можете предоставить своим читателям более специализированный опыт, предоставив им собственный домен для навигации. Это достигается указанием вашего сайта username.github.io на регистраторе домена, где вы приобрели доменное имя. (например joshfrankel.me )

Не волнуйтесь, если это звучит страшно. Это на самом деле легко настроить. Namecheap имеет отличную статью, которая проведет вас через весь процесс ,

Что вам нужно сделать, это сначала создать файл CNAME в вашем хранилище Github. Файл CNAME должен содержать ваше доменное имя. Например мой ниже:

# имя файла: CNAME joshfrankel. мне

Это говорит Github Pages, где ваш сайт публикуется.

Ниже я перечислил основные настройки того, что вам нужно сделать для других регистраторов доменов. (Из документации по Namecheap)

  • Запись для @, указывающая на 192.30.252.153
  • Запись для @, указывающая на 192.30.252.154
  • Запись CNAME для www, указывающая на ваше имя пользователя.github.io (имя пользователя должно быть заменено вашим реальным именем пользователя учетной записи GitHub):

Github обновил свои серверы, и поэтому вам нужно будет указать свой DNS на следующие IP-адреса. Как и выше, вы захотите создать записи A, указывающие на @ для каждого из указанных ниже IP-адресов. Вот соответствующая документация ,

Если вы настроили записи A через своего провайдера DNS, ваши записи A должны указывать в вашем настраиваемом домене следующие IP-адреса:

  • 185.199.108.153
  • 185.199.109.153
  • 185.199.110.153
  • 185.199.111.153

Если вы сейчас перейдете на страницу настроек вашего репозитория, вы должны увидеть что-то вроде этого:

Примечание . Мелкий шрифт вокруг включения https утверждает, что в настоящее время он недоступен для пользовательских доменов. Тем не менее, есть дополнительные ресурсы и руководства для настройка сторонних сервисов, таких как CloudFlare, для включения https для Github Pages , Это также может быть возможно через другие DNS-хосты, такие как Namecheap (который я использую).

Необязательно: Включить html_proofer

… Вы можете добавить другие проверки к этому процессу, такие как html_proofer , Они должны будут пройти без сбоев, прежде чем TravisCI развернет сборку.

Как я упоминал выше, одним из преимуществ Rakefile является то, что пользовательские проверки должны пройти, прежде чем сборка будет отправлена ​​для развертывания. Одним из них является действительно полезный гем под названием html_proofer, который позволяет тестировать визуализированный HTML- код на предмет достоверности.

Мы можем настроить это с помощью нескольких простых шагов. Сначала мы хотим добавить html_proofer в наш Gemfile.

# Gemfile gem "rake", "~> 12" gem "jekyll" # За пределами гема группы плагинов jekyll "html-proofer"

Затем мы добавим несколько строк и конфигурацию в наш существующий Rakefile, чтобы начать тестирование содержимого встроенной папки _site.

require "html-proofer" # Требуется gem для использования в задачах: по умолчанию do ставит "Выполнение задач CI ..." sh ("JEKYLL_ENV = exe сборка exec jekyll производства") # Добавить HTMLProofer.check_directory ("./_ site") .run для начала проверки # на недопустимый HTMLProofer HTML. check_directory ("./_site", url_ignore: [/linkedin.com|php-fig.org|bower.io|bost.ocks.org|elementary.io/]). запустить ставит конец "Джекилл успешно построен"

Вызов html_proofer должен произойти после того, как сайт jekyll будет построен из строки сборки JEKYLL_ENV = exe jecyll для производственного комплекта. Это гарантирует, что есть вновь созданные файлы для проверки в соответствии с настройками линтера.

Основной код для получения этой работы: HTMLProofer.check_directory ("./_ site"). Run. Это заставляет html_proofer просматривать каталог _site и запускать все доступные линтеры.

Мы можем проверить все это локально, выполнив следующую команду rake в нашем каталоге разработки. Команда rake запускает задачу по умолчанию, найденную в Rakefile.

> rake Выполнение задач CI ... JEKYLL_ENV = рабочий комплект exec jekyll build Файл конфигурации: /home/josh/Development/joshmfrankel.github.io/_config.yml Источник: /home/josh/Development/joshmfrankel.github.io Пункт назначения: /home/josh/Development/joshmfrankel.github.io/_site Инкрементная сборка: отключена. Включить с --incremental Generating ... AutoPages: отключено / не настроено в site.config. Разбивка на страницы: полная, обработанная 1 страница (-ов) разбивки на страницы, выполненная за 0,819 секунды. Авто-регенерация: отключена. Используйте --watch для включения. Запуск ["ImageCheck", "ScriptCheck", "LinkCheck"] на ["./_site"] на * .html ... Проверка 65 внешних ссылок ... Выполнено на 53 файлах! HTML-Proofer успешно завершен. Джекилл успешно построен

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

Как вы можете видеть из моего примера выше, html_proofer имеет много дополнительных опций конфигурации. Один из которых является url_ignore. Это особенно полезно для игнорирования ошибок связывания, связанных с SSL, необходимыми входами в систему и платными сетями. Например, у меня на сайте есть значок социальной сети, который ссылается на https://www.linkedin.com/in/joshmfrankel , LinkedIn требует, чтобы пользователь вошел в систему для просмотра активных профилей. Из-за этого проверка html_proofer завершится неудачей. Поэтому я добавил его в черный список URL-адресов, чтобы игнорировать их во время линтинга.

Заключительные мысли

Есть ли что-то, что я мог бы объяснить больше? Легко ли было выполнить вышеперечисленные шаги? У вас есть плагин Jekyll, который вы копаете? Я хотел бы услышать об этом в комментариях ниже.

Спасибо за прочтение.

комментарии предоставлены

Похожие

Стоимость оптимизации сайта
SEOS предлагает стандартную цену пакета для оптимизации сайта. Стоимость услуги оптимизации до 2-х ключевых слов за один раз - 600,00 лв. За каждое дополнительное ключевое слово вы платите 100,00 лв. Мы предлагаем стандартный
Оптимизация сайта и интернет-магазин
... сайта Оптимизация веб-сайтов и интернет-магазины"> Разработка сайта Оптимизация веб-сайтов и интернет-магазины. Разработали ли вы сайт и хотели бы, чтобы его можно было легко найти для пользователей и поисковых систем? Сейчас самое время сосредоточиться на профессиональной оптимизации вашего сайта. Здесь вы найдете серьезное отношение к вашему проекту, экспертный аудит сайта, поиск релевантных ключевых слов, анализ мета-тегов,
Оптимизация сайта (SEO)
... сайта - это структура контента и ссылок, поэтому она легко и преимущественно индексируется поисковыми системами (в основном из Google ) и высоко посещаемый пользователями. Оптимизация может быть внутренней или внешней. Внутренняя оптимизация сайта Внутренняя оптимизация сайта не только желательна, но и необходима для хорошего общего
Размещение вашего статического сайта бесплатно
... развертывание мы можем вообще пропустить этот шаг сборки. После того как вы зарегистрируете и интегрируете свою учетную запись GitHub, все, что вам нужно сделать, - выбрать, какую команду сборки запустить и какую папку развернуть. Каждый раз, когда вы вносите изменения и делаете коммит, Netlify обнаружит это и запустит процесс сборки для вас! Netlify также поставляется с некоторыми отличные возможности такие как свободная обработка
Чже Ха Ха
Чже-Ха Ким jaehakim.com 23 марта 2017 г. Сео Юн-Чже / Кан Кёнг-Джун (в исполнении Гун Ю) Гил Да-Ран
Как сделать SEO для вашего сайта со структурой сайта
Нил Патель в одном из своих постов в блоге Kissmectrics Я сказал, и я цитирую, каждый веб-сайт имеет более высокие шансы на высокий рейтинг в поисковой системе, при условии, что веб-сайт структурно разработан с функциями, которые поддерживают SEO. Каждый веб-сайт, который мы видим в наши дни, имеет ту или иную структуру в зависимости от предпочтений владельца и того, чем занимается сайт. Сайты имеют различный
5 бесплатных плагинов SEO для WordPress
... сайта XML Исправить htaccess файлы, robots.txt Панировочные сухари Интеграция в социальные сети Совместимая версия WordPress Настройки импорта и экспорта Интеграция с сайтами электронной коммерции WordPress Совместимость темы Встроенный API и многое другое .. Топ 5 плагинов для WordPress SEO Мы представим вам 5 самых популярных плагинов SEO и поделимся
Карта сайта
... ся с профессионализма и совершенства. В результате чего сказочный результат. - Джанел Орчард читать дальше> Кармель разработала
Как исправить ошибку в Yoast SEO sitemap
Я уже нашел несколько клиентов, с которыми это происходит, и я полагаю, что если вы прочитаете эту статью, есть хороший шанс, что это происходит и с вами: консоль поиска Google сообщает об ошибке в карте сайта , и когда вы идете чтобы посмотреть на него, вы видите простую строку текста на пустой странице: карта сайта практически пуста . В этой статье мы увидим, почему эта проблема генерируется с помощью карты сайта Yoast SEO и, прежде всего, как ее исправить.
Как использовать просроченные домены для SEO
На прошлой неделе я освещал как выиграть аукцион GoDaddy , Допустим, вы только что выиграли свой первый аукцион GoDaddy (эй, хорошая работа), а теперь давайте поговорим о том, что вы действительно можете сделать с этим доменом. Вы можете использовать домены с истекшим сроком для SEO, чтобы передавать свой сок ссылок, и иногда любой трафик, которым еще пользуется домен с истекшим сроком действия
SEO оптимизация вашего сайта на WordPress
Сегодня я хочу рассказать вам о реальной истории SEO оптимизации сайта для сайта WordPress или для сайта. newsvideogame.it Уже существующий веб-сайт и в течение нескольких месяцев (с конца 2015 года)

Комментарии

Является ли самая важная ссылка со стартовой страницы и может ли она переходить на каждую отдельную страницу сайта с помощью обычных ссылок?
Является ли самая важная ссылка со стартовой страницы и может ли она переходить на каждую отдельную страницу сайта с помощью обычных ссылок? Быстрое исправление может заключаться в загрузке файла сайта XML в поисковой консоли, поэтому проверьте, существует ли он. Более подробную информацию об индексации можно найти в Google: Получите ваш контент в Google , нацеливание
Дайте мне знать, сколько из вас также создают изображения сайта вашего блога?
Дайте мне знать, сколько из вас также создают изображения сайта вашего блога? Не забудьте подписаться на мою электронную рассылку для получения новых обновлений. Если вы находите этот пост полезным, не забудьте поделиться им в Facebook и Twitter.
Возможно, немного, но является ли SEO причиной для защиты вашего сайта с помощью SSL-сертификата?
Возможно, немного, но является ли SEO причиной для защиты вашего сайта с помощью SSL-сертификата? Google Chrome Браузер В дополнение к поисковому гиганту, Google также является владельцем браузера Chrome, лидера среди браузеров. Chrome разработан для скорости, простоты и безопасности. Почти все знакомы с зеленым замком, например, когда вы подключены к банку. Незащищенные соединения были стандартными, и об этом ничего не сообщалось. Google Chrome выходит туда с января 2017 года
Как будет выглядеть иерархия сайта (каковы основные элементы)?
Как будет выглядеть иерархия сайта (каковы основные элементы)? Будет ли контент действительно доступен каждому пользователю? Как контент будет полезен пользователям? Общая концепция заключается в том, что пользователи находят одностраничные веб-сайты более удобными и простыми в использовании, но это не исключает возможности того, что им понравится комплексный многостраничный веб-сайт, созданный опытными дизайнерами UX. Конкурентным
Знаете ли вы, что способ кодирования вашего сайта напрямую влияет на SEO вашего сайта?
Знаете ли вы, что способ кодирования вашего сайта напрямую влияет на SEO вашего сайта? Чтобы стать маленьким королем поиска Google, оптимизируйте без дальнейшей задержки определенные технические критерии вашего сайта. Хотите узнать больше о SEO? Иди быстро прочитай это определение SEO , 1. Проверьте, насколько быстро загружается ваш сайт Сайт, который загружается медленно, теряет очки для Google.
Какие факторы «адаптивного дизайна» помогают улучшить позиционирование моего сайта или блога?
Какие факторы «адаптивного дизайна» помогают улучшить позиционирование моего сайта или блога? Мы уже знаем статистику, но ее было легко предсказать, поскольку в нашу эпоху почти все мы уже немного «пристрастились» к мобильным телефонам, и мы никуда не денемся без них. При поддержке статистики пришло время стать одним из тех, кто использует адаптивный дизайн, и еще больше с алгоритмом Mobile First. Но какие факторы выигрывают от адаптивной модели?
Но кто будет делать хорошие решения для вашего сайта или блога?
Но кто будет делать хорошие решения для вашего сайта или блога? Чтобы отпраздновать новый 2018 год и предоставляемые им возможности, откройте для себя хорошие SEO и SEA решения наших SEO экспертов. 1. Люди также спрашивают с помощью Google «В 2018 году PAA, People And Ask, другие задаваемые вопросы, занимают еще большее место в поисковой выдаче и укрепляют позиции Google в области голосового поиска. Поэтому в 2018 году, как никогда ранее, мы вводим вопросы в
Вы обеспокоены плохим авторитетом домена вашего сайта / блога?
Вы обеспокоены плохим авторитетом домена вашего сайта / блога? Вы ищете способы улучшить его и занять первое место в рейтинге? Возможно, вы не одиноки. Читайте дальше, чтобы узнать больше о полномочиях домена и о том, как наилучшим образом использовать эту технику. Изображение предоставлено: http://cdn4.techlila.com/
Что включить в мета-описание вашего продукта?
Что включить в мета-описание вашего продукта? Описание должно включать название продукта и ключевые слова. Как видно из приведенных ниже примеров, Google выделяет слова из описания, соответствующего запросу пользователя. Помимо этого, вы можете добавить такие преимущества, как бесплатная доставка и возврат, гарантия возврата денег и другая информация, которая может отличить ваш фрагмент кода от остальных. Фрагмент из Amazon, приведенный ниже,
Как настроить RSS-каналы и включить подписку электронной почты на каналы на моем собственном веб-сайте WordPress?
Как настроить RSS-каналы и включить подписку электронной почты на каналы на моем собственном веб-сайте WordPress? Кроме того, как мне продвигать этот канал в другом месте (например, в моей учетной записи LinkedIn)? По умолчанию WordPress поставляется с различными каналами ( http://codex.wordpress.org/WordPress_Feeds ). Эти различные каналы запускаются через теги шаблона в файле header.php темы WordPress. Вы можете настроить фид
Есть мысли по этому поводу?
Есть мысли по этому поводу? Что еще пытались сделать с вашим Premier? Samsung se-s DMA mode 2: I c Вот ссылка на руководство. Но для оптических приводов необходимо использовать samsung writemaster se-s164, чтобы иметь это преимущество: давайте постараемся избежать других программных конфликтов. Стоимость доставки не может быть рассчитана. Оплата Ваша кредитная карта будет списана в день закрытия аукциона. Комментарии к этому руководству Ваше имя. Продавец не указал способ доставки

Помнишь, когда я это сказал?
Легко ли было выполнить вышеперечисленные шаги?
У вас есть плагин Jekyll, который вы копаете?
Разработали ли вы сайт и хотели бы, чтобы его можно было легко найти для пользователей и поисковых систем?
Является ли самая важная ссылка со стартовой страницы и может ли она переходить на каждую отдельную страницу сайта с помощью обычных ссылок?
Дайте мне знать, сколько из вас также создают изображения сайта вашего блога?
Возможно, немного, но является ли SEO причиной для защиты вашего сайта с помощью SSL-сертификата?
Возможно, немного, но является ли SEO причиной для защиты вашего сайта с помощью SSL-сертификата?
Как будет выглядеть иерархия сайта (каковы основные элементы)?
Будет ли контент действительно доступен каждому пользователю?
Меню сайта
Мини-профиль
  • Регистрация Напомнить пароль?

    Бесплатно можно смотреть фильмы онлайн и не забудьте о шаблоны dle на нашем ресурсе фильмы бесплатно скачать c лучшего сайта
    Опросы
    Топ новости