Русский

Блог · Гайды по деплою

Как задеплоить сайт на Jekyll в 2026: Dockerfile, одна команда и HTTPS

Команда Pethost · · 9 мин чтения

У вас есть сайт на Jekyll, который собирается на ноутбуке командой bundle exec jekyll build, и вы хотите выложить его по адресу с HTTPS. На Pethost для этого нужны Dockerfile на 38 строк, который вы скопируете с этой страницы, и одна команда, pethost deploy. Сайт, который создает jekyll new, в первый раз оказался в сети через 34 секунды, а после изменения — через 3 секунды.

Коротко
  • Один файл: Dockerfile из двух этапов. Ruby 4.0 запускает bundle install и JEKYLL_ENV=production bundle exec jekyll build, затем Caddy отдает _site.
  • Одна команда: pethost deploy в папке, где лежит _config.yml. 34 с в первый раз, 3 с на следующий деплой.
  • Адреса Jekyll работают: /about/ отвечает 200, /about ведет на него, пост открывается и с .html, и без, а по адресу, где нет страницы, показывается собственный 404.html сайта.
  • Адрес: https://my-site.yourname.pethost.app, сразу с HTTPS. Свой домен — одна DNS-запись.
  • Цена: 9,99 € в месяц за 2 vCPU, 3 GB и 30 GB — для этого сайта и всех остальных ваших проектов. Бесплатного тарифа нет.

Что нужно, чтобы задеплоить сайт на Jekyll в 2026 году

Три вещи: сам сайт, команда pethost и аккаунт Pethost.

Сайт здесь — тот, что создают первые шаги Jekyll. Jekyll требует Ruby 2.7.0 или новее; мы создали сайт на Ruby 4.0.9:

gem install jekyll bundler
jekyll new my-site
cd my-site

jekyll new пишет Gemfile с Jekyll 4.4.1, темой minima и плагином jekyll-feed, запускает bundle install, который пишет Gemfile.lock, и добавляет главную страницу, страницу «О сайте», приветственный пост, 404.html и .gitignore, который не пускает в репозиторий _site. Сохраните Gemfile.lock: сборка ставит ровно те гемы, которые в нем указаны.

Команда — это одна программа, которая ставится одной строкой. Все ее команды есть в справочнике CLI.

curl -fsSL https://pethost.dev/install.sh | sh      # macOS, Linux
irm https://pethost.dev/install.ps1 | iex           # Windows, in PowerShell

Аккаунту нужен тариф. Если вы не вошли, pethost deploy откроет браузер, и вы войдете. Если тарифа еще нет, команда покажет, где его выбрать, и подождет.

Почему сайту на Jekyll нужен Dockerfile на Pethost

Проект на Pethost запускается из Dockerfile или Compose-файла. Для тех видов проектов, которые pethost знает, например для сайта на Eleventy, pethost deploy пишет Dockerfile сам. Jekyll среди них нет, поэтому в папке, которую создал jekyll new, деплой останавливается на ответе машины. Вот весь экран:

$ pethost deploy
Name it [my-site]:              it will live at https://my-site.sam.pethost.app
✓ Packed 8 files, 17 KB
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
  Your coding agent writes one in a minute: "Write a Dockerfile for this app".
  Then run pethost deploy again.     How Pethost runs a folder: https://pethost.dev/docs/api/#CreateProject

Ничего не создано: ни проекта, ни адреса. Добавьте файл ниже и запустите ту же команду.

Dockerfile для сайта на Jekyll

Сохраните его как Dockerfile в папке, где лежит _config.yml. Это файл целиком:

# Jekyll builds the site into _site, and Caddy serves it.
FROM ruby:4.0 AS build
WORKDIR /site

# The gems first: a change to a page does not install them again.
COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .
RUN JEKYLL_ENV=production bundle exec jekyll build

# The site is files: Caddy serves them on port 80.
FROM caddy:2
COPY --from=build /site/_site /srv

COPY <<'EOF' /etc/caddy/Caddyfile
:80 {
	root * /srv
	# A browser that takes its answers compressed gets them so.
	encode
	# Names that begin with a dot are no pages;
	# .well-known is the one such folder that is there for visitors.
	@own {
		path */.*
		not path /.well-known/*
	}
	error @own 404
	# A page's address works without its ".html", and a folder's leads to its index.html.
	try_files {path} {path}.html {path}/
	file_server
	# An address that is no page: the site's own 404.html, if it has one.
	handle_errors 404 {
		rewrite * /404.html
		file_server
	}
}
EOF
EXPOSE 80

Первый этап собирает сайт так же, как вы собираете его на ноутбуке:

Второй этап — небольшой веб-сервер, который pethost пишет для любого сайта из файлов. Он отдает _site, папку, куда Jekyll пишет результат, и ничего из образа Ruby с ним не уходит: сайт работал в 15 MB памяти.

Деплой сайта на Jekyll одной командой

Снова запустите pethost deploy, теперь с Dockerfile в папке. Вот весь экран:

$ pethost deploy
Name it [my-site]:              it will live at https://my-site.sam.pethost.app
✓ Packed 9 files, 18 KB
✓ Uploaded straight to your machine
✓ Built and started in 34 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
✓ app listens on 80 → https://my-site.sam.pethost.app
  It answers 200.

https://my-site.sam.pethost.app

Wrote .pethost (commit it). Next:   pethost logs -f   ·   pethost open
  1. Она спрашивает одно Имя проекта — первое слово его адреса. Enter берет имя папки.
  2. Папка уходит прямо на вашу машину Девять файлов: то, что написал jekyll new, и Dockerfile. Строка, которая начинается с ·, — это машина сообщает, что сделала сама: она нашла Dockerfile и не нашла Compose-файла, поэтому написала его.
  3. Машина собирает и запускает его В 34 секунды входит скачивание образов Ruby и Caddy, которых на машине еще не было. Затем pethost сам открывает адрес и печатает, что тот ответил: 200.

Файл .pethost говорит, какой проект в этой папке. Закоммитьте его вместе с Dockerfile, и следующий деплой ничего не спросит.

Работают ли адреса Jekyll?

Jekyll пишет about.markdown в _site/about/index.html, а пост — по адресу, который дает его постоянная ссылка по умолчанию, /:categories/:year/:month/:day/:title:output_ext. Мы спросили у задеплоенного сайта то же, что спрашивает посетитель:

Что ответил задеплоенный сайт на Jekyll
АдресОтвет
/200, главная страница со списком постов
/about/200, страница
/about308, редирект на /about/
/jekyll/update/2026/10/25/welcome-to-jekyll.html200, приветственный пост
/jekyll/update/2026/10/25/welcome-to-jekyll200, тот же пост
/feed.xml200, Atom-лента
/nothing404, собственная страница сайта: «Page not found :(»

Страницы, лента и таблица стилей приходили сжатыми в браузер, который об этом просил.

Указать url сайта, изменить страницу и задеплоить снова

jekyll new оставляет url в _config.yml пустым, поэтому в ссылках ленты не было хоста: /jekyll/update/2026/10/25/welcome-to-jekyll.html. Читалке лент нужен полный адрес. Укажите его, а заодно и название сайта:

title: My site
url: "https://my-site.sam.pethost.app"

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

$ pethost deploy
my-site (.pethost)
✓ Packed 10 files · uploaded · built and started in 3 s
  · wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
  · kept the project's x-pethost
  It answers 200.
https://my-site.sam.pethost.app

Теперь ссылки ленты начинаются с https://my-site.sam.pethost.app/, а в заголовках страниц стоит «My site».

Деплой сайта на Jekyll из GitHub при каждом пуше

Положите папку в репозиторий вместе с Dockerfile и .pethost; _site туда не попадает, как и задает .gitignore от Jekyll. Затем один раз подключите репозиторий:

pethost github sam/my-site          # from now on, every push deploys itself

Машина скачивает каждый коммит и собирает его тем же Dockerfile. Pethost читает только те репозитории, к которым вы дали доступ его GitHub App. Если деплой пошел не так, pethost rollback возвращает предыдущую версию, а ваша машина хранит три версии до текущей. ИИ-агент может сделать все это за вас через MCP-сервер Pethost: как агент деплоит проект и присматривает за ним.

Свой домен для сайта на Jekyll

Любое имя в домене вашего аккаунта сразу становится адресом с HTTPS. Для домена, которым вы владеете, нужны одна команда и одна DNS-запись:

pethost domain add www.example.com

Команда печатает запись, которую нужно создать: CNAME с вашего имени на имя вашей машины. Сертификат от Let's Encrypt появляется сам, как только имя начинает указывать на машину, и сам продлевается. Затем укажите новый адрес в url в _config.yml и задеплойте снова, чтобы лента и ссылки на страницах вели на него. pethost password ставит страницу с паролем перед всем сайтом — для сайта, который еще не публичный.

Что вы получаете за эти деньги

Pethost стоит 9,99 € в месяц за все, что вы хостите, на 2 vCPU, 3 GB памяти и 30 GB диска. Собранный сайт на Jekyll — это файлы за Caddy, в 15 MB этой памяти, так что в тарифе остается место для бэкенда формы комментариев, базы данных и других ваших проектов. Платы за проект нет, и ничего не считается по счетчику: второй блог не стоит ничего сверху, как и месяц, когда пост попадает на главную какого-нибудь форума.

Что уже сделано за вас: HTTPS с сертификатами, которые продлеваются сами, деплои из GitHub, ночные бэкапы, которые хранятся 14 дней, SSH в любой контейнер и учет каждого запроса без скриптов на ваших страницах. Панель показывает самые популярные пути за последние 30 дней, а для блога это список постов, которые люди действительно читают. Ничего не засыпает, поэтому читатель никогда не ждет холодного старта. Тарифы — в разделе цен на главной странице.

Какие посты читают. Десять самых популярных путей проекта с долей и временем ответа, и лог отдельных запросов.
Панель Pethost: десять самых популярных путей проекта с долей, числом запросов и временем ответа, и лог отдельных запросов.

Pethost — лучший выбор для

  • Блогеров, которые делают не только блог: сайт на Jekyll, приложение и его база данных на одном тарифе, с одним счетом
  • Разработчиков с несколькими сайтами, где у каждого проекта свой сайт документации и своя страница, по одной фиксированной цене
  • Людей, за которых деплоит агент: Claude Code или Codex деплоит сайт и читает его логи
  • Небольших команд, которые держат сайт за страницей с паролем до запуска

Ищите другое, если

  • Вашему приложению нужны несколько регионов или автомасштабирование

Вопросы

Нужен ли Dockerfile, чтобы задеплоить сайт на Jekyll на Pethost?

Да. Проект на Pethost запускается из Dockerfile или Compose-файла, а pethost deploy не пишет его для Jekyll. 38 строк на этой странице — это файл целиком: Ruby собирает сайт, а Caddy отдает _site.

Какую версию Ruby использует Dockerfile для Jekyll?

Ту, что указана в его первой строке: ruby:4.0, а это был Ruby 4.0.9, когда мы собирали сайт. Jekyll требует Ruby 2.7.0 или новее, а если сайт закрепляет версию в .ruby-version, в Dockerfile нужно указать ту же.

Почему ссылки в ленте Jekyll относительные?

Потому что url в _config.yml пустой: таким его оставляет jekyll new. Укажите в нем адрес сайта, например url: "https://my-site.sam.pethost.app", и задеплойте снова: тогда ссылки ленты будут содержать полный адрес.

Можно ли деплоить сайт на Jekyll из GitHub при каждом пуше?

Да. Один раз задеплойте папку через pethost deploy, затем запустите pethost github owner/repository. С этого момента каждый пуш собирает сайт тем же Dockerfile и деплоит его, а pethost rollback возвращает более ранний коммит.

Как подключить свой домен с HTTPS к сайту на Jekyll?

Запустите pethost domain add www.example.com и создайте одну DNS-запись, которую команда напечатает: CNAME на имя вашей машины. Сертификат от Let's Encrypt появляется сам, как только имя начинает указывать на машину, и сам продлевается.

Сколько стоит хостинг сайта на Jekyll на Pethost?

9,99 € в месяц за Starter: 2 vCPU, 3 GB и 30 GB без платы за проект, так что там же работают ваши другие сайты, приложения и базы данных. Бесплатного тарифа нет. Цены без НДС.

На экранах — деплои сайта, созданного jekyll new, с Jekyll 4.4.1 и minima 2.5.2, Ruby 4.0.9 и Bundler 4.0.23, и pethost 0.2.4 на нашей тестовой машине, где до первого деплоя не было ни образа Ruby, ни образа Caddy. Аккаунт на них — пример, sam.

  1. Jekyll: быстрый старт
  2. Jekyll: установка и требования
  3. Jekyll: пошаговое руководство, деплой
  4. Jekyll: постоянные ссылки
  5. pethost, командная строка Pethost

Запустите свои проекты уже сегодня

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

Разместить проекты за 9,99 €/мес