Base de connaissances
1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Ce guide vous est destiné car vous avez choisi (ou allez choisir) Infomaniak comme hébergeur. Ce choix n'est pas anodin. Vous êtes sensible à l'écologie et souhaitez faire le maximum pour réduire l'empreinte carbone sur Internet.
Infomaniak vous remercie d'ores et déjà de choisir cet hébergeur qui se soucie de la planète et d'explorer les pistes ci-dessous pour progresser dans l'éco-conception de votre environnement Web.
Pourquoi agir ?
Les sites internet consomment de l'énergie pour fonctionner, et l'utilisation d'Internet est l'une des principales causes de l'augmentation des émissions de gaz à effet de serre.
Outre le fait qu'il est important de choisir un hébergeur éthique qui utilise des sources d'énergie renouvelable pour alimenter ses serveurs vous pouvez également contribuer à réduire ces émissions en adoptant des pratiques éco-responsables dans la conception et la gestion de vos sites et services Mail.
Comment agir ?
Comme vu plus haut, Infomaniak agit sur différents points jusqu'à son département support lui-même: il vous accompagnera dans le choix de services adaptés à vos besoins dans un souci de préservation de l'environnement, récoltera vos feedbacks permettant d’optimiser nos pratiques et s’inspirer de vos expériences, tout en communiquant les enjeux environnementaux dans le secteur de l’hébergement pour adopter les bonnes pratiques numériques.
A votre niveau, il existe plusieurs moyens de réduire votre empreinte carbone sur Internet:
Minimiser la consommation d'énergie
Pour réduire la consommation d'énergie des serveurs et des ordinateurs des utilisateurs: optimisez les images, utilisez des polices de caractères web, utilisez des scripts minifiés et des technologies de compression de données. Les designs épurés peuvent aider à réduire les besoins en bande passante.
Offrez des options pour réduire la consommation de données en utilisant des images de qualité inférieure ou en proposant des vidéos en streaming à différentes qualités, pour désactiver les pisteurs et les publicités qui consomment beaucoup de données.
Pour de bonnes pratiques dédiées à WordPress consultez les fiches de GreenIT.
Utiliser des technologies éco-responsables
Les technologies de développement durable, telles que l'HTML5, CSS3 et JavaScript, sont plus respectueuses de l'environnement.‍
Promouvoir la durabilité
Sensibilisez les utilisateurs à l'impact environnemental des technologies d'Internet et invitez-les à adopter des pratiques éco-responsables. Y compris avec la solution WordPress.
Et au niveau de la messagerie ?
Les mêmes réflexes peuvent se faire concernant votre communication par e-mail:
- Utiliser une signature éco-responsable qui invite les destinataires à réduire leur impact environnemental en utilisant des technologies éco-responsables ou en adoptant des pratiques éco-responsables…
- Utiliser des outils de gestion des e-mails éco-responsables qui utilisent des sources d'énergie renouvelable et qui ont des politiques éco-responsables en matière de consommation d'énergie…
- Utiliser des e-mails en texte brut plutôt que des e-mails en HTML, car les e-mails en HTML ont tendance à consommer plus d'énergie pour être affichés…
- Utiliser des pièces jointes en format PDF plutôt que des formats plus lourds…
- Utiliser des fonctionnalités de désinscription pour éviter d'envoyer des e-mails non désirés…
- Utiliser des outils de suivi pour savoir combien de personnes ouvrent vos e-mails et ainsi savoir si vous en envoyez trop ou pas assez…
Toutes ces actions peuvent être réalisées progressivement et doivent être adaptées à la situation de chaque site web, il n'y a pas de solution unique.
Surveillez régulièrement les statistiques de consommation d'énergie pour continuer à améliorer la performance écologique du site. Infomaniak proposera dans le futur des outils dans ce sens mais en attendant vous pouvez utiliser https://greenframe.io.
L'écriture dans les dossiers /etc
et /lib
est désactivée pour des raisons de sécurité.
Ce guide présente les différentes actions qui sont possibles sur une table MySQL en fonction des droits octroyés à un utilisateur.
Actions sur les tables selon les droits de l'utilisateur…
… sur hébergement Web mutualisé
Lecture + Ecriture + Admin
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW
Lecture + Ecriture
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLE
Lecture
GRANT SELECT
… sur Serveur Cloud
Lecture + Ecriture + Admin
GRANT ALL
Lecture + Ecriture
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES, LOCK TABLES
Lecture
GRANT SELECT
Ce guide concerne les personnes souhaitant travailler avec la couche d'abstraction Propel (qui fait référence à un composant clé de la bibliothèque Propel, un ORM (Object-Relational Mapping) pour PHP).
Préambule
- L’ORM (Object-Relational Mapping) permet de lier les objets d’une application aux tables d’une base de données relationnelle. Plutôt que d’écrire du SQL, on manipule les données via des objets.
- Propel, une couche d’abstraction en PHP, facilite la création, manipulation et récupération d’objets sans se soucier des détails SQL. Elle permet de gérer les relations, les jointures et la pagination, tout en améliorant la lisibilité et la maintenance du code.
Particularités & limitations
- Propel n'est pas installé par défaut en tant que package Pear ; cela signifie que vous devrez l'installer manuellement sur votre serveur.
- La version "Conventionnal Package" de Propel peut être installée ; téléchargez et installez bien cette version spécifique.
- Etant donné que les lignes de commandes de Propel (
propel-gen
p.ex) ne sont pas accessibles, vous ne pourrez pas les utiliser directement. - Cela signifie que Propel ne pourra être utilisé qu'en production, une fois que vous aurez généré les classes et fichiers nécessaires localement ou sur un autre environnement de développement.
- Toutes les manipulations et génération de code devront être réalisées ailleurs, avant de transférer les fichiers résultants vers votre environnement de production.
Dépendances
- Toutes les dépendances nécessaires pour utiliser Propel sont disponibles, à l'exception de Phing.
- Phing n'est pas nécessaire pour la production, donc cela ne devrait pas poser problème.
- S'assurer d'avoir toutes les autres dépendances requises pour Propel installées correctement.
Ce guide vous accompagne dans l’installation sur Infomaniak de Ghost, une plateforme idéale pour les blogs (écriture régulière, format éditorial) et les sites de publication centrés sur le contenu, tels que Substack ou Medium.
Reposant sur Node.js et utilisant Markdown pour la rédaction, Ghost se distingue par sa légèreté, là où WordPress, bien que plus flexible et universel, reste plus lourd.
Pour de l'aide supplémentaire contactez un partenaire ou lancez gratuitement un appel d'offres — découvrez aussi le rôle de l'hébergeur.
Prérequis
- Avoir installé un site vierge de type Node.js sur un hébergement Web Infomaniak.
- Créer un accès SSH.
- Créer une base de données.
- Posséder une adresse mail valide et fonctionnelle (notamment les fonctionnalités de mot de passe oublié).
Installation de Ghost
Pour cela:
- Connectez-vous sur le serveur en SSH (besoin d'aide ?).
- Placez-vous dans le répertoire du site en exécutant la commande “cd chemin-vers-le-site” (par exemple
cd sites/ghost.domain.xyz
). Entrez la commande suivante:
npx -p ghost-cli ghost install --check-empty=false
et entrez les informations demandées (nom d'hôte de base de données, URL du site Web, etc.).
Modifiez le fichier
config.production.json
pour mettre à jour les paramètres du port et de l'hôte:"server": { "port": 3000, "host": "0.0.0.0" },
Spécifiez-y également les informations relatives à la messagerie:
"mail": { "transport": "SMTP", "options": { "service": "Infomaniak", "host": "mail.infomaniak.com", "port": 465, "auth": { "user": "<<email_username>>", "pass": "<<email_password>>" } }, "from": "<<email_address>>" },
Configuration Node.js
Pour exécuter l'application, rendez-vous sur le tableau de bord Node.js:
- Cliquez ici afin d'accéder à la gestion de votre produit sur le Manager Infomaniak (besoin d'aide ?).
- Cliquez directement sur le nom attribué au produit concerné.
- Cliquez sur Gérer sous Paramètres avancés:
- Cliquez sur l'onglet Node.js pour accéder aux réglages:
Dans le champ de commande d'exécution, entrez:
npx -p ghost-cli ghost run
- Cliquez sur le bouton Enregistrer en bas de page.
- Sur la page principale, cliquez sur le bouton Start ou Restart.
- Observez les journaux montrant la création de la base de données et le démarrage de l'application:
- Rendez-vous ensuite sur l'URL de votre site pour démarrer.
Configuration des utilisateurs / mail
Afin de créer le premier utilisateur, ajoutez /ghost
Ă l'URL de votre site (par exemple https://ghost.domain.xyz/ghost
) et suivez l'assistant.
Vous pouvez également configurer l'"adresse de support du portail des membres": lorsque de nouveaux membres souhaitent s'inscrire, le portail envoie la confirmation du double opt-in à partir d'une adresse spécifique. Par défaut, il s'agit de l'adresse “noreply” de votre domaine. Pour la mettre à jour, naviguez vers “Paramètres”, “Adhésion”, “Paramètres du portail”, “Personnaliser”, et “Page du compte”:
Résoudre une incompatibilité technique entre Ghost et MariaDB
Il existe un problème de compatibilité entre Ghost et la base de données MariaDB. Il en résulte ce type d'erreur:
[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)
Certaines requêtes SQL générées par Ghost, utilisant des expressions de table communes (CTE) imbriquées dans des sous-requêtes scalaires, provoquent des erreurs HTTP 400
lorsqu'elles sont exécutées sur MariaDB. Ces requêtes sont valides en MySQL 8, qui prend en charge les CTE dans les sous-requêtes scalaires, mais pas en MariaDB jusqu'à la version 10.6.
Un correctif existe pour adapter le comportement de Ghost et éviter ces erreurs (prenez connaissance du guide officiel).
Pour utiliser ce patch, entrez cette commande:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0
Ce guide explique comment ajuster la configuration d'un site Node.js hébergé sur l'infrastructure Infomaniak afin d’adapter le comportement de votre application en fonction de son évolution, de ses dépendances ou de vos préférences techniques.
Prérequis
- Installer un site Node.js sur votre hébergement.
- Tester vos modifications en local avant de les appliquer en production.
- Vérifier que vos scripts (
start
,build
) sont bien définis dans votre fichierpackage.json
. - Si vous modifiez la structure de votre projet, penser à ajuster le dossier d’exécution et les commandes associées.
- Le port d’écoute défini dans le Manager doit impérativement correspondre à celui utilisé dans le code de l’application.
Accéder à la configuration
Chaque site dispose d’un tableau de bord dédié pour contrôler l’application (start, stop, restart), consulter la console d’exécution, gérer les versions de Node.js, configurer les domaines et activer les certificats SSL:
- Cliquez ici afin d'accéder à la gestion de votre produit sur le Manager Infomaniak (besoin d'aide ?).
- Cliquez directement sur le nom attribué au produit concerné.
- Vous pouvez ouvrir la console, stopper le projet (une page de maintenance sera appliquée) ou le redémarrer.
- Pour accéder aux paramètres avancés, cliquez sur Gérer sous Paramètres avancés:
- Cliquez sur l'onglet Node.js pour accéder aux réglages:
Appliquer les changements
Pour cela:
- Enregistrez les modifications depuis l’interface du Manager.
- Redémarrez votre application pour que les changements soient pris en compte.
Prenez connaissance de cet autre guide en cas de problème.
Commandes principales
Dossier d’exécution
Le dossier d’exécution indique l’emplacement sur le serveur où seront exécutées les commandes de construction et de lancement. Il doit pointer vers le répertoire racine de votre application, c’est-à -dire là où se trouve votre fichier package.json
.
Par exemple, vous pouvez spécifier pour la racine du projet:
./
ou si votre application est dans un sous-dossier nommé app
:
./app
ou si elle se trouve dans un dossier backend
:
./backend
Commande de construction (facultative)
Si votre application Node.js nécessite une étape de compilation avant d’être exécutée, renseignez une commande de construction dans le champ prévu à cet effet. Cette commande sera exécutée automatiquement avant le démarrage de l’application.
Par exemple, vous pouvez indiquer :
npm install && npm run build
ou, si vous utilisez yarn :
yarn install && yarn build
Si votre projet ne nécessite aucune compilation, ce champ peut être laissé vide.
Commande de lancement
La commande de lancement correspond à l’instruction utilisée pour démarrer votre application. Elle doit être identique à celle que vous utilisez en local pour exécuter le projet.
Par exemple, vous pouvez indiquer :
node index.js
npm start
ou
yarn start
Cette commande doit permettre de lancer directement le serveur ou le point d’entrée de votre application tel qu’il est défini dans votre environnement de développement.
Port d’écoute
Votre application doit écouter sur un port spécifique qui est défini dans le Manager. Ce port est transmis à votre application via une variable d’environnement PORT
.
Exemple dans votre code Node.js :
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`Application lancée sur le port ${port}`);
});
Assurez-vous que ce port est bien pris en compte dans votre code.
Version de Node.js
Vous pouvez sélectionner la version de Node.js que votre site doit utiliser. Il est conseillé d’utiliser une version stable et toujours supportée pour garantir la sécurité et la compatibilité de votre application.
Ce guide détaille les erreurs de type dépassement de ressources que l'on peut obtenir en gérant et visitant un site Web.
Préambule
- Des limites de ressources sont mises en place pour maintenir l'intégrité, la stabilité et la performance du serveur mutualisé, tout en garantissant une expérience équitable pour tous les utilisateurs.
- Si un site Web ou une application nécessite des ressources significativement plus élevées, il peut être nécessaire de passer à un Serveur Cloud ou autre type d'hébergement virtuel où les ressources sont allouées de manière plus flexible.
Origine des erreurs
Fatal error: Maximum execution time of 30 seconds exceeded
Cette erreur se produit lorsque le serveur a fixé une limite de temps d'exécution pour les scripts, généralement pour éviter des tâches qui prennent trop de temps. Par exemple si un script tente de redimensionner de nombreuses images de grande taille en une seule opération, cela peut dépasser la limite de temps d'exécution autorisée. Le serveur impose cette limite pour garantir une réponse rapide aux requêtes des utilisateurs. Le chemin souvent mentionné dans l'erreur peut vous indiquer une origine plus précise (par exemple Fatal error: Maximum execution time of 30 seconds exceeded in /home/www/1234567abc/web/wp-includes/media.php on line 123
)
memory_limit exceeded
Cette erreur survient lorsque le script ou l'application utilise plus de mémoire que ce qui lui est alloué. Cela peut se produire lorsqu'un script traite un grand volume de données ou lorsqu'il y a une fuite de mémoire. Par exemple, un script de gestion d'image peut consommer plus de mémoire que ce qui est autorisé, ce qui entraîne cette erreur.
Pistes de résolution
Quelques pistes pour résoudre ces erreurs:
- Vérifiez les scripts qui font des connexions multiples au serveur pour afficher des données.
- Optimisez le ou les scripts concernés afin qu'ils nécessitent moins de ressources.
- Augmentez les limites du site concerné pour permettre au script de faire tout ce qu'il a à faire et/ou limiter le nombre de connexions simultanées (surtout sur un Serveur Cloud où les limites (mémoire vive, temps d'exécution, connexions simultanées) peuvent être augmentées significativement).
- Migrez votre hébergement sur Serveur Cloud.
Prenez également connaissance de cet autre guide.
Ce guide explique comment résoudre un problème d'installation de certificat Let's Encrypt si vous utilisez Cloudflare avec des règles de sécurité strictes – surtout celles qui filtrent par pays ou par adresse IP.
Adapter les réglages SSL / geoblocking
Lorsque vous protégez un site Web avec Cloudflare, et que vous souhaitez en même temps obtenir un certificat SSL gratuit Let's Encrypt auprès d'Infomaniak, il peut y avoir des conflits techniques. Ces problèmes proviennent souvent de la manière dont Cloudflare gère la sécurité et les connexions réseau.
Let's Encrypt a besoin de vérifier que vous êtes bien le propriétaire du nom de domaine pour lequel vous demandez un certificat. Pour cela, il envoie ce qu’on appelle un « challenge » : une requête HTTP spécifique vers votre site, à une adresse du type http://domain.xyz/.well-known/acme-challenge/...
. Si cette vérification échoue, le certificat ne peut pas être délivré ou renouvelé.
Le souci, c’est que certaines protections activées sur Cloudflare peuvent bloquer ces vérifications :
- Des règles de sécurité (WAF), par exemple si vous bloquez certaines régions du monde (comme les États-Unis ou la Suisse).
- Des règles personnalisées, comme le filtrage des adresses IP.
- Le blocage géographique (geoblocking), qui empêche certains pays d’accéder à votre site.
Or, Let's Encrypt ne vérifie plus uniquement depuis un seul endroit. Depuis un certain temps (et plus encore depuis mars 2024), il effectue ses vérifications depuis plusieurs pays en même temps – y compris des nouveaux comme la Suède ou Singapour. Résultat : si l’un de ces pays est bloqué par vos réglages Cloudflare, la demande de certificat peut échouer, même si tout le reste est correctement configuré.
Pire encore : même si vous essayez de faire une exception uniquement pour l’adresse du challenge (.well-known/acme-challenge
), cela ne fonctionne pas forcément avec certaines règles Cloudflare. En effet, les règles de blocage par pays ou par IP sont appliquées avant toute exception basée sur des chemins d’URL.
Ajuster le mode SSL/TLS dans Cloudflare
Cloudflare propose différents niveaux de chiffrement SSL. Si vous avez un souci avec le certificat Let's Encrypt, passez en mode "Full" ou "Full (strict)" plutôt que "Strict seul". Ces modes permettent d’utiliser un certificat auto-signé ou expiré temporairement, en attendant que le vrai certificat soit renouvelé.
Utiliser des règles personnnalisées (utilisateurs avancés)
Il est recommandé de ne pas utiliser de "IP Access Rules" qui ne peuvent être outrepassées, mais mettre en place des "Custom rules" avec la geoip ou toute autre règle souhaitée, et surtout en autorisant le path "/.well-known/acme-challenge/
" sans restriction d'accès pour que les challenges Let's Encrypt passent malgré la restriction en place.
Désactiver temporairement le blocage géographique
Si vous bloquez l’accès à votre site depuis certains pays (par exemple pour éviter les attaques), pensez à lever cette restriction temporairement le temps que Let's Encrypt puisse faire sa vérification. Une fois le certificat délivré ou renouvelé, vous pouvez réactiver les protections.