1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Instalar Ghost en un alojamiento Infomaniak
Esta guía le acompañará en la instalación en Infomaniak de Ghost, una plataforma ideal para los blogs (escritura regular, formato editorial) y los sitios de publicación centrados en el contenido, como Substack o Medium.
Basado en Node.js y utilizando Markdown para la redacción, Ghost se distingue por su ligereza, mientras que WordPress, aunque más flexible y universal, sigue siendo más pesado.
Para obtener ayuda adicional contacte a un socio o inicie una solicitud de oferta gratuita — también descubra el papel del proveedor de alojamiento.
Requisitos previos
- Habiendo instalado un sitio web en blanco de tipo Node.js en un alojamiento web de Infomaniak.
- Crear un acceso SSH.
- Crear una base de datos.
- Poseer una dirección de correo electrónico válida y funcional (especialmente las funcionalidades de contraseña olvidada).
- ¡Detenga su aplicación Node.JS antes de realizar los siguientes pasos!
Instalación de Ghost
Para ello:
- Conéctese al servidor a través de SSH (¿necesita ayuda?).
Clonar y ejecutar el script de instalación (ejecute estos comandos uno por uno):
git clone https://github.com/Infomaniak/hosting-tools.git cd hosting-tools/h3-ghost bash ./install.sh
El script ahora:
- Le hará algunas preguntas (como la URL de su sitio, la información de la base de datos, etc.)…
- Descargar y configurar Ghost automáticamente…
- Tomar unos minutos — ¡sea paciente!
Responda a las preguntas cuidadosamente utilizando los detalles de la base de datos que anotó anteriormente. ¡No cierre el terminal hasta que haya terminado!
Configurar su alojamiento (a través del panel de Infomaniak)
Una vez que el script haya terminado, vaya a su Panel de control de Infomaniak:
- Haga clic aquí para acceder a la gestión de su producto en el Administrador de Infomaniak (¿necesita ayuda?).
- Haga clic directamente en el nombre asignado al producto correspondiente.
- Haga clic en Gestionar bajo Configuración avanzada:
- Haga clic en la pestaña Node.js para acceder a la configuración.
En el campo de comando de ejecución, ingrese:
/srv/customer/node_modules/ghost-cli/bin/ghost run
- Verifique que el número de puerto sea
3000
. - Caja de comando de build : desactívela.
- Haga clic en el botón Guardar al final de la página:
- En la página principal, haga clic en el botón Start (o Restart si ya está en ejecución).
- Observe los registros que muestran la creación de la base de datos y el inicio de la aplicación:
¡Listo! Acceda a su blog Ghost
Luego, vaya a la URL de su sitio para comenzar:
- Abra su navegador y vaya a
https://votresite.com/ghost
(reemplacevotresite.com
por su dominio actual). - La primera vez:
- Creará una cuenta de administrador (su identificación para el blog)…
- Luego, ¡podrá comenzar a escribir artículos!
Configuración de usuarios / correo electrónico
Para crear el primer usuario, agregue /ghost
a la URL de su sitio (por ejemplo https://ghost.domain.xyz/ghost
) y siga el asistente.
También puede configurar la "dirección de soporte del portal de miembros": cuando nuevos miembros desean registrarse, el portal envía la confirmación de doble opt-in desde una dirección específica. Por defecto, es la dirección "noreply" de su dominio. Para actualizarla, navegue a "Configuración", "Membresía", "Configuración del portal", "Personalizar" y "Página de cuenta":
Resolver una incompatibilidad técnica entre Ghost y MariaDB
Existe un problema de compatibilidad entre Ghost y la base de datos MariaDB. Esto resulta en este tipo de error:
[2025-01-01 12:54:28] ERROR "GET /ghost/api/admin/posts/6834625e35802b06f1496305/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.conversions%2Ccount.clicks%2Csentiment%2Ccount.positive_feedback%2Ccount.negative_feedback" 400 27ms
Could not understand request.
Error ID:
8f2b0d90-3a30-11f0-a25f-fd9c83e1cf02
Error Code:
ER_BAD_FIELD_ERROR
----------------------------------------
Error: select `posts`.*, (with `k` as (select `member_id` from `members_subscription_created_events` where posts.id = members_subscription_created_events.attribution_id union select `member_id` from `members_created_events` where posts.id = members_created_events.attribution_id) select count(*) from `k`) as `count__conversions`, `posts`.*, (select count(distinct `members_click_events`.`member_id`) from `members_click_events` inner join `redirects` on `members_click_events`.`redirect_id` = `redirects`.`id` where posts.id = redirects.post_id) as `count__clicks`, `posts`.*, (select COALESCE(ROUND(AVG(score) * 100), 0) from `members_feedback` where posts.id = members_feedback.post_id) as `count__sentiment`, `posts`.*, (select count(*) from `members_feedback` where posts.id = members_feedback.post_id AND members_feedback.score = 0) as `count__negative_feedback`, `posts`.*, (select sum(`score`) from `members_feedback` where posts.id = members_feedback.post_id) as `count__positive_feedback` from `posts` where (`posts`.`type` = 'post' and `posts`.`status` in ('draft', 'published', 'scheduled', 'sent')) and `posts`.`id` = '2834125e33802b06e1433305' limit 1 - Unknown column 'posts.id' in 'where clause'
at Child.<anonymous> (/srv/customer/sites/ghost.domain.xyz/versions/5.120.2/core/server/models/base/plugins/crud.js:194:31)
at Packet.asError (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packets/packet.js:740:17)
at Query.execute (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:475:34)
at PacketParser.onPacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:93:12)
at PacketParser.executeStart (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:100:25)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
Algunas consultas SQL generadas por Ghost, utilizando expresiones de tabla comunes (CTE) anidadas en subconsultas escalares, provocan errores HTTP 400
cuando se ejecutan en MariaDB. Estas consultas son válidas en MySQL 8, que soporta CTE en subconsultas escalares, pero no en MariaDB hasta la versión 10.6.
Existe una corrección para adaptar el comportamiento de Ghost y evitar estos errores (consulte la guía oficial).
Para usar este parche, ingrese este comando:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0