Español

Blog · Guías de despliegue

Cómo desplegar un sitio Jekyll en 2026: un Dockerfile, un comando y HTTPS

Por el equipo de Pethost · · 10 min de lectura

Tienes un sitio Jekyll que se construye en tu equipo con bundle exec jekyll build, y quieres ponerlo en línea en una dirección con HTTPS. En Pethost eso lleva un Dockerfile de 38 líneas, que copias de esta página, y un comando, pethost deploy. El sitio que crea jekyll new estuvo en línea en 34 segundos la primera vez, y en 3 segundos después de un cambio.

En resumen
  • Un archivo: un Dockerfile en dos etapas. Ruby 4.0 ejecuta bundle install y JEKYLL_ENV=production bundle exec jekyll build, y luego Caddy sirve _site.
  • Un comando: pethost deploy en la carpeta que tiene _config.yml. 34 s la primera vez, 3 s para el despliegue siguiente.
  • Las direcciones de Jekyll funcionan: /about/ responde 200, /about lleva a ella, una entrada responde con o sin .html, y una página que no existe muestra el propio 404.html del sitio.
  • La dirección: https://my-site.yourname.pethost.app, con HTTPS al instante. Tu propio dominio es un registro DNS.
  • El precio: 9,99 € al mes por 2 vCPU, 3 GB y 30 GB, para este sitio y cada uno de tus otros proyectos. No hay plan gratuito.

Qué necesitas para desplegar un sitio Jekyll en 2026

Tres cosas: el sitio, el comando pethost y una cuenta de Pethost.

El sitio de este ejemplo es el que crea el quickstart de Jekyll. Jekyll pide Ruby 2.7.0 o superior; nosotros lo creamos con Ruby 4.0.9:

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

jekyll new escribe un Gemfile con Jekyll 4.4.1, el tema minima y el plugin jekyll-feed, ejecuta bundle install, que escribe Gemfile.lock, y agrega una página de inicio, una página “acerca de”, una entrada de bienvenida, un 404.html y un .gitignore que deja fuera _site. Conserva Gemfile.lock: el build instala exactamente las gems que nombra.

El comando es un solo programa, que se instala con una línea. Todos sus comandos están en la referencia de la CLI.

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

La cuenta necesita un plan. Si no has iniciado sesión, pethost deploy abre tu navegador e inicia la sesión. Si aún no tienes plan, te muestra dónde elegir uno, y espera.

Por qué un sitio Jekyll necesita un Dockerfile en Pethost

En Pethost un proyecto se ejecuta desde un Dockerfile o un archivo de Compose. Para los tipos de proyecto que conoce, como un sitio Eleventy, pethost deploy escribe el Dockerfile él mismo. Jekyll no está entre ellos, así que en la carpeta que creó jekyll new el despliegue se detiene en la respuesta de la máquina. Esta es la pantalla entera:

$ 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

No se creó nada: ni proyecto ni dirección. Agrega el archivo de abajo y ejecuta el mismo comando.

El Dockerfile para un sitio Jekyll

Guárdalo como Dockerfile en la carpeta que tiene _config.yml. Este es el archivo entero:

# 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

La primera etapa construye el sitio como lo haces tú en tu equipo:

La segunda etapa es el pequeño servidor web que pethost escribe para cada sitio que son archivos. Sirve _site, la carpeta de salida de Jekyll, y nada de la imagen de Ruby va con él: el sitio se ejecutó en 15 MB de memoria.

Despliega el sitio Jekyll con un comando

Vuelve a ejecutar pethost deploy, ahora con el Dockerfile en la carpeta. Esta es la pantalla entera:

$ 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. Pregunta una sola cosa El nombre del proyecto, que es la primera palabra de su dirección. Con Enter se queda el nombre de la carpeta.
  2. La carpeta va directa a tu máquina Nueve archivos: lo que escribió jekyll new y el Dockerfile. La línea que empieza con · es la máquina diciendo lo que hizo por sí misma: encontró un Dockerfile y ningún archivo de Compose, así que escribió uno.
  3. La máquina lo construye y lo inicia Los 34 segundos incluyen la descarga de las imágenes de Ruby y de Caddy, que la máquina aún no tenía. Después pethost visita la dirección él mismo e imprime lo que respondió: 200.

El archivo .pethost dice qué proyecto es esta carpeta. Haz commit de él junto con el Dockerfile, y el siguiente despliegue no pregunta nada.

¿Funcionan las direcciones de Jekyll?

Jekyll escribe about.markdown en _site/about/index.html, y una entrada en la dirección que da su permalink por defecto, /:categories/:year/:month/:day/:title:output_ext. Le preguntamos al sitio desplegado lo que pregunta un visitante:

Lo que respondió el sitio Jekyll desplegado
DirecciónRespuesta
/200, la página de inicio con la lista de entradas
/about/200, la página
/about308, una redirección a /about/
/jekyll/update/2026/10/25/welcome-to-jekyll.html200, la entrada de bienvenida
/jekyll/update/2026/10/25/welcome-to-jekyll200, la misma entrada
/feed.xml200, el feed Atom
/nothing404, la propia página del sitio: “Page not found :(”

Las páginas, el feed y la hoja de estilos llegaron comprimidos al navegador que los pidió así.

Define la url del sitio, cambia una página y vuelve a desplegar

jekyll new deja url vacía en _config.yml, así que los enlaces del feed no tenían host: /jekyll/update/2026/10/25/welcome-to-jekyll.html. Un lector de feeds necesita la dirección entera. Defínela, y con ella el título del sitio:

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

Luego ejecuta el mismo comando. El segundo despliegue tardó 3 segundos, porque la máquina conserva las capas del build: las gems no se volvieron a instalar.

$ 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

Los enlaces del feed ahora empiezan por https://my-site.sam.pethost.app/, y los títulos de las páginas dicen “My site”.

Despliega el sitio Jekyll desde GitHub con cada push

Pon la carpeta en un repositorio, con el Dockerfile y .pethost; _site se queda fuera, como dice el .gitignore de Jekyll. Luego conecta el repositorio una vez:

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

La máquina descarga cada commit y lo construye con el mismo Dockerfile. Pethost lee solo los repositorios que le diste a su GitHub App. Si un despliegue sale mal, pethost rollback vuelve a poner la versión anterior, y tu máquina conserva las tres versiones anteriores a la actual. Un agente de IA puede hacer todo esto por ti a través del servidor MCP de Pethost: cómo un agente despliega y cuida un proyecto.

Usa tu propio dominio para el sitio Jekyll

Cualquier nombre bajo el dominio de tu cuenta es una dirección al instante, con HTTPS. Un dominio tuyo lleva un comando y un registro DNS:

pethost domain add www.example.com

El comando imprime el registro que debes crear: un CNAME de tu nombre al nombre de tu máquina. Un certificado de Let's Encrypt llega solo en cuanto el nombre resuelve, y se renueva solo. Después pon en url de _config.yml la nueva dirección y vuelve a desplegar, para que el feed y los enlaces de las páginas la nombren. pethost password pone una página de contraseña delante de todo el sitio, para uno que aún no es público.

Qué obtienes por el precio

Pethost cuesta 9,99 € al mes por todo lo que alojas, con 2 vCPU, 3 GB de memoria y 30 GB de disco. El sitio Jekyll construido son archivos detrás de Caddy, en 15 MB de esa memoria, así que en el plan queda sitio para el backend de un formulario de comentarios, una base de datos y tus otros proyectos. No pagas por proyecto y nada se mide por uso: un segundo blog no cuesta nada más, y tampoco el mes en que una entrada llega a la portada de un foro.

Lo que ya está hecho por ti: HTTPS con certificados que se renuevan solos, despliegues desde GitHub, backups cada noche conservados 14 días, SSH a cualquier contenedor y cada petición contada, sin ningún script en tus páginas. El panel muestra los paths más visitados de los últimos 30 días, que en un blog son la lista de entradas que la gente lee de verdad. Nada se duerme, así que un lector nunca espera un cold start. Los planes están en la parte de precios de la primera página.

Qué entradas lee la gente. Los diez paths más visitados de un proyecto con su cuota y sus tiempos de respuesta, y el log de cada petición.
El panel de Pethost: los diez paths más visitados de un proyecto con su cuota, su recuento y sus tiempos de respuesta, y el log de cada petición.

Pethost es la mejor opción para

  • Quien tiene un blog y construye algo más: el sitio Jekyll, una app y su base de datos en un solo plan, en una sola factura
  • Desarrolladores con varios sitios, uno de documentación y una página de proyecto cada uno, a un precio fijo
  • Quien deja que su agente despliegue por él: Claude Code o Codex despliega el sitio y lee sus logs
  • Equipos pequeños que mantienen un sitio detrás de una página de contraseña hasta el lanzamiento

Busca otra opción si

  • Tu aplicación necesita varias regiones o autoescalado

Preguntas

¿Un sitio Jekyll necesita un Dockerfile para desplegarse en Pethost?

Sí. En Pethost un proyecto se ejecuta desde un Dockerfile o un archivo de Compose, y pethost deploy no lo escribe para Jekyll. Las 38 líneas de esta página son el archivo entero: Ruby construye el sitio y Caddy sirve _site.

¿Qué versión de Ruby usa el Dockerfile de Jekyll?

La que nombra su primera línea: ruby:4.0, que era Ruby 4.0.9 cuando lo construimos. Jekyll pide Ruby 2.7.0 o superior, y un sitio que fija una versión en .ruby-version debe nombrar la misma ahí.

¿Por qué los enlaces de mi feed de Jekyll son relativos?

Porque url está vacía en _config.yml, como la deja jekyll new. Ponle la dirección del sitio, p. ej. url: "https://my-site.sam.pethost.app", y vuelve a desplegar: los enlaces del feed llevarán entonces la dirección entera.

¿Puedo desplegar un sitio Jekyll desde GitHub con cada push?

Sí. Despliega la carpeta una vez con pethost deploy y luego ejecuta pethost github owner/repository. Desde entonces cada push construye el sitio con el mismo Dockerfile y lo despliega, y pethost rollback vuelve a un commit anterior.

¿Cómo uso un dominio propio con HTTPS para un sitio Jekyll?

Ejecuta pethost domain add www.example.com y crea el único registro DNS que imprime, un CNAME al nombre de tu máquina. Un certificado de Let's Encrypt llega solo en cuanto el nombre resuelve, y se renueva solo.

¿Cuánto cuesta alojar un sitio Jekyll en Pethost?

9,99 € al mes por Starter, con 2 vCPU, 3 GB y 30 GB y sin pagar por proyecto: tus otros sitios, apps y bases de datos también se ejecutan ahí. No hay plan gratuito. Los precios son sin IVA.

Las pantallas son despliegues del sitio que creó jekyll new, con Jekyll 4.4.1 y minima 2.5.2, Ruby 4.0.9 y Bundler 4.0.23, y pethost 0.2.4, en una máquina de pruebas nuestra que no tenía ni la imagen de Ruby ni la de Caddy antes del primer despliegue. La cuenta que aparece es la de ejemplo, sam.

  1. Jekyll: quickstart
  2. Jekyll: instalación y sus requisitos
  3. Jekyll: paso a paso, despliegue
  4. Jekyll: permalinks
  5. pethost, la línea de comandos de Pethost

Pon tus proyectos en línea hoy

Despliega apps, bots y bases de datos desde tu agente, GitHub o el navegador, tantos como quepan, a un precio fijo. Nada medido, nada cobrado aparte.

Alojar todos tus proyectos por 9,99 €/mes