Por qué dejar Ghost(Pro), y lo que deja atrás
La tarifa de Ghost(Pro) está indexada a la audiencia: cada plan limita el número de miembros, y Ghost le invita a subir de plan cuando la publicación crece. Para un editor independiente es un coste legible. Para una agencia que gestiona la newsletter o el medio de cinco clientes, son cinco suscripciones que siguen cada una su propia curva. El plan de entrada excluye además los temas personalizados y las integraciones a medida.
Autoalojar resuelve ambos puntos: un servidor aloja varias publicaciones, y usted instala el tema y las integraciones que necesite.
Hay que ser honesto con la otra columna. Ghost(Pro) incluye el envío de newsletters con la entregabilidad ya configurada, las actualizaciones, las copias de seguridad y el soporte del editor. Al salir, cada una de esas tareas pasa a ser suya. No es un proyecto inabordable, pero es un coste real, que conviene calcular antes de decidir y no descubrir después.
Lo que recupera al salir de Ghost(Pro)
- Un coste que ya no sigue a la audiencia — el servidor se dimensiona según el tráfico y el volumen de imágenes, no según el número de miembros inscritos.
- Varias publicaciones en una misma máquina — una agencia agrupa sus instancias de Ghost en uno o dos VPS en lugar de acumular suscripciones.
- Temas e integraciones sin restricción de plan — tema a medida, webhooks, herramientas de analítica o de búsqueda conectadas directamente al servidor.
- El control de los datos — la base MySQL, la carpeta
contenty las copias de seguridad son suyas; usted elige dónde se guardan y cuánto tiempo. - El mismo formato de principio a fin — de Ghost a Ghost la importación es nativa: sin conversor y sin reescribir los artículos.
- Un calendario de actualizaciones elegido — prueba una nueva versión en una copia antes de aplicarla a la publicación en línea.
Lo que cambia, partida por partida
Desplace la tabla
| Partida | Ghost(Pro) | Ghost autoalojado |
|---|---|---|
| Tarificación | Por plan, limitada por número de miembros | Precio del servidor, sea cual sea el número de miembros |
| Envío de newsletters | Incluido, sin configuración | Cuenta de Mailgun obligatoria, facturada aparte |
| Correos de inicio de sesión de miembros | Incluidos | Servidor SMTP que configurar |
| Actualizaciones de Ghost | Aplicadas por el editor | A su cargo |
| Copias de seguridad | Gestionadas por el editor | Base MySQL y carpeta `content` que respaldar usted mismo |
| Tema personalizado | Según el plan | Siempre posible |
| Comisión sobre suscripciones | Ninguna por parte de Ghost en los planes de pago | Ninguna; solo se aplican las comisiones de Stripe |
Requisitos cuantificados antes de tocar Ghost(Pro)
Servidor: prevea 2 vCPU y 2 GB de RAM para una publicación, 4 GB si agrupa dos o tres instancias o si la lista supera unas decenas de miles de miembros. El disco se calcula según sus medios: mida la carpeta de imágenes, duplíquela para las copias locales y sume 10 GB para el sistema.
Base de datos: MySQL 8, no MariaDB. La documentación oficial de Ghost no deja lugar a dudas: MySQL 8 es la única base soportada en producción, y Ghost recomienda abandonar MariaDB. El motor no afecta a la exportación JSON, pero la instancia de destino debe funcionar con MySQL 8.
Versión: la instancia de destino debe tener una versión igual o superior a la de Ghost(Pro). Anote la versión que muestra Ghost Admin antes de instalar nada.
Cuentas y accesos: acceso de propietario a la cuenta de Stripe conectada a la publicación, una cuenta de Mailgun para las newsletters, un relay SMTP para los correos de inicio de sesión y acceso a la zona DNS del dominio.
La instalación en sí no se repite aquí: siga nuestra guía de instalación de Ghost en un VPS y vuelva al paso 5.
La migración en diez pasos, del inventario al cambio
Registrar el estado de referencia
Antes de cualquier exportación, anote lo que la migración deberá encontrar: número de artículos publicados, de páginas, de miembros gratuitos, de pago y con acceso cortesía (filtros de la vista Members de Ghost Admin), versión de Ghost y lista de URL del sitemap. Guarde esa lista en un archivo:
curl -s https://your-domain.com/sitemap-posts.xml | grep -o '<loc>[^<]*' | sed 's/<loc>//' > urls-antes.txt wc -l urls-antes.txtBajar el TTL del dominio
En la zona DNS, reduzca el TTL de los registros del dominio de la publicación a 300 segundos, al menos 24 horas antes del cambio. Es lo que permite, llegado el día, cambiar de dirección IP en pocos minutos y volver atrás igual de rápido.
Exportar todo el contenido
En Ghost Admin, abra Settings → Advanced → Import/Export, pestaña Export, y elija All data. El archivo contiene
export.json(contenido y ajustes),members.csv, los temas instalados en.zip,routes.yamlyredirects.yaml. Compruebe que está cada archivo antes de continuar.Recuperar imágenes y medios
La documentación de Ghost lo aclara: las imágenes no están en la exportación. En Ghost(Pro) no tiene acceso al servidor, así que hay dos vías. Pida al soporte de Ghost(Pro) un archivo de la carpeta
content/images, o reconstrúyala a partir de las URL públicas presentes en la exportación:grep -o '/content/images/[^"\\]*' export.json | sort -u > images.txt wc -l images.txtDescargue después cada archivo conservando el árbol
content/images/…: el importador de Ghost espera esa ruta.Instalar la instancia de destino en un subdominio de prueba
Instale Ghost en el VPS con una URL provisional, por ejemplo
https://new.your-domain.com, con MySQL 8 y una versión al menos igual a la de origen. La publicación de producción sigue en Ghost(Pro) todo ese tiempo: sus lectores no ven nada.Importar contenido, tema y redirecciones
En Settings → Advanced → Import/Export, importe un
.zipque contengaexport.jsony la carpetacontent/images: el importador acepta JSON y zip, y un archivo de imágenes voluminoso se puede dividir en varios zip. Compruebe después el tema antes de subirlo:npx gscan -z mi-tema.zipActívelo y suba
redirects.yamlyroutes.yamlen Settings → Labs.Conectar la misma cuenta de Stripe y luego importar los miembros
Ghost pide conectar la misma cuenta de Stripe que la publicación original antes de importar los miembros de pago. Importe primero una muestra de cinco a diez miembros de pago, revise su plan y su suscripción en la ficha del miembro, y después importe el resto de
members.csv.Conectar el correo: SMTP y Mailgun
Configure el bloque
maildeconfig.production.json(o las variables de entorno equivalentes en Docker) con su relay SMTP, para los correos de inicio de sesión. Introduzca después las claves API de Mailgun en los ajustes Email newsletter de Ghost Admin. Pruebe ambos: un enlace de inicio de sesión recibido en una dirección interna y una newsletter de prueba enviada a una etiqueta interna.Comparar antes y después
Cuente artículos y miembros en la nueva instancia:
mysql -u ghost -p ghost_prod -e "SELECT status, COUNT(*) FROM posts GROUP BY status; SELECT status, COUNT(*) FROM members GROUP BY status;"Las cifras deben coincidir con las del paso 1. Abra diez artículos al azar, imágenes incluidas, y busque cualquier rastro del antiguo host en el código fuente de las páginas.
Cambiar el dominio y mantener Ghost(Pro) en paralelo
Sustituya la URL provisional por el dominio definitivo en la configuración, reinicie Ghost y modifique el registro DNS. Vuelva a recorrer el sitemap y compruebe que cada URL antigua responde 200:
while read u; do echo "$(curl -s -o /dev/null -w '%{http_code}' "$u") $u"; done < urls-antes.txt | grep -v '^200'Mantenga activa la suscripción de Ghost(Pro) una o dos semanas. Para el correo transaccional de varias publicaciones, consulte nuestra guía del relay SMTP en un VPS.
Suscripciones de Stripe: lo que se transfiere y lo que hay que probar
La exportación de miembros incluye, para cada miembro de pago, su identificador de cliente de Stripe (stripe_customer_id). El importador también sabe encontrarlo por sí mismo: con el valor auto, Ghost busca en la cuenta de Stripe conectada un cliente con la misma dirección de correo. De ahí la condición que fija la documentación: la nueva instancia debe estar conectada a la misma cuenta de Stripe antes de la importación. Otra cuenta no contiene esos clientes, y sus suscriptores de pago llegarían como miembros gratuitos.
Las suscripciones en sí permanecen en Stripe: la migración no las cancela y no pide a nadie que vuelva a suscribirse. La documentación no detalla, en cambio, cómo cada suscripción recupera su plan en la nueva instancia. Por eso existe la muestra del paso 7: verifique en algunas fichas que el plan, la fecha de renovación y el estado de pago son correctos antes de importar toda la lista.
Tras el cambio, abra los endpoints de webhook en el panel de Stripe. El de la nueva instancia debe recibir los eventos; el de Ghost(Pro) solo se elimina al cerrar la antigua suscripción.
Newsletters: el hueco del correo que hay que cubrir
Es el punto que la mayoría de las migraciones descubre demasiado tarde. En Ghost(Pro), el envío de newsletters está incluido. En autoalojado, la documentación de Ghost es explícita: Mailgun es el único proveedor de envío masivo soportado, y un simple servidor SMTP no puede enviar las newsletters. El SMTP solo sirve para los correos de inicio de sesión y las invitaciones.
Necesita por tanto dos canales: un relay SMTP para el transaccional y una cuenta de Mailgun para la difusión. En cuanto al coste, Mailgun ha retirado o hecho difícil de encontrar su plan Flex para las cuentas nuevas: consulte la tarifa vigente en el sitio de Mailgun antes de presupuestar, según su volumen mensual de envíos (miembros suscritos multiplicados por la frecuencia de publicación).
Prepare por último la autenticación del dominio de envío: los registros SPF y DKIM que proporciona Mailgun se añaden a la zona DNS antes del primer envío real. Una newsletter enviada desde un dominio no autenticado acaba en spam, y es la reputación de todo el dominio la que se resiente.
El cambio de DNS, con la interrupción reducida al mínimo
La interrupción depende de dos elementos: la propagación DNS y el certificado TLS. El TTL reducido en el paso 2 resuelve el primero. Para el segundo hay dos opciones. Si su servidor obtiene el certificado mediante un desafío HTTP (Caddy en la instalación Docker oficial de Ghost, certbot con nginx), solo puede hacerlo una vez cambiado el DNS: cuente con unos segundos o pocos minutos de errores TLS. Si su DNS lo permite, un desafío DNS-01 emite el certificado antes del cambio y elimina esa ventana.
Elija una franja de poco tráfico y no envíe ninguna newsletter ese día. Una publicación programada en Ghost(Pro) seguiría saliendo desde la antigua instancia: suspenda los envíos programados antes de exportar.
Mientras Ghost(Pro) siga activo, volver atrás consiste en restaurar el antiguo registro DNS. Es su red de seguridad. Cierre la suscripción solo tras una semana sin diferencias en los recuentos, los webhooks de Stripe y la entregabilidad.
Copias de seguridad desde el primer día
Ghost(Pro) hacía las copias por usted; ahora es su tarea. Programe como mínimo un volcado diario de la base y una copia de la carpeta content, hacia un almacenamiento fuera del VPS:
mysqldump --single-transaction -u ghost -p ghost_prod | gzip > /backup/ghost-$(date +%F).sql.gz
tar czf /backup/content-$(date +%F).tar.gz /var/www/ghost/contentCierre en el cortafuegos todo puerto distinto de 22, 80 y 443, y pruebe una restauración completa en una máquina limpia al menos una vez por trimestre.
Resolución de problemas: los errores más frecuentes
413 Request Entity Too Large al importar: nginx rechaza el archivo. Aumente client_max_body_size en el bloque server (por ejemplo 200m), recargue nginx o divida las imágenes en varios zip.
Imágenes rotas tras la importación: el archivo no respetaba la ruta content/images/…, o faltan ficheros. Compare images.txt con el contenido de la carpeta en el servidor y vuelva a importar los que faltan.
Miembros de pago importados como gratuitos: Stripe no estaba conectado en el momento de la importación, o era otra cuenta. Conecte la cuenta correcta y vuelva a importar los miembros afectados.
El enlace de inicio de sesión nunca llega: el bloque mail falta o es incorrecto. Consulte los registros de Ghost (ghost log, o docker compose logs ghost) en el momento de la solicitud.
No aparece la opción de envío por correo al publicar: Mailgun no está configurado. El SMTP no basta para las newsletters; introduzca las claves API de Mailgun en Email newsletter.
Para una agencia: agrupar las publicaciones de sus clientes
Migrar una publicación lleva media jornada de preparación y una hora de cambio. La segunda va más rápido, porque el servidor, el relay SMTP y el método ya existen. Ahí es donde el autoalojamiento resulta rentable para una agencia: varias instancias de Ghost en un mismo VPS, cada una con su base y su dominio, y una sola factura de infraestructura.
En ServOrbit, los VPS empiezan en 99 DH/mes impuestos no incluidos (IVA excluido), con acceso root e IPv4 dedicada, y sus dominios, servidores y renovaciones se siguen en un mismo lugar. Si la pregunta sigue siendo «¿quién se ocupa del servidor?», la opción de administración VPS la responde: usted gestiona la relación editorial con sus clientes, nosotros nos encargamos de la infraestructura.
Esta guía se ofrece tal cual: ServOrbit no realiza la migración de su publicación Ghost(Pro); la administración VPS cubre el servidor, no este cambio.