Base de connaissances
1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Ce guide présente plusieurs exemples d'utilisation de Varnish sur Serveur Cloud Infomaniak.
Préambule
- Consultez ces ressources complémentaires sur le langage de configuration Varnish (VCL) pour maîtriser le traitement des requêtes, le routage et la mise en cache :
Configuration de Varnish
Une fois installé, la configuration de Varnish repose sur des règles précises de mise en cache et de purge. Veillez à restreindre l'accès pour éviter que des entités non autorisées puissent vider votre cache.
Voici un exemple de fichier de configuration regroupant les cas d'usage les plus fréquents :
vcl 4.0;
# Default backend configuration
backend default {
.host = "127.0.0.80"; # Backend IP address
.port = "80"; # Backend port
}
# Access Control List (ACL) for purge authorization
acl purge {
"localhost"; # Local access
"1.2.3.4"; # Trusted home IP
"42.42.42.0"/24; # Trusted company range
! "42.42.42.7"; # Specific IP exclusion (e.g., problematic user)
}
# Handle incoming requests
sub vcl_recv {
# Handle PURGE requests
if (req.method == "PURGE") {
# Check if client IP is authorized
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGE requests."));
}
return (purge);
}
# Custom PURGEALL for image directory
if (req.method == "PURGEALL" && req.url == "/images") {
if (!client.ip ~ purge) {
return (synth(405, "IP not authorized for PURGEALL requests."));
}
# Invalidate all image-related objects in cache
ban("req.url ~ \.(jpg|png|gif|svg)$");
return (synth(200, "Images purged."));
}
# Bypass cache for authorized requests (e.g., admin panels)
if (req.http.Authorization) {
return (pass);
}
}
# Handle backend responses before caching
sub vcl_backend_response {
# Set TTL for images to 1 day
if (beresp.http.content-type ~ "image") {
set beresp.ttl = 1d;
}
# Respect backend's "uncacheable" instruction
if (beresp.http.uncacheable) {
set beresp.uncacheable = true;
}
}
Purge via l'interface CLI
Dès lors que vos règles sont actives, vous pouvez tester la purge de votre site (ex: "domain.xyz") en utilisant l'outil curl :
# Purge the homepage
$ curl -X PURGE https://domain.xyz/
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The page has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 2</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Pour purger une URL spécifique, modifiez simplement le chemin de la requête :
# Purge a specific file
$ curl -X PURGE https://domain.xyz/some_path/some_file.html
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged</title>
</head>
<body>
<h1>Success 200: Purge completed</h1>
<p>The file has been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 4</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>Ou pour déclencher la purge groupée des images définie dans le VCL :
# Execute PURGEALL for images
$ curl -X PURGEALL https://domain.xyz/images
# Expected Varnish response
<!DOCTYPE html>
<html>
<head>
<title>200 Purged images</title>
</head>
<body>
<h1>Success 200: Images purged</h1>
<p>All images have been successfully purged.</p>
<h3>Guru Meditation:</h3>
<p>XID: 32770</p>
<hr>
<p>Varnish Cache Server</p>
</body>
</html>
Purge depuis un CMS (PHP)
La gestion du cache peut aussi se faire dynamiquement via votre backend. Dans la configuration précédente, un contrôle sur l'en-tête Uncacheable a été ajouté. Votre CMS peut envoyer cet en-tête pour forcer Varnish à ne pas stocker une réponse.
Voici comment envoyer une requête de purge programmatique en PHP :
<?php
// Initialize cURL for a specific URL
if ($curl = curl_init("http://127.0.0.1/some_url")) {
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PURGE",
CURLOPT_HTTPHEADER => [
"Host: {$_SERVER['HTTP_HOST']}" // Match the target host
]
]);
curl_exec($curl);
// Check if the purge was successful (HTTP 200)
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
echo "Cache purged!";
}
curl_close($curl);
}
?>Lien vers cette FAQ: https://faq.infomaniak.com/2592
Cette FAQ a été utile?
Ce guide explique comment importer des contacts sur des carnets d'adresses de l'app Web Contacts Infomaniak (service en ligne ksuite.infomaniak.com/contacts).
Préambule
- Un assistant permet l'importation facilitée des contacts depuis différentes sources, telles que Outlook, les carnets d'adresses macOS, Thunderbird, Gmail, etc.
- L'importation peut se faire au moyen d'un fichier au format
VCARDouCSV. - Le fichier ne doit ni excéder 50 Mo ni contenir plus de 10000 lignes.
Importer des contacts
Pour cela:
- Cliquez ici afin d'accéder à la partie Importation de l'app Web Contacts Infomaniak (service en ligne ksuite.infomaniak.com/contacts):

- Cliquez sur le bouton bleu Sélectionner un fichier VCARD ou CSV:

Importer à partir d'un fichier vCard (.vcf)
Le contenu d'un export de contacts au format vCard ressemble à ceci:
BEGIN:VCARD
VERSION:3.0
FN:John Smith
N:Smith;John;;;
EMAIL;TYPE=INTERNET:john.smith@example.com
TEL;TYPE=CELL:+41791234567
ORG:Example Ltd
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:Jane Miller
N:Miller;Jane;;;
EMAIL;TYPE=INTERNET:jane.miller@example.com
ORG:Freelance
END:VCARD
...Quand vous sélectionnez votre fichier .vcf sur l'outil d'importation, voici les étapes suivantes:
- L'assistant indique le nombre de contacts détectés au sein de votre fichier.
- Choisissez le carnet d'adresses (ou créez-en un nouveau) pour stocker vos contacts.
- Cliquez sur le bouton pour démarrer l'importation:

Importer à partir d'un fichier CSV (.csv)
Le contenu d'un export de contacts au format CSV ressemble à ceci:
Name,First name,Email,Phone,Organization,Notes
Smith,John,john.smith@example.com,+41791234567,Example Ltd,VIP customer
Miller,Jane,jane.miller@example.com,,Freelance,
Brown,Mark,,+41792345678,,Former colleague
Taylor,Sarah,sarah.taylor@example.com,+41793456789,City Hall,
Wilson,Lucas,lucas.wilson@example.com,,,Quote request in March
Moore,Elise,,+41794567890,BioShop,
Walker,Thomas,thomas.walker@example.com,+41795678901,InnoTech,Python expert
Young,Julie,julie.young@example.com,,,
...Quand vous sélectionnez votre fichier .csv sur l'outil d'importation, voici les étapes suivantes:
- L'assistant indique le nombre de contacts détectés au sein de votre fichier.
- Vous pouvez augmenter le nombre de contacts affichés par page, ceci afin de mieux les prévisualiser en entier si besoin.
- Choisissez le séparateur ayant servi pour délimiter les informations dans votre fichier texte.
- Spécifiez si le fichier contient une première ligne sans contact (seulement des informations de tête de colonne).
- Spécifiez si vous souhaitez importer des contacts qu'à partir d'une ligne précise.
- Cliquez sur le bouton pour continuer:

- Assignez les informations détectées dans le fichier pour chaque contact avec les champs disponibles dans votre carnet d'adresses:

- Naviguez parmi les contacts à importer pour spécifier d'autres champs si nécessaire.
- Revenez en arrière pour vérifier l'impact de vos changements, puis cliquez sur le bouton pour continuer:

- Choisissez le carnet d'adresses (ou créez-en un nouveau) pour stocker vos contacts.
- Cliquez sur le bouton pour démarrer l'importation:

Contacts importés
Les contacts sont importés dans l'emplacement spécifié, dans un groupe ; vous pouvez si nécessaire supprimer ce dossier qui a été créé pour l'occasion (cela ne supprime pas les contacts si vous n'activez pas cette option à la suppression du dossier):
- Cliquez sur le menu d'action ⋮ situé à droite du nom du groupe créé avec la date de l'importation.
- Cliquez sur Supprimer:

En cas de problème
- Complétez les fiches contacts :
- Un contact ne contenant que le nom et le prénom peut être ignoré par le système par sécurité.
- Assurez-vous qu'au moins une information supplémentaire est présente (adresse e-mail ou numéro de téléphone).
- Vérifiez l'en-tête de votre fichier (CSV) :
- Les colonnes doivent être clairement nommées (ex: "Nom", "Prénom", "Email").
- Si les titres sont manquants ou erronés, le système ne pourra pas lire les données.
- Format des données :
- Vérifiez que les numéros de téléphone ne contiennent pas de caractères spéciaux inhabituels et que les adresses e-mail sont correctement orthographiées (présence du
@et du point).
- Vérifiez que les numéros de téléphone ne contiennent pas de caractères spéciaux inhabituels et que les adresses e-mail sont correctement orthographiées (présence du
- Encodage du fichier :
- Pour un résultat optimal, enregistrez votre fichier CSV au format UTF-8 ; cela garantit que les accents et les caractères spéciaux s'affichent correctement.
Si vous devez d'abord les exporter de...
... Outlook (ancienne version)
- Depuis votre logiciel Outlook rendez-vous dans votre carnet d'adresses.
- Sélectionnez les contacts à exporter.
- Dans Actions, cliquez sur Transférer comme vCard.
- Faites partir l'e-mail contenant la vCard.
- Récupérez l'e-mail dans l'app Web Mail Infomaniak (service en ligne ksuite.infomaniak.com/mail)
- Cliquez sur Ajouter tous les contacts.
... macOS (ou prenez connaissance de cet autre guide)
- Depuis votre logiciel Contact, rendez-vous dans Fichier puis sélectionner Exporter.
- Choisissez Exporter vCard.
- Enregistrezvotre fichier vCard sur votre ordinateur.
... Thunderbird (ou prenez connaissance de cet autre guide)
- Depuis votre logiciel Thunderbird, rendez-vous dans Fenêtre puis sélectionner Carnet d'adresses.
- Dans Outils sélectionnez Exporter.
- Dans les options d'enregistrement choisissez Séparé par des virgules comme format.
- Enregistrez votre fichier CSV.
... Gmail (ou prenez connaissance de cet autre guide)
- Depuis votre espace Gmail, rendez-vous dans la partie Contacts.
- Cliquez sur le bouton Exporter.
- Sélectionnez Format vCard.
- Enregistrez votre fichier vCard sur votre ordinateur.
... Office 365 (ou prenez connaissance de cet autre guide)
- Depuis votre logiciel Outlook, rendez-vous dans la partie Contacts.
- Cliquez sur Gérer et choisir Exporter.
- Enregistrez votre fichier CSV sur votre ordinateur.
... Yahoo Mail: prenez connaissance de cet autre guide
... Proton Mail: prenez connaissance de cet autre guide
... Bluewin: prenez connaissance de cet autre guide
Lien vers cette FAQ: https://faq.infomaniak.com/1599
Cette FAQ a été utile?
Ce guide vous permet de gérer des applications externes avec kChat à l'aide de webhook.
Préambule
- Un webhook est une méthode permettant à une application d'être informée immédiatement lorsqu'un évènement particulier se produit dans une autre application, plutôt que de demander constamment à cette application si quelque chose de nouveau est arrivé ("polling").
- Webhook sortant: kChat communique des informations à d'autres apps lorsqu'un évènement se produit dans kChat.
- Webhook entrant: kChat reçoit des informations d'autres apps pour déclencher des actions dans kChat.
- Il n'est pas possible d'importer l'historique des discussions depuis une autre application (Slack, Teams, Jabber, etc.) ou depuis une autre Organisation.
⚠ Nombre max. de Webhook entrant / sortant :
| kSuite | gratuit | 1 / 1 |
| Standard | 20 / 20 | |
| Business | illimité | |
| Enterprise | illimité | |
Accéder à l'interface webhooks kChat
Prérequis
- Ne pas être un utilisateur externe (celui-ci ne verra pas le menu Intégrations).
Pour configurer un webhook, trouver des applications et intégrations auto-hébergées ou tierces:
- Cliquez ici afin d'accéder à l'app Web kChat (service en ligne ksuite.infomaniak.com/kchat) ou ouvrez l'app desktop kChat (application de bureau sur macOS / Windows / Linux).
- Cliquez sur l'icône Nouveau vers le nom de votre organisation kChat.
- Cliquez sur Intégrations:

- Accédez aux catégories :

Guides spécifiques
Exemples d'intégration sur kChat:
- Calendar Infomaniak: afficher un rappel d'évènement sur kChat
- application n8n: déclencher l'envoi d'un message sur kChat
Guides pour tout autre usage
Pour créer un webhook entrant (afin d'afficher un évènement externe sur kChat) :
- Cliquez sur la catégorie Webhooks entrants.
- Cliquez sur le bouton bleu Ajouter des webhooks entrants:

- Ajoutez un nom et une description pour le webhook.
- Sélectionnez le canal qui recevra les messages.
- Cliquez sur le bouton pour Enregistrer:

- L'URL à conserver pour vos développements s'affiche (à ne pas divulguer publiquement) ; exemple “
https://your-server-kchat.xyz/hooks/xxx-key-generated-xxx”:
Utilisation du webhook
Exemple rapide
- Une commande
curlprécise (détaillée plus bas) est entrée dans un terminal. - La commande contient l'URL obtenue au point 6 ci-dessus.
- La commande aura comme résultat de poster un message dans le canal spécifié au point 4 ci-dessus:

Détails
Sur l'application qui doit poster sur kChat :
Ajustez le code ci-dessous en fonction de l'URL obtenue sur kChat:
POST /hooks/xxx-key-generated-xxx HTTP/1.1 Host: your-server-kchat.xyz Content-Type: application/json Content-Length: 63 { "text": "Hello, text1\nText2." }Utilisez éventuellement la même requête mais en
curl(pour tester depuis une application de typeTerminal(interface en ligne de commande,CLI /Command Line Interface) sur votre appareil) comme dans l'exemple en image ci-dessus:curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "Hello, text1\nText2."}' https://your-server-kchat.xyz/hooks/xxx-key-generated-xxx
L'indication BOT est ajoutée à côté du nom d'utilisateur sur kChat pour des raisons de sécurité.
Si aucun en-tête Content-Type n'est défini, le corps de la requête doit être précédé de payload= comme ceci :
payload={"text": "Hello, text1\nText2."}Une requête réussie recevra la réponse suivante :
HTTP/1.1 200 OK
Content-Type: application/json
X-Version-Id: 4.7.1.dev.12799dvd77e172e8a2eba0f4041ec1471.false
Date: Sun, 01 Jun 2023 17:00:00 GMT
Content-Length: 58
{
"id":"x",
"create_at":1713198308869,
"update_at":1713198308869,
"delete_at":0,
"user_id":"x",
"channel_id":"x",
"root_id":"",
"original_id":"",
"participants":null,
"message":"test",
"type":"",
"props":{
"override_username":"webhook",
"override_icon_url":null,
"override_icon_emoji":null,
"webhook_display_name":"test",
"attachments":[
],
"card":null,
"from_webhook":"true"
},
"hashtags":null,
"metadata":{
"embeds":[
{
"type":"message_attachment"
}
],
"files":[
],
"reactions":[
]
},
"file_ids":null,
"has_reactions":false,
"edit_at":0,
"is_pinned":false,
"remote_id":null,
"reply_count":0,
"pending_post_id":null,
"is_following":false
}
Si vous souhaitez avoir le même format de réponse que Slack:
HTTP/1.1 200 OK
Content-Type: text/plain
X-Request-Id: hoan69ws7rp5xj7wu9rmystry
X-Version-Id: 4.7.1.dev.12799dvd77e172e8a2eba0f4041ec1471.false
Date: Sun, 01 Jun 2023 17:00:00 GMT
Content-Length: 2
okvous devez ajouter ?slack_return_format=true à l'URL du webhook.
Paramètres
En plus du champ text, voici la liste complète des paramètres supportés :
| Paramètre | Description | Requis |
|---|---|---|
text | Message au format Markdown à afficher dans la publication. Pour déclencher des notifications, utiliser “@<username>”, “@channel” et “@here” comme vous le feriez dans d'autres messages kChat. | Si attachments n'est pas défini, oui |
channel | Remplace le canal dans lequel le message est posté. Utiliser le nom du canal, pas le nom d'affichage, utiliser par exemple “town-square”, pas “Place de la ville”. Utiliser "@" suivi d'un nom d'utilisateur pour envoyer un message direct. Par défaut, utilise le canal défini lors de la création du webhook. Le webhook peut poster dans n'importe quel canal public et privé où le créateur du webhook est présent. Les publications dans les messages directs apparaîtront dans le message direct entre l'utilisateur ciblé et le créateur du webhook. | Non |
username | Remplace le nom d'utilisateur sous lequel le message est posté. Par défaut, utilise le nom d'utilisateur défini lors de la création du webhook ; si aucun nom d'utilisateur n'a été défini lors de la création, utilise webhook. | Non |
icon_url | Remplace l'image de profil avec laquelle le message est posté. Par défaut, utilise l'URL définie lors de la création du webhook ; si aucune icône n'a été définie lors de la création, l'icône de webhook standard () est affichée. Le paramètre de configuration Autoriser les intégrations à remplacer les icônes de photo de profil doit être activé pour que le remplacement de l'icône prenne effet. | Non |
icon_emoji | Remplace l'image de profil et le paramètre icon_url.Par défaut, rien n'est défini lors de la création du webhook. La valeur attendue est le nom d'un emoji tel qu'il est tapé dans un message, avec ou sans deux-points ( :).Le paramètre de configuration Autoriser les intégrations à remplacer les icônes de photo de profil doit être activé pour que le remplacement prenne effet. | Non |
attachments | Pièces jointes au message utilisées pour des options de mise en forme plus riches. | Si text n'est pas défini, oui |
type | Définit le type de publication, principalement pour une utilisation par des plugins.S'il n'est pas vide, doit commencer par " custom_". | Non |
Exemple de code avec paramètres
Voici comment générer un message plus complet avec des paramètres, certains pouvant remplacer des paramètres déjà établis lors de la création du webhook (nom d'utilisateur, canal préféré, avatar...) comme indiqué dans le tableau ci-dessus:
curl -i -X POST -H 'Content-Type: application/json' \
-d '{
"username": "System Monitor",
"icon_url": "https://cdn-icons-png.flaticon.com/512/5971/5971593.png",
"text": "### System Status Report\nEnvironment: PRODUCTION\nStatus: SUCCESSFUL\n\n---\n\n| Component | Version | Build ID | Status |\n|:----------|:-------:|:---------|:-------|\n| API-Core | 2.4.1 | #88421 | OK |\n| Web-UI | 1.9.0 | #88425 | OK |\n| Database | 14.5 | N/A | OK |\n\n---\n\n**Commit Reference:**\n`git-ref: a7f8e9c21b` \n\n**Summary:**\nAll automated integration tests passed successfully. No manual intervention is required. Please contact the DevOps team for further details regarding this release."
}' \
https://faq-infomaniakaruh.kchat.infomaniak.com/hooks/019c23e9-a9a8-735c-b6ce-0a69df63aaf0Résultat d'un exemple similaire en image:
Lien vers cette FAQ: https://faq.infomaniak.com/2001
Cette FAQ a été utile?