Blog

  • En route avec Astro.build

    En route avec Astro.build

    Notre blog, ouvert depuis quelques années déjà, était propulsé par WordPress depuis ses débuts. Récemment, pour ne pas dire, il y a quelques jours, nous l’avons migré vers une nouvelle solution de site SSG basée sous Astro.build

    Un changement de moteur (enfin pas tout à fait)

    WordPress n’a pas complètement disparu et est encore utilisé pour écrire les articles et le contenu. C’est la partie présentation qui a été changée et remplacée par Astro.build

    En effet, Astro.build se nourrit de WordPress à travers son API et plus exactement une API GraphQL (on aurait pu utiliser l’API Rest …)

    Pourquoi ce changement de moteur ?

    Nous voulions nous occuper de la rédaction du contenu mais pas forcément du moteur, ou tout du moins, le moins possible.

    Nous pouvons mettre à jour Astro, sans forcément mettre à jour WordPress et vice versa. Les deux sont indépendants. Ainsi, si WordPress connait une avarie, le blog continue de fonctionner sans que personne ne voit de problème sur WordPress.

    Nous gagnons également en sécurité puisque toutes nos pages sont majoritairement des pages HTML, ainsi, nous ne craignons plus les attaques. Aussi, nous sommes certains d’avoir des temps de réponses très faibles et constants, de quoi avoir une base saine pour un blog que nous souhaitons faire vivre et grandir.

    C’est également un pas vers un hébergement plus vertueux. En effet, nous ne consommons que très peu de ressources, les pages étant générées uniquement que quand cela est nécessaire (quand une mise à jour est produite …)

    Pourquoi Astro ?

    Astro est un SSG pour Static Site Generator ou générateur de site statique. L’idée qui est derrière est de générer le plus possible, des pages HTML statiques tout en profitant d’une interface d’administration (ici, celle de WordPress … oui le Markdown existe et c’est bien, mais c’est plus confortable de pouvoir éditer sa page dans une page Web agréable …)

    Nous avons fait notre choix pour Astro, après avoir fait du NextJS ou bien encore du GatsbyJS, pour nous, c’est actuellement le meilleur candidat, permettant ainsi :

    • d’être « aux normes actuelles » en terme de référencement,
    • d’utiliser du TypeScript / JavaScript pour réaliser les développements
    • de garder une souplesse dans le choix des framework Frontend que nous pouvons utiliser puisque celui-ci supporte Svelte, VueJS, React, Solid ou bien encore AlpineJS
    • d’aggréger différentes sources de données

    Un changement de thème

    Nous avons développé un thème home-made basé sur TailwindCSS collant plus, à la nouvelle identité visuelle en préparation pour notre nouveau site internet

    Au final

    Nous avons gagné en performances, souplesse, sécurité et résistance contre les attaques (tout type)

    La peinture est encore fraîche mais comme nous travaillons avec de l’amélioration continue, tout rentrera dans l’ordre au fur et à mesure du temps et des livraisons que nous effectuerons grâce à notre usine logicielle basée sur Gitlab

  • Nos offres de fibre optique FTTO se muent doucement vers le 10 Gbps

    Nos offres de fibre optique FTTO se muent doucement vers le 10 Gbps

    Les débits et les usages de la connectivité ont explosé. La 5G a permis d’atteindre des débits importants en mobilité, il était normal que les débits sur les lignes « fixes » augmentent également, c’est pourquoi, tout doucement, le 10 Gbps trouve sa place et se démocratise.

    En route vers le 10 Gbps

    Que ce soit sur nos liens collectés auprès de réseaux tiers, ou bien sur nos réseaux en propre, nous avons l’opportunité de vous proposer des débits en 1 Gbps et 10 Gbps à des tarifs intéressants.

    Tout le monde n’a pas forcément besoin d’un lien FTTO 10 Gbps mais le prix du lien 1 Gbps en FTTO a bien baissé et c’est un débit envisageable pour une PME souhaitant avoir un certain confort dans l’utilisation de ses outils comme par exemple la VOIP ou bien encore le stockage cloud.

    Un rappel sur la FTTO ?

    Rappelons que la FTTO est un lien fibre optique dédié de point en point vous garantissant un fort engagement de la part de votre opérateur en terme de débit et de qualité de service. Le débit est symétrique et les GTR (Garanties de temps de rétablissement) importantes, vous garantissant un rétablissement rapide et donc une continuité certaine pour votre activité. Rien de nous empêche de secourir cet accès par un lien de secours et de mettre en place une solution SD-WAN venant aiguiller tout cela.

    Si vous souhaitez avoir une tarification sur ce type de débit, n’hésitez pas à nous contacter, nous pourrions avoir de très bonnes surprises pour vous !

  • Re-connexion au point d’échange d’Equinix

    Re-connexion au point d’échange d’Equinix

    Suite à nos opérations de l’année dernière que nous avons du mener, à savoir déplacer nos équipements de Telehouse Voltaire vers Telehouse Leon Frot, une partie de notre réseau n’était pas revenu dans son fonctionnement initial, à savoir que le point d’échange d’Equinix n’était plus connecté.

    Depuis une bonne semaine, c’est désormais de nouveau le cas et ce sont désormais deux routeurs qui s’occupent de gérer le réseau sur Paris. Les peerings et transit y sont répartis. Ne sont pas comptés les routeurs de collecte qui sont à part.

    Au final, nous avons retrouvé majoritairement toutes les routes que nous avions avant et une partie du trafic s’écoule par ces deux routeurs (un est un Arista, l’autre un Brocade).

    N’hésitez pas à venir peerer avec nous 🙂

    Au passage, on remercie les équipes d’Equinix et de Sipartech pour leur support dans l’accomplissement de cette re-connexion

  • Xdebug et JIT ne font pas bon ménage

    Xdebug et JIT ne font pas bon ménage

    Il arrive parfois d’installer un peu follement beaucoup de paquets sur les distributions et d’arriver à avoir XDebug activé. Il nous est arrivé un cas ou JIT ne fonctionnait pas et n’avait aucun impact positif sur les performances

    Il suffit pourtant de lire la documentation

    Nous ne comprenions pas le pourquoi du comment et c’est en fouillant que la documentation de Xdebug nous a éclairé :

    PHP 8 JIT

    Xdebug does not work with PHP’s JIT engine, which is implemented in Opcache. When Xdebug is loaded with PHP’s JIT on, you will get a warning, and JIT will be disabled.

    Si Xdebug rencontre JIT, il le désactive tout simplement.

    Xdebug : à n’utiliser que pendant le développement

    Au final, n’activez pas Xdebug sur votre production et si vous l’avez sur un autre environnement et que vous faites des tests de charge, pensez à le désactiver temporairement pour que vous puissiez avoir un test proche du réel

  • Récupérer un fichier dans une machine virtuelle à l’aide des VMWare Tools

    Récupérer un fichier dans une machine virtuelle à l’aide des VMWare Tools

    Dans le cadre d’un projet pour un client, nous avons été amené à récupérer des fichiers présents dans une machine virtuelle à l’aide des VMWare Tools. Pour ce faire, rien de plus simple, il faut utiliser l’API de VMWare, dans notre cas, nous avons fait le choix d’utiliser du Python et pyvmomi

    But de l’opération ?

    Sur une machine par exemple piratée, il est alors possible, en déconnectant la machine du réseau, de récupérer son contenu qui pourrait ne pas avoir été sauvegardé, ou bien encore, à travers une autre API de VMWare, lancer un exécutable qui écrirait dans un fichier de logs le résultat et en récupérer le résultat pour analyser.

    On peut récupérer des fichiers mais on peut également en envoyer et on peut également lancer des commandes à travers les VMWare Tools. La récupération de données ne peut se faire que sur des fichiers, il faut donc zipper le contenu si vous avez besoin de récupérer un ensemble de fichiers.

    On veut du code …

    from pyVim.connect import SmartConnectNoSSL, Disconnect
    from pyVmomi import vim, vmodl
    import argparse
    import getpass
    
    def get_args():
        parser = argparse.ArgumentParser(description='Arguments for talking to vCenter')
        parser.add_argument('--host', required=True, action='store', help='vCenter host')
        parser.add_argument('--user', required=True, action='store', help='User name to use')
        parser.add_argument('--password', required=False, action='store', help='Password to use')
        parser.add_argument('--vm-name', required=True, action='store', help='Name of VM to interact with')
        parser.add_argument('--file-path', required=True, action='store', help='Path of the file to retrieve from the VM')
        parser.add_argument('--guest-user', required=True, action='store', help='Guest OS user')
        parser.add_argument('--guest-password', required=True, action='store', help='Guest OS password')
        args = parser.parse_args()
    
        if not args.password:
            args.password = getpass.getpass(prompt='Enter password for vCenter: ')
    
        return args
    
    def main():
        args = get_args()
    
        # Connect to the host without SSL certification verification
        si = SmartConnectNoSSL(host=args.host, user=args.user, pwd=args.password)
        content = si.RetrieveContent()
    
        # Find the VM
        vm = None
        for child in content.rootFolder.childEntity:
            if hasattr(child, 'vmFolder'):
                datacenter = child
                vmFolder = datacenter.vmFolder
                vmList = vmFolder.childEntity
                for vm in vmList:
                    if vm.name == args.vm_name:
                        break
                if vm:
                    break
    
        if not vm:
            print("VM not found")
            return
    
        # Set up guest file manager
        creds = vim.vm.guest.NamePasswordAuthentication(username=args.guest_user, password=args.guest_password)
        gfm = content.guestOperationsManager.fileManager
    
        # Define the file to retrieve
        guestFilePath = args.file_path
    
        # Generate a URL to download the file
        try:
            fileTransferInformation = gfm.InitiateFileTransferFromGuest(vm, creds, guestFilePath)
            print(f"Download URL: {fileTransferInformation.url}")
        except vmodl.MethodFault as error:
            print("Error: ", error.msg)
    
        # Disconnect from the host
        Disconnect(si)
    
    if __name__ == "__main__":
        main()

    Vous pouvez récupérer votre fichier à l’adresse indiquée par Download URL. Comme vous pouvez le voir, les VMWare tools doivent être installés et fonctionnels. Il faut également un nom d’utilisateur et un mot de passe pour pouvoir récupérer du contenu.

  • Nos serveurs SMTP ont fait peau neuve

    Nos serveurs SMTP ont fait peau neuve

    Nos clients en hébergement mutualisé utilisent nos serveurs SMTP pour leurs envois d’e-mail, l’infrastructure avait besoin d’un petit coup de jeunesse et c’est fait depuis la fin 2023, cette maintenance a été réalisée sans aucune remonté, ni plainte client, un point sur ce que nous avons mis en place (suite…)