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 de Ghost en Infomaniak, una plataforma ideal para blogs (escritura regular, formato editorial) y 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 lanza una solicitud de oferta gratuita — también descubre el rol del proveedor de alojamiento.
Requisitos previos
- Haber instalado un sitio vacío de tipo Node.js en un alojamiento web Infomaniak.
- Crear un acceso SSH.
- Crear una base de datos.
- Tener una dirección de correo electrónico válida y funcional (en particular, las funcionalidades de contraseña olvidada).
Instalación de Ghost
Para ello:
- Conéctese al servidor a través de SSH (¿necesita ayuda?).
- Colóquese en el directorio del sitio ejecutando el comando “cd camino-al-sitio” (por ejemplo
cd sitios/ghost.domain.xyz
). Ingrese el siguiente comando:
npx -p ghost-cli ghost install --check-empty=false
y ingrese la información solicitada (nombre del host de la base de datos, URL del sitio web, etc.).
Modifique el archivo
config.production.json
para actualizar los parámetros del puerto y del host:"server": { "port": 3000, "host": "0.0.0.0" },
Especifique también la información relacionada con el correo electrónico:
"mail": { "transport": "SMTP", "options": { "service": "Infomaniak", "host": "mail.infomaniak.com", "port": 465, "auth": { "user": "<<email_username>>", "pass": "<<email_password>>" } }, "from": "<<email_address>>" },
Configuración Node.js
Para ejecutar la aplicación, diríjase al panel de control de Node.js:
- Haga clic aquí para acceder a la gestión de su producto en el Manager 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:
npx -p ghost-cli ghost run
- 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.
- Observe los registros que muestran la creación de la base de datos y el inicio de la aplicación:
- Luego, vaya a la URL de su sitio para comenzar.
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, se trata de la dirección “noreply” de su dominio. Para actualizarla, navegue hacia “Configuración”, “Membresía”, “Configuración del portal”, “Personalizar” y “Página de la cuenta”:
Resolver una incompatibilidad técnica entre Ghost y MariaDB
Existe un problema de compatibilidad entre Ghost y la base de datos MariaDB. Esto da lugar a este tipo de error:
[2025-05-26 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, que utilizan 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 admite CTE en subconsultas escalares, pero no en MariaDB hasta la versión 10.6.
Existe un parche 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