Base de conocimientos
1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Esta guía detalla las reglas específicas que debe seguir al crear una contraseña de usuario con mysqli_connect() que contiene el carácter “dólar” $ en las plataformas Infomaniak.
Prólogo
- Si al usar
mysqli_connect(), obtienes el mensaje de error "Acceso denegado para el usuario" y tu contraseña de usuario de la base de datos contiene el signo$, el problema puede deberse al funcionamiento de las cadenas de caracteres en PHP. - El problema también puede ocurrir con scripts de mensajería.
Normas a seguir
Cuando se utiliza el carácter especial $ en una contraseña de usuario y este está seguido por cualquier carácter que no sea un número, el nombre de la variable no es válido y la sustitución no se realiza correctamente.
Aquí tienes algunas soluciones para corregir esto:
- Coloque la contraseña entre comillas simples:
'$******' - Asegúrate de que un número siga directamente al dólar:
"$2*****" - Utilice una barra invertida para "escapar" el dólar en la contraseña:
“\$****”
Esta guía se refiere al módulo Apache mod_auth_mysql que permite la autenticación de usuarios y la autorización de acceso a través de una base de datos MySQL.
Con un alojamiento compartido
El módulo mod_auth_mysql no está disponible con los alojamientos compartidos; es necesario considerar un Servidor Cloud o usar scripts PHP y sesiones.
Esta guía explica cómo acceder a InnoDB en Infomaniak.
Utilizar el motor de almacenamiento MySQL InnoDB
Tan pronto como su alojamiento Infomaniak le da acceso a las bases de datos MySQL / MariaDB, InnoDB está disponible al mismo tiempo (antes MyISAM).
InnoDB ofrece funcionalidades avanzadas como las transacciones ACID, los bloqueos a nivel de fila, los índices de texto completo, etc. Puede aprovechar estas funcionalidades utilizando instrucciones SQL adecuadas en sus consultas.
Esta guía se refiere a la instalación de la extensión PHP en Alojamientos Web de Infomaniak.
Uso de extensiones PHP Zend
- Zend Guard Loader es una extensión PHP que permite ejecutar scripts PHP cifrados a través de Zend Guard.
- Zend Guard Loader está instalado de forma predeterminada para PHP <= 5.6 en todos los alojamientos web y no está disponible para las versiones de PHP >= 5.6.
- Desde PHP 5.3.x, el módulo Zend Optimizer ha sido reemplazado por ZendGuardLoader
- La extensión ZendOPCache requiere un Servidor Cloud configurado con PHP 5.5 mínimo
Esta guía se refiere a YAZ una biblioteca de software utilizada para implementar el protocolo Z39.50, un protocolo de búsqueda y recuperación de información que permite la comunicación entre diferentes sistemas de bibliotecas (SIGB) como PMB ampliamente utilizado en Francia.
Infomaniak para una gestión eficiente de las bibliotecas
En los Alojamientos Web de Infomaniak, PMB es soportado y YAZ está activado por defecto.
Sin embargo, si encuentra errores como Call to undefined function yaz_connect() será necesario abrir puertos a través del Manager. El puerto 210 es el puerto estándar utilizado para las comunicaciones Z39.50 pero no dude en consultar la documentación de sus aplicaciones.
Para las antiguas fórmulas de alojamiento de Infomaniak, se debe considerar un cambio de oferta.
El acceso a los comandos del sistema who y users está prohibido para los usuarios LDAP en todos los servidores Infomaniak.
Esta guía le ayudará, por ejemplo, si desea desplegar un paquete como pymysql y este requiere una versión de Python superior a la ofrecida en su alojamiento.
Prólogo
- Anaconda es una distribución libre y de código abierto de los lenguajes de programación Python. Esta distribución tiene como objetivo simplificar la gestión de paquetes y el despliegue.
- Se recomienda entonces usar conda que viene con una versión reciente de Python y se instala en el espacio del usuario, de modo que no hay conflictos con el sistema Python (como en un entorno virtual, que siempre requiere una instalación del sistema de la versión deseada).
- Consulte la documentación oficial.
⚠️ Para obtener ayuda adicional, contacte a un socio o inicie una solicitud de oferta gratuita — también descubra el rol del proveedor de alojamiento.
Descargar el instalador
uid165116@od-12345:~$ wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh
--2021-07-28 18:21:10-- https://repo.anaconda.com/miniconda/Miniconda3-py37_4.10.3-Linux-x86_64.sh
Resolving repo.anaconda.com (repo.anaconda.com)... 2606:4700::6810:8303, 2606:4700::6810:8203, 104.16.131.3, ...
Connecting to repo.anaconda.com (repo.anaconda.com)|2606:4700::6810:8303|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 89026327 (85M) [application/x-sh]
Saving to: ‘Miniconda3-py37_4.10.3-Linux-x86_64.sh’Miniconda3-py37_4.10.3-Linux-x86_64.sh 100% [==============================================>] 84.90M 203MB/s in 0.4s 18:21:11 (100 MB/s) - ‘Miniconda3-py37_4.10.3-Linux-x86_64.sh’ saved [89026327/89026327]Verificar el hash
uid165116@od-12345:~$ test $(md5sum Miniconda3-py37_4.10.3-Linux-x86_64.sh | awk '{print $1}') == "9f186c1d86c266acc47dbc1603f0e2ed" && echo "OK"
OKIniciar la instalación
uid165116@od-12345:~$ bash Miniconda3-py37_4.10.3-Linux-x86_64.sh -b
PREFIX=/home/clients/fc84cbbf6dcbd6dd76b15d3e56c1789f/miniconda3
Unpacking payload ...
Collecting package metadata (current_repodata.json): done
Solving environment: done## Package Plan ##environment location: /home/clients/fc84cbbf6dcbd6dd76b15d3e56c1789f/miniconda3added / updated specs:
- _libgcc_mutex==0.1=main
- _openmp_mutex==4.5=1_gnu
- brotlipy==0.7.0=py37h27cfd23_1003
- ca-certificates==2021.7.5=h06a4308_1
- certifi==2021.5.30=py37h06a4308_0
- cffi==1.14.6=py37h400218f_0
- chardet==4.0.0=py37h06a4308_1003
- conda-package-handling==1.7.3=py37h27cfd23_1
- conda==4.10.3=py37h06a4308_0
- cryptography==3.4.7=py37hd23ed53_0
- idna==2.10=pyhd3eb1b0_0
- ld_impl_linux-64==2.35.1=h7274673_9
- libffi==3.3=he6710b0_2
- libgcc-ng==9.3.0=h5101ec6_17
- libgomp==9.3.0=h5101ec6_17
- libstdcxx-ng==9.3.0=hd4cf53a_17
- ncurses==6.2=he6710b0_1
- openssl==1.1.1k=h27cfd23_0
- pip==21.1.3=py37h06a4308_0
- pycosat==0.6.3=py37h27cfd23_0
- pycparser==2.20=py_2
- pyopenssl==20.0.1=pyhd3eb1b0_1
- pysocks==1.7.1=py37_1
- python==3.7.10=h12debd9_4
- readline==8.1=h27cfd23_0
- requests==2.25.1=pyhd3eb1b0_0
- ruamel_yaml==0.15.100=py37h27cfd23_0
- setuptools==52.0.0=py37h06a4308_0
- six==1.16.0=pyhd3eb1b0_0
- sqlite==3.36.0=hc218d9a_0
- tk==8.6.10=hbc83047_0
- tqdm==4.61.2=pyhd3eb1b0_1
- urllib3==1.26.6=pyhd3eb1b0_1
- wheel==0.36.2=pyhd3eb1b0_0
- xz==5.2.5=h7b6447c_0
- yaml==0.2.5=h7b6447c_0
- zlib==1.2.11=h7b6447c_3The following NEW packages will be INSTALLED: _libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-4.5-1_gnu
brotlipy pkgs/main/linux-64::brotlipy-0.7.0-py37h27cfd23_1003
ca-certificates pkgs/main/linux-64::ca-certificates-2021.7.5-h06a4308_1
certifi pkgs/main/linux-64::certifi-2021.5.30-py37h06a4308_0
cffi pkgs/main/linux-64::cffi-1.14.6-py37h400218f_0
chardet pkgs/main/linux-64::chardet-4.0.0-py37h06a4308_1003
conda pkgs/main/linux-64::conda-4.10.3-py37h06a4308_0
conda-package-han~ pkgs/main/linux-64::conda-package-handling-1.7.3-py37h27cfd23_1
cryptography pkgs/main/linux-64::cryptography-3.4.7-py37hd23ed53_0
idna pkgs/main/noarch::idna-2.10-pyhd3eb1b0_0
ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.35.1-h7274673_9
libffi pkgs/main/linux-64::libffi-3.3-he6710b0_2
libgcc-ng pkgs/main/linux-64::libgcc-ng-9.3.0-h5101ec6_17
libgomp pkgs/main/linux-64::libgomp-9.3.0-h5101ec6_17
libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-9.3.0-hd4cf53a_17
ncurses pkgs/main/linux-64::ncurses-6.2-he6710b0_1
openssl pkgs/main/linux-64::openssl-1.1.1k-h27cfd23_0
pip pkgs/main/linux-64::pip-21.1.3-py37h06a4308_0
pycosat pkgs/main/linux-64::pycosat-0.6.3-py37h27cfd23_0
pycparser pkgs/main/noarch::pycparser-2.20-py_2
pyopenssl pkgs/main/noarch::pyopenssl-20.0.1-pyhd3eb1b0_1
pysocks pkgs/main/linux-64::pysocks-1.7.1-py37_1
python pkgs/main/linux-64::python-3.7.10-h12debd9_4
readline pkgs/main/linux-64::readline-8.1-h27cfd23_0
requests pkgs/main/noarch::requests-2.25.1-pyhd3eb1b0_0
ruamel_yaml pkgs/main/linux-64::ruamel_yaml-0.15.100-py37h27cfd23_0
setuptools pkgs/main/linux-64::setuptools-52.0.0-py37h06a4308_0
six pkgs/main/noarch::six-1.16.0-pyhd3eb1b0_0
sqlite pkgs/main/linux-64::sqlite-3.36.0-hc218d9a_0
tk pkgs/main/linux-64::tk-8.6.10-hbc83047_0
tqdm pkgs/main/noarch::tqdm-4.61.2-pyhd3eb1b0_1
urllib3 pkgs/main/noarch::urllib3-1.26.6-pyhd3eb1b0_1
wheel pkgs/main/noarch::wheel-0.36.2-pyhd3eb1b0_0
xz pkgs/main/linux-64::xz-5.2.5-h7b6447c_0
yaml pkgs/main/linux-64::yaml-0.2.5-h7b6447c_0
zlib pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3Preparing transaction: done
Executing transaction: done
installation finished.Iniciar conda
uid165116@od-12345:~$ source <(~/miniconda3/bin/conda shell.bash hook)Instalar pymysql (por ejemplo)
(base) uid165116@od-12345:~$ python3 -V
Python 3.7.10(base) uid165116@od-12345:~$ pip3 install pymysql --user
Collecting pymysql
Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
|████████████████████████████████| 43 kB 892 kB/s
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
Esta guía explica cómo especificar un archivo que se cargará antes de la página deseada o al inicio de cada script PHP ejecutado en su servidor, incluido como si hubiera sido llamado con la función require(), pero de manera más global utilizando la directiva auto_prepend_file de PHP.
Prólogo
- Por ejemplo, para declarar los encabezados de un sitio web, es posible crear un archivo
headers.phpque contiene funciones PHPheader()y que se prepend al inicio de cada archivo PHP…- … a través de un archivo
.user.ini(propio de una carpeta), - … o a través de la configuración del sitio del Manager (global) como se explica a continuación.
- … a través de un archivo
Incluir un archivo globalmente desde el Manager
Para acceder a la gestión del sitio web:
- 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 PHP / Apache.
- Complete la línea correspondiente ingresando la ruta del archivo a incluir.
- Haga clic en el botón para guardar:

Después de definir esta directiva, todas las páginas PHP en su servidor incluirán automáticamente el archivo especificado antes de ejecutar su propio código.
Los encabezados definidos en un archivo .htaccess solo son válidos para el contenido no PHP (es decir, estático).
Infomaniak utiliza php-fpm que recibe los diferentes encabezados a través de apache fast_cgi. En la RFC de cgi_www el encabezado Strict-Transport-Security no forma parte de los encabezados pasados a través de CGI y la documentación de Apache lo confirma. Consulte esta otra RFC.
⚠️ Para obtener ayuda adicional contacte a un socio o inicie una solicitud de oferta gratuita — también descubra el rol del proveedor de alojamiento.
Esta guía explica cómo ajustar la configuración de un sitio Node.js alojado en la infraestructura de Infomaniak para adaptar el comportamiento de su aplicación según su evolución, sus dependencias o sus preferencias técnicas.
Requisitos previos
- Instalar un sitio Node.js en tu alojamiento.
- Probar sus modificaciones en local antes de aplicarlas en producción.
- Verificar que sus scripts (
start,build) estén bien definidos en su archivopackage.json. - Si modificas la estructura de tu proyecto, recuerda ajustar la carpeta de ejecución y los comandos asociados.
- El puerto de escucha definido en el Manager debe coincidir exactamente con el utilizado en el código de la aplicación.
Acceder a la configuración
Cada sitio tiene un panel de control dedicado para gestionar la aplicación (iniciar, detener, reiniciar), consultar la consola de ejecución, gestionar las versiones de Node.js, configurar los dominios y activar los certificados SSL:
- 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.
- Puede abrir la consola, detener el proyecto (se aplicará una página de mantenimiento) o reiniciarlo.
- Para acceder a los parámetros avanzados, haga clic en Gestionar bajo Configuración avanzada:

- Haga clic en la pestaña Node.js para acceder a los ajustes:

Aplicar los cambios
Para ello:
- Guarde los cambios desde la interfaz del Manager.
- Reinicia tu aplicación para que los cambios surtan efecto.
Consulte este otro guía en caso de problema.
Comandos principales
Carpeta de ejecución
La carpeta de ejecución indica la ubicación en el servidor donde se ejecutarán los comandos de construcción y lanzamiento. Debe apuntar al directorio raíz de su aplicación, es decir, donde se encuentra su archivo package.json.
Por ejemplo, puede especificar para la raíz del proyecto:
./o si su aplicación está en un subdirectorio llamado app:
./appo si se encuentra en una carpeta backend:
./backendComando de construcción (opcional)
Si su aplicación Node.js requiere un paso de compilación antes de ser ejecutada, ingrese un comando de construcción en el campo correspondiente. Este comando se ejecutará automáticamente antes de iniciar la aplicación.
Por ejemplo, puede indicar:
npm install && npm run buildo, si usas yarn :
yarn install && yarn buildSi su proyecto no requiere ninguna compilación, este campo puede dejarse vacío.
Comando de inicio
El comando de lanzamiento corresponde a la instrucción utilizada para iniciar tu aplicación. Debe ser idéntico a la que usas localmente para ejecutar el proyecto.
Por ejemplo, puede indicar:
node index.jsnpm starto
yarn startEste comando debe permitir iniciar directamente el servidor o el punto de entrada de su aplicación tal como está definido en su entorno de desarrollo.
Puerto de escucha
Su aplicación debe escuchar en un puerto específico que se define en el Manager. Este puerto se transmite a su aplicación a través de una variable de entorno PORT.
Ejemplo en su código Node.js:
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`Application lancée sur le port ${port}`);
});Asegúrate de que este puerto se tenga en cuenta en tu código.
Versión de Node.js
Puede seleccionar la versión de Node.js que su sitio debe utilizar. Se recomienda usar una versión estable y siempre soportada para garantizar la seguridad y la compatibilidad de su aplicación.
ATENCIÓN: Este método modifica los archivos del núcleo de Magento para desactivar la verificación de privilegios avanzados (triggers, routines), lo cual es una práctica arriesgada en términos de seguridad, estabilidad y complica las futuras actualizaciones.
Hoy en día, Magento (ahora Adobe Commerce o Magento Open Source) es una plataforma moderna que exige un entorno de servidor que cumpla con sus estrictos requisitos previos. La versión estable actual suele ser la 2.4.8 o una versión de parche más reciente. Estas versiones requieren tecnologías actualizadas como PHP 8.2/8.3, MySQL 8.0/MariaDB 10.6 y un motor de búsqueda dedicado como Elasticsearch o OpenSearch.
Para cualquier nueva instalación o migración, se recomienda encarecidamente utilizar la última versión estable sin ninguna modificación manual del código fuente. Debe elegir un tipo de alojamiento de alto rendimiento (Servidor en la Nube o VPS/Dedicado) que garantice el acceso a todos los privilegios del sistema necesarios para un funcionamiento seguro y estable.
Evite absolutamente utilizar este antiguo parche a continuación. Tenga en cuenta que este parche es innecesario en caso de instalación en un Servidor en la Nube.
Esta guía explica cómo parchear la instalación de Magento para que pueda realizarse en un alojamiento compartido de Infomaniak, incluso sin los privilegios de tipo triggers & routines.
Resolver los problemas de instalación de Magento 2
Edite el archivo DbValidator.php:
--- setup/src/Magento/Setup/Validator/DbValidator.php.orig 2019-04-11 17:01:45.154767893 +0200
+++ setup/src/Magento/Setup/Validator/DbValidator.php 2019-04-13 21:37:02.560386985 +0200
@@ -150,12 +150,8 @@
'ALTER',
'CREATE TEMPORARY TABLES',
'LOCK TABLES',
- 'EXECUTE',
'CREATE VIEW',
- 'SHOW VIEW',
- 'CREATE ROUTINE',
- 'ALTER ROUTINE',
- 'TRIGGER'
+ 'SHOW VIEW'
];
// check global privilegesEn caso de error SOAP/PHPfpm
Según la versión de Magento utilizada, la función soap no funciona correctamente y puede devolver el siguiente mensaje de error: «Uncaught SoapFault exception: [Client] looks like we got no XML document».
El problema no proviene de una mala configuración del servidor, sino más bien de un mal diseño de Magento que no tiene en cuenta el caso de ejecución de PHP en un entorno FPM. Así, las solicitudes SOAP generadas por Magento contienen encabezados duplicados (no conformes con la especificación SOAP) y generan un error.
Tome nota de esta solución (no desarrollada por Infomaniak).
Esta guía explica cómo aumentar el valor max_children en Servidor Cloud para aumentar el número de procesos PHP simultáneos que pueden ser utilizados por su sitio. Esto será muy útil para resolver problemas de carga infinita de las páginas de su sitio.
Prólogo
- Por defecto en cualquier alojamiento, el límite de
max_childrenestá fijado a 20.- Aunque es posible aumentar este valor desde el Gestor de Infomaniak, el límite de
max_childrense ajusta automáticamente en función de la configuración de su Servidor Cloud. - Para aumentar este límite en alojamiento compartido, migre a Servidor Cloud.
- Aunque es posible aumentar este valor desde el Gestor de Infomaniak, el límite de
- Para comprender cómo calcular con precisión los
max_childrennecesarios, consulte este artículo sobre el tema.
Aumentar el valor max_children
Requisitos previos
- Asegúrese de disponer de los recursos necesarios en el servidor Cloud.
- Asegúrese de que todos los recursos del servidor Cloud no estén utilizados; si resulta que están completamente utilizados, aumentar el valor
max_childrenno tendrá ningún efecto (Modificar los recursos del Servidor Cloud). - Controlar el monitoreo de los recursos de su servidor, en caso de que los recursos de su servidor estén alcanzados, será necesario verificar la optimización de los procesos y de su sitio antes de considerar aumentar el valor
max_children. - Consulte los informes de error de PHP desde la carpeta
/ik-logs(registros del proceso maestro php - nombre del archivo: php-fpm.log) para verificar si se ha superado el límite "max_children". Ejemplo de error:[05-Jul-2024 09:08:58] WARNING: [pool www.infomaniak.ch] server reached max_children setting (20), consider raising it
Para acceder a la gestión de los parámetros PHP / Apache del sitio cuyo valor max_children debe aumentarse en Servidor Cloud, consulte esta otra guía.
Podrá, entre otras cosas…
- … elegir un nuevo valor de
max_children:
No olvide guardar los cambios al final de la página.
Límites según el servidor
Límite de max_children según los recursos del Servidor Cloud:
| Configuración Servidor Cloud | max_children |
|---|---|
| 2 CPU / 6 Go RAM | 20 |
| 4 CPU / 12 Go RAM | 40 |
| 6 CPU / 18 Go RAM | 60 |
| 8 CPU / 24 Go RAM | 80 |
| 12 CPU / 36 Go RAM | 120 |
| 16 CPU / 48 Go RAM | 160 |
| 24 CPU / 72 Go RAM | 240 |
| 32 CPU / 96 o 128 Go RAM | 320 |
Esta guía explica cómo modificar el valor de la directiva php_value include_path.
Modificar el include_path
Al igual que cualquier otro parámetro de PHP, include_path se define en el archivo .user.ini.
Aquí tienes un ejemplo de ruta para usar en el archivo .user.ini:
include_path = .:/home/clients/123456789a12345b12fc345d/web/www.domainetest.abc/public/abc/includeConsulta esta otra guía sobre phpinfo para verificar la aplicación de tu nueva directiva.
El módulo Apache mod_userdir no está disponible.
Esta guía está destinada a usted porque ha elegido (o va a elegir) Infomaniak como proveedor de alojamiento. Esta elección no es trivial. Es sensible a la ecología y desea hacer todo lo posible para reducir la huella de carbono en Internet.
Infomaniak ya le agradece por elegir este proveedor de alojamiento que se preocupa por el planeta y por explorar las opciones a continuación para avanzar en el diseño ecológico de su entorno web.
¿Por qué actuar?
Los sitios web consumen energía para funcionar, y el uso de Internet es una de las principales causas del aumento de las emisiones de gases de efecto invernadero.
Además de elegir un proveedor de alojamiento ético que utiliza fuentes de energía renovable para alimentar sus servidores, también puede contribuir a reducir estas emisiones adoptando prácticas ecológicas en el diseño y la gestión de sus sitios web y servicios de correo electrónico.
¿Cómo actuar?
Como se mencionó anteriormente, Infomaniak actúa en diferentes aspectos, incluso en su propio departamento de soporte: le acompañará en la elección de servicios adaptados a sus necesidades con el objetivo de preservar el medio ambiente, recopilará sus comentarios para optimizar nuestras prácticas e inspirarse en sus experiencias, y comunicará los desafíos ambientales en el sector de la hosting para adoptar las mejores prácticas digitales.
A tu nivel, existen varios medios para reducir tu huella de carbono en Internet:
Minimizar el consumo de energía
Para reducir el consumo de energía de los servidores y las computadoras de los usuarios: optimice las imágenes, utilice fuentes web, utilice scripts minimizados y tecnologías de compresión de datos. Los diseños limpios pueden ayudar a reducir los requisitos de ancho de banda.
Ofrez opciones para reducir el consumo de datos utilizando imágenes de menor calidad o proporcionando videos en streaming de diferentes calidades, para desactivar los rastreadores y las publicidades que consumen muchos datos.
Para buenas prácticas dedicadas a WordPress consulte las fichas de GreenIT.
Utilizar tecnologías eco-responsables
Las tecnologías de desarrollo sostenible, como HTML5, CSS3 y JavaScript, son más respetuosas con el medio ambiente.
Promover la sostenibilidad
Sensibilice a los usuarios sobre el impacto ambiental de las tecnologías de Internet e invítelos a adoptar prácticas eco-responsables. Incluyendo con la solución WordPress.
¿Y en cuanto al correo electrónico?
Los mismos reflejos pueden aplicarse a su comunicación por correo electrónico:
- Utilizar una firma ecológica que invite a los destinatarios a reducir su impacto ambiental utilizando tecnologías ecológicas o adoptando prácticas ecológicas…
- Utilizar herramientas de gestión de correos electrónicos ecológicas que utilicen fuentes de energía renovable y que tengan políticas ecológicas en cuanto al consumo de energía…
- Utilizar correos electrónicos en texto plano en lugar de correos electrónicos en HTML, ya que los correos electrónicos en HTML tienden a consumir más energía para ser mostrados…
- Utilizar archivos adjuntos en formato PDF en lugar de formatos más pesados…
- Utilizar funcionalidades de cancelación de suscripción para evitar enviar correos electrónicos no deseados…
- Utilizar herramientas de seguimiento para saber cuántas personas abren sus correos electrónicos y así saber si envía demasiados o muy pocos…
Todas estas acciones pueden realizarse progresivamente y deben adaptarse a la situación de cada sitio web; no hay una solución única.
Supervise regularmente las estadísticas de consumo de energía para seguir mejorando el rendimiento ecológico del sitio. Infomaniak ofrecerá herramientas en este sentido en el futuro, pero mientras tanto puede utilizar https://greenframe.io.
La escritura en los directorios /etc y /lib está desactivada por razones de seguridad.
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.compor 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
Este guía presenta las diferentes acciones que son posibles en una tabla MySQL según los derechos otorgados a un usuario.
Acciones en las tablas según los derechos del usuario…
… en alojamiento web compartido
Lectura + Escritura + Admin
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEWLectura + Escritura
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLELectura
GRANT SELECT… en Servidor en la nube
Lectura + Escritura + Admin
GRANT ALLLectura + Escritura
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLESLectura
GRANT SELECT
Esta guía está destinada a las personas que desean trabajar con la capa de abstracción Propel (que se refiere a un componente clave de la biblioteca Propel, un ORM (Object-Relational Mapping) para PHP).
Prólogo
- El ORM (Object-Relational Mapping) permite vincular los objetos de una aplicación con las tablas de una base de datos relacional. En lugar de escribir SQL, se manipulan los datos a través de objetos.
- Propel, una capa de abstracción en PHP, facilita la creación, manipulación y recuperación de objetos sin preocuparse por los detalles de SQL. Permite gestionar las relaciones, las uniones y la paginación, mejorando la legibilidad y el mantenimiento del código.
Características y limitaciones
- Propel no está instalado por defecto como un paquete Pear; esto significa que deberá instalarlo manualmente en su servidor.
- La versión "Conventionnal Package" de Propel puede ser instalada; descargue e instale bien esta versión específica.
- Dado que las líneas de comandos de Propel (
propel-genpor ejemplo) no están accesibles, no podrás usarlas directamente. - Esto significa que Propel solo podrá ser utilizado en producción una vez que haya generado las clases y archivos necesarios localmente o en otro entorno de desarrollo.
- Todas las manipulaciones y generaciones de código deberán realizarse en otro lugar antes de transferir los archivos resultantes a su entorno de producción.
Dependencias
- Todas las dependencias necesarias para usar Propel están disponibles, excepto Phing.
- Phing no es necesario para la producción, por lo que no debería ser un problema.
- Asegúrate de tener todas las demás dependencias requeridas para Propel instaladas correctamente.
Esta guía le presenta los puertos abiertos disponibles para los sitios Node.js (solo) alojados en Infomaniak.
Puertos abiertos en salida
Web
- HTTP (tcp/80)
- HTTP alternativo (tcp/8080)
- HTTPS (tcp/443)
- FTP Data (tcp/20)
- FTP Control (tcp/21)
Correo
- POP3 (tcp/110)
- IMAP (tcp/143)
- SMTP submission (+ STARTTLS) (tcp/587)
- SMTPS (tcp/465)
- IMAPS (tcp/993)
- POP3S (tcp/995)
BD
- MySQL (tcp/3306)
- MongoDB (tcp/27017)
- PostgreSQL (tcp/5432)
- Redis (tcp/6379)
- Redis TLS (tcp/6380)
- ElasticSearch (tcp/9200)
Varios
- SSH (tcp/22)
- Transferencia de paquetes de Git (tcp/9418)
Puertos abiertos de entrada
- HTTP (tcp/80)
- HTTPS (tcp/443)
- SSH (tcp/22)
Esta guía se refiere a las aplicaciones OAuth2 para conectarse a sus servicios externos a través de su identificador de inicio de sesión de Infomaniak.
Gestionar las aplicaciones OAuth2 de Infomaniak
Para ello:
- Haga clic aquí para acceder a la gestión de su producto en el Manager Infomaniak (¿necesita ayuda?).
- Haga clic en el botón azul Crear una nueva aplicación:

- Elija el tipo adecuado según sus necesidades y proyecto actual.
- Asigne un nombre a la aplicación.
- Ingrese la URL de la aplicación según la información técnica disponible.
- Haga clic en el botón para crear la aplicación:

- Copie la información (
Client ID,Client secret) en un lugar seguro - ya no serán accesibles después de esto: