Blog · Guías de despliegue
Cómo desplegar un sitio Jekyll en 2026: un Dockerfile, un comando y HTTPS
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.
- Un archivo: un Dockerfile en dos etapas. Ruby 4.0 ejecuta
bundle installyJEKYLL_ENV=production bundle exec jekyll build, y luego Caddy sirve_site. - Un comando:
pethost deployen 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,/aboutlleva a ella, una entrada responde con o sin.html, y una página que no existe muestra el propio404.htmldel 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:
ruby:4.0es la imagen completa de Ruby, con un compilador de C. Algunas gems de Jekyll, como eventmachine y bigdecimal, se compilan al instalarse: enruby:4.0-slim, que no tiene compilador,bundle installfalló. Si tu sitio fija una versión de Ruby en.ruby-version, pon la misma aquí.- Las gems van primero.
GemfileyGemfile.lockse copian solos, así que un cambio en una página o una entrada reutiliza las gems que la máquina ya instaló. Un lock escrito en un Mac también funciona: construimos el sitio con un lock que solo nombraba macOS, ybundle installeligió por sí mismo las gems para Linux. JEKYLL_ENV=productiones el build que indica el propio paso de despliegue de Jekyll. Lo que tus layouts muestran solo en producción, como la analítica, está en las páginas.
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
- 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.
- La carpeta va directa a tu máquina Nueve archivos: lo que escribió
jekyll newy 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. - 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
pethostvisita 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:
| Dirección | Respuesta |
|---|---|
/ | 200, la página de inicio con la lista de entradas |
/about/ | 200, la página |
/about | 308, una redirección a /about/ |
/jekyll/update/2026/10/25/welcome-to-jekyll.html | 200, la entrada de bienvenida |
/jekyll/update/2026/10/25/welcome-to-jekyll | 200, la misma entrada |
/feed.xml | 200, el feed Atom |
/nothing | 404, 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.
- 9,99 € al mes por todos tus proyectos, nada se mide por uso
- 34 s para construir e iniciar el sitio, descarga de imágenes incluida
- 3 s para el despliegue después de un cambio
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.
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.
- Jekyll: quickstart
- Jekyll: instalación y sus requisitos
- Jekyll: paso a paso, despliegue
- Jekyll: permalinks
- 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.