PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Littlewing : Objectif Top Architecte !

lundi 14 janvier 2019 à 10:26

Voila la description de la conférence/ hands que j’animerai au Touraine Tech est en ligne 🙂
Vous trouverez le descriptif sur cette page.
Bon maintenant, je n’ai plus qu’à préparer mes slides …. 🙂

 

Gravatar de Littlewing
Original post of Littlewing.Votez pour ce billet sur Planet Libre.

dada : Nextcloud, PHP-FPM, Nginx et Kubernetes

lundi 14 janvier 2019 à 08:42



Ma première installation de Nextcloud dans Kubernetes était basée sur l'image Docker contenant Apache2. Aucun souci notable au niveau de la synchro des agendas, des fichiers ou encore des contacts. Par contre, la génération des miniatures des photos s'est révélée être un drame : Apache s'emballait et entraînait le nœud sur lequel il tournait avec lui, dans la tombe. Il me fallait une solution, j'ai donc décidé de changer de conteneur et de prendre celui basé sur PHP-FPM.

Un pod avec deux conteneurs

On entend souvent la rumeur racontant qu'un pod ne contient qu'un conteneur. C'est souvent vrai, mais c'est aussi faux. Dans l'exemple qui va suivre, le pod gérant Nextcloud contiendra le conteneur officiel de Nextcloud et un conteneur Nginx.

Contexte

Pour suivre, sachez que mon cluster, celui grâce auquel vous lisez ces quelques lignes, gère son système de fichier avec Rook, dont j'ai déjà parlé ici. Mes nœuds sont chez Hetzner, ce sont des CX21, du cloud public donc, et mes services sont exposés en NodePort derrière un Nginx configuré en LoadBalancer. Maintenant que vous savez ça, on peut y aller.

Le Deployment

On va commencer par balancer le Yaml qui marche :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud-deployment
spec:
  selector:
    matchLabels:
      app: nextcloud
  replicas: 1
  template:
    metadata:
      labels:
        app: nextcloud
    spec:
      containers:
      - name: nginx
        image: nginx:1.15
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
        - name: pv-nextcloud
          mountPath: /var/www/html
        lifecycle:
          postStart:
            exec:
             command: ["bin/sh", "-c", "mkdir -p /var/www/html"]
      - name: nextcloud
        image: nextcloud:14.0-fpm
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: pv-nextcloud
          mountPath: /var/www/html
        resources:
          limits:
            cpu: "1"
      volumes:
      - name : nginx-config
        configMap:
           name: nginx-config
      - name: pv-nextcloud
        flexVolume:
          driver: ceph.rook.io/rook
          fsType: ceph
          options:
            fsName: myfs
            clusterNamespace: rook-ceph
            path: /nextcloud2

Il n'y a pas le Service associé pour la simple et bonne raison que chacun fait comme il le veut. Si vous êtes chez DigitalOcean, OVH ou chez un des GAFAM qui propose du k8s, vous aurez un LoadBalancer qui va bien. Si vous êtes comme moi, vous êtes réduit à faire du NodePort.

Ce qu'il faut comprendre

Vous remarquerez qu'il y a deux conteneurs : Nginx et Nextcloud-FPM. Nginx écoute sur le port 80 et va router le trafic à travers vers le port 9000 du conteneur de Nextcloud.

Nginx

      - name: nginx
        image: nginx:1.15
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
        - name: pv-nextcloud
          mountPath: /var/www/html
        lifecycle:
          postStart:
            exec:
             command: ["bin/sh", "-c", "mkdir -p /var/www/html"]
On va faire gober à Nginx deux points de montage : sa configuration et les sources de Nextcloud. Sans les sources de l'application, Nginx ne pourra pas avoir accès aux fichiers PHP, et ne servira donc à rien. On va donc prendre le point de montage originalement dédié à Nextcloud pour le monter une deuxième fois dans un deuxième conteneur, celui de Nginx.

Lifecycle

Remarquez la présence de la section lifecycle, elle permet d’exécuter ce que vous voulez au démarrage du conteneur. Quand j'apprenais à me servir de ce couple, je ne comprenais pas pourquoi Nginx ne voulait pas correctement fonctionner. J'ai passé du temps à comprendre que le conteneur Nginx et le conteneur Nextcloud n'avait pas le même docRoot :
Comprenez que les requêtes Nginx allaient cherchez des fichiers dans /srv/html/blabla.php quand Nextcloud annonçait la présence de ses sources dans /var/www/html/blabla.php. Le bordel.

C'est là que je n'ai trouvé pas idiot l'idée de créer le chemin manquant au démarrage du pod avec un postStart. Du coup, j'avais Nginx et Nextcloud au diapason. Il est sans doute possible de configurer Nginx pour surcharger son docRoot, mais c'était l'occasion de jouer avec des commandes en amont de la création d'un conteneur.

Les deux points de montage

On a donc un point de montage pour les sources de Nextcloud :
        - name: pv-nextcloud
          mountPath: /var/www/html
Et un point de montage pour la configuration de Nginx :
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf

Là aussi, j'ai perdu un peu de temps avant de comprendre qu'il fallait balancer toute la configuration de Nginx et pas seulement ce que j'ai l'habitude de mettre dans les sites-enabled. C'est du moins à faire quand on écrase le nginx.conf du pod. En y réfléchissant, c'est sans doute plus simple de modifier le point montage pour n'ajouter qu'un fichier dans le fameux sites-enabled.

Pour gérer la configuration de Nginx, je passe par une ConfigMap :
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-config
data:
  nginx.conf: |
    worker_processes  1;

    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;

    events {
        worker_connections  1024;
    }

    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        server {
            listen 80;

            add_header X-Content-Type-Options nosniff;
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Robots-Tag none;
            add_header X-Download-Options noopen;
            add_header X-Permitted-Cross-Domain-Policies none;
            add_header Referrer-Policy no-referrer;

            root /var/www/html;

            location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
            }

            location = /.well-known/carddav {
                return 301 $scheme://$host/remote.php/dav;
            }
            location = /.well-known/caldav {
                return 301 $scheme://$host/remote.php/dav;
            }

            # set max upload size
            client_max_body_size 10G;
            fastcgi_buffers 64 4K;

            # Enable gzip but do not remove ETag headers
            gzip on;
            gzip_vary on;
            gzip_comp_level 4;
            gzip_min_length 256;
            gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
            gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

            location / {
                rewrite ^ /index.php$request_uri;
            }

            location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
                deny all;
            }
            location ~ ^/(?:\\.|autotest|occ|issue|indie|db_|console) {
                deny all;
            }

            location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\\.php(?:$|/) {
                fastcgi_split_path_info ^(.+\\.php)(/.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                # fastcgi_param HTTPS on;
                #Avoid sending the security headers twice
                fastcgi_param modHeadersAvailable true;
                fastcgi_param front_controller_active true;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_intercept_errors on;
                fastcgi_request_buffering off;
            }

            location ~ ^/(?:updater|ocs-provider)(?:$|/) {
                try_files $uri/ =404;
                index index.php;
            }

            # Adding the cache control header for js and css files
            # Make sure it is BELOW the PHP block
            location ~ \\.(?:css|js|woff|svg|gif)$ {
                try_files $uri /index.php$request_uri;
                add_header Cache-Control "public, max-age=15778463";
                add_header X-Content-Type-Options nosniff;
                add_header X-XSS-Protection "1; mode=block";
                add_header X-Robots-Tag none;
                add_header X-Download-Options noopen;
                add_header X-Permitted-Cross-Domain-Policies none;
                add_header Referrer-Policy no-referrer;

                # Optional: Don't log access to assets
                access_log off;
            }

            location ~ \\.(?:png|html|ttf|ico|jpg|jpeg)$ {
                try_files $uri /index.php$request_uri;
                # Optional: Don't log access to other assets
                access_log off;
            }
        }

    }
Eh oui, il y a tout dedans. Ça déforme l'affichage de ce billet, m'enfin. C'est une configuration Nginx classique.

On peut quand même s'arrêter sur la configuration du fastcgi_pass : il tape sur le 127.0.0.1 et le port 9000 du conteneur Nextcloud. Je n'ai pas encore gratté pour comprendre le pourquoi du comment mais je suppose que les deux conteneurs tournant dans le réseau du pod, ils se comportent comme deux services dans une seule et même machine. À confirmer.

On apply tout ça

Attention ! Avant de balancer le Deployment, balancez le yaml de la ConfigMap. Sans ça, Nginx ne chargera pas votre configuration !
dada@k8smaster1:~$ kubectl apply -f configmap.yaml
dada@k8smaster1:~$ kubectl apply -f nextcloud.yaml
Si tout se passe bien, vous devriez pouvoir voir ça :
dada@k8smaster1:~$ kubectl get pods
nextcloud-deployment-d6cbb8446-87ckf   2/2     Running   0          15h
Remarquez que Kubernetes vous montre bien qu'il y a deux conteneurs dans ce pod : 2/2.

Pour aller plus loin

Je ne parle pas des vérifications de l'état des conteneurs. Il faudrait placer des sondes liveness et readness pour parfaitement vérifier l'état des conteneurs. Sans ça, si l'un des services tombe, Kubernetes ne sera pas forcément en mesure de le détecter et de relancer le pod.
Il est aussi possible, pour respecter le concept de micro-service, de ne pas concaténer deux conteneurs dans un seul pod mais de faire un pod par conteneur et des services associés. Ça demande plus de travail pour un résultat qui, dans mon cas, n'apporte pas grand chose.


Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #2

lundi 14 janvier 2019 à 00:01

Pour la seconde semaine de l'année 2019, voici 14 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Renault : Appel à rejoindre Borsalinux-fr

dimanche 13 janvier 2019 à 16:43

L'association

Logo.png

Borsalinux-fr est l'association qui gère la promotion de Fedora dans l'espace francophone. Nous constatons depuis quelques années une baisse progressive des membres à jour de cotisation et de volontaires pour prendre en main les activités dévolues à l'association.

Nous lançons donc un appel à nous rejoindre afin de nous aider.

L'association est en effet propriétaire du site officiel de la communauté francophone de Fedora, organise des évènements promotionnels comme les Rencontres Fedora régulièrement et participe à l'ensemble des évènements majeurs concernant le libre à travers la France principalement.

Pourquoi nous lançons cet appel ?

Nous constatons depuis 2012 ou 2013 une baisse progressive du nombre d'adhérents et en particulier de membres actifs au sein de l'association voire même de la communauté francophone dans son ensemble. Nous atteignons aujourd'hui une phase critique où l'activité est portée essentiellement par une poignée de personnes. Et certaines personnes actives aujourd'hui souhaitent baisser le rythme pour s'impliquer dans d'autres projets au sein de Fedora comme ailleurs.

Ainsi il devient difficile de maintenir notre activité dans de bonnes conditions. Ce qui nuit à notre visibilité d'une part, mais aussi à l'attractivité du projet auprès des francophones d'autres part.

Activités possibles

Dans l'ensemble, les besoins les plus urgents sont au niveau de l'association où le renouvellement des membres dans le conseil d'administration est nécessaire. La traduction est aussi un domaine qui commence à être à l'arrêt. Et nous souhaitons aussi un élargissement de notre ancrage local. Actuellement les évènements de l'axe Bruxelles - Paris - Lyon - Nice sont assez bien couverts. En dehors nous avons des difficultés croissantes à envoyer quelqu'un sur place dans de bonnes conditions comme au Capitole du Libre à Toulouse ou aux RMLL suivant sa localisation.

Si vous aimez Fedora, et que vous souhaitez que notre action perdure, vous pouvez :

Nous serions ravis de vous accueillir et de vous aider dans vos démarches. Toute contribution, même minime, est appréciée.

Si vous souhaitez avoir un aperçu de notre activité, vous pouvez participer à nos réunions hebdomadaires chaque lundi soir à 20h30 (heure de Paris) sur IRC (canal #fedora-meeting-1 sur Freenode).

Vous souhaitez nous aider ?

N'hésitez pas à nous contacter pour nous faire part de vos idées et de ce que vous souhaitez faire.

Par ailleurs le samedi 9 février 2019 à 14h à Paris (dans les locaux de la Fondation des Droits de l'Homme), l'Assemblée Générale Ordinaire procèdera au renouvellement du Conseil d'Administration et du Bureau de l'association. C'est l'occasion de se présenter et d'intégrer le fonctionnement de l'association ! C'est vraiment le moment idéal pour se tenir au courant de ce qui se passe et de présenter ses idées. Si vous ne pouvez pas venir sur place, n'hésitez pas à nous contacter avant pour nous communiquer vos idées et votre participation à la communauté francophone.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

La vache libre : Installer Archlinux pour ne pas rater sa vie

dimanche 13 janvier 2019 à 14:22

Je reconnais que le titre de ce billet est un brin putaclic, mais je sais que vous ne m’en tiendrez sans doute pas rigueur. Ayant installé une Archlinux il y a quelques jours, j’ai eu envie de vous parler de cette expérience afin de pourquoi pas vous conseiller d’en faire autant. Outre l’aspect purement technique de cette installation (que je n’évoquerai pas ou très peu ici), je pense qu’arrivé à un certain stade de votre parcours sous GNU/Linux cette étape est franchement nécessaire. Alors vous allez me dire à quoi bon se casser la tête avec un truc pareil alors qu’en quelques clics je peux faire en faire autant avec une distribution grand public? Vous avez raison et si vous le pensez vraiment c’est que ce billet n’est pas pour vous. Vous êtes sous GNU/linux, ce que vous avez vous va très bien, ça tourne, c’est beau et l’aspect technique ne vous intéresse pas. Soit. Il n’y a rien de mal à ça dans la mesure où vous avez déjà fait le choix le plus important, à savoir tourner sous GNU/Linux. Je vous en félicite. Pour les autres, ceux qui aimeraient aller plus loin mais qui hésitent encore car ils ont lu partout que c’était difficile, je dirais que vous ne devriez plus attendre. Faites-le.

En ce qui me concerne par exemple, j’ai passé le cap des 10 ans en monoboot sous GNU/Linux et si je devais me catégoriser je dirais qu’à l’heure actuelle je ne suis qu’un utilisateur final. Certes j’ai des connaissances un peu avancées dans le sens où par exemple, je connais la différence entre un gestionnaire de fenêtres et un environnement de bureau. C’est peut-être évident mais ne rigolez-pas, certains utilisateurs pensent encore qu’il s’agit la même chose! Plus globalement encore quand on me parle d’un truc ou l’autre sous GNU/Linux je sais à peu près de quoi il s’agit, même si dans les faits je ne comprend pas toujours comment ça marche. En tant qu’utilisateur final d’ailleurs je m’en fiche un peu, car l’essentiel pour moi c’est que ça tourne! Je suis également assez avancé pour ne pas avoir peur d’entrer quelques lignes dans une console, même si là encore je ne comprends pas toujours ce que je fais ou plus exactement, ce qu’il se passe. Une fois encore je m’en fiche un peu, du moment que ça tourne et que cela me semble safe. Il ne s’agit pas non plus d’entrer n’importe quoi et de tout flinguer comme un âne.

Bref, vous l’avez compris je ne suis pas un crack. J’utilise GNU/Linux au quotidien, c’est génial, je m’en sort parfaitement et quelque part je pense être assez bon voir même très bon, puisque après tout j’y suis depuis dix ans et que je n’en ai pas bougé. Sauf que non, c’est pas aussi simple que ça. Si je suis bon ou plus exactement si j’ai l’impression de l’être, c’est que des milliers de développeurs, de reporteurs de bugs, de testeurs, de traducteurs, de rédacteurs de docs etc, travaillent dans l’ombre (souvent bénévolement) pour que ça tourne et surtout, pour que cela soit simple pour moi.

Le résultat de ce travail fait que quand vous prenez une distribution grand public aujourd’hui, il suffit de la télécharger, de la coller sur un support bootable et de lancer le bouzin. Passé cette étape vous êtes pris en main par tout un ensemble d’outils et de scripts, conçus dans le but de vous permettre de procéder à une installation propre en seulement quelques clics. Les installeurs vont vous guider pas à pas, les GUI vont vous éviter d’entrer tout un tas de lignes de commandes, les fichiers de configurations sont écrits et mis à la bonne place, tout est déjà bien empaqueté et globalement, vous n’aurez plus qu’à effectuer quelques petits réglages pour mettre tout ça à votre sauce. Le plus dur dans une installation finalement, c’est de ne pas oublier de boire son kawa avant qu’il ne refroidisse.

Tout ça c’est bien, mais le revers de la médaille c’est que vous pourrez passer 10 sous GNU/Linux sans finalement connaître ne serait-ce qu’un peu le système que vous utilisez au quotidien. En tant qu’utilisateur final ça me convient la plupart du temps, mais j’avoue que j’ai toujours un peu regretté de ne faire que survoler les choses et de ne pas en savoir plus. C’est là qu’installer Archlinux pris du sens pour moi, dans la mesure où il allait falloir mettre les pattes dans le cambouis.

Alors que ce soit clair je ne vais pas détailler ici les étapes de mes séances d’installation, car cela ne vous apporterais rien et que ce n’est pas l’objectif de ce billet. Pour vous la faire courte là-dessus j’ai utilisé une Vbox, j’ai procédé à une install BIOS, j’ai pris une vieille image i686 (et oui je suis encore en 32 bits) et globalement j’ai du recommencer à peu près une dizaine de fois sur environ une semaine, avant d’en arriver à quelque chose de potable et à une installation à peu près complète. 

Ce qui a été super intéressant en revanche, c’est qu’en installant cette distribution j’en ai appris plus sur GNU/Linux en une semaine, qu’en 10 ans d’utilisation quasi passive. En effet avant je connaissais des outils ou des commandes tel(le)s que chroot, pwd, cfdisk, mkfs, mount, fdisk, mkinitcpio mkswap, etc, mais je ne les avais réellement utilisé(e)s qu’au travers d’interfaces graphiques, sans parfois même m’en rendre compte et sans chercher vraiment à comprendre ce qu’elle faisaient. Le fait de devoir les entrer à la main a réellement mis en évidence ce qu’elles faisaient, pourquoi elles le faisaient et pourquoi à ce moment précis. Alors bien entendu il y a des étapes logiques! Personne à priori n’arrivera jamais à installer quoi que ce soit sur une partition non formatée, ou qui n’est pas montée correctement. De ce côté là je n’ai pas découvert le feu. Non. En revanche le simple fait de procéder manuellement à un partitionnement, à un formatage, à la création d’un swap et de monter tout ça sois-même en comprenant ce que l’on fait et ce qu’il se passe, et bien c’est super cool. Après tout il s’agit là des fondations de notre système non? Ce n’est donc pas rien que de savoir les poser à la patte.

J’en ai appris également beaucoup plus sur la structure de mon système. Sur son arborescence (même si cela peut varier d’une distribution à l’autre), sur les modules qui font fonctionner tel ou tel composant système ou hardware, sur quand et où les installer etc etc… J’ai aussi appris à savoir où trouver et comment éditer tel ou tel fichier de configuration avec nano, afin de faire par exemple des trucs aussi cons que de passer le clavier en français, gérer l’horloge ou choisir les miroirs de téléchargement les plus rapides. En gros j’ai appris une foule de petites choses vraiment super intéressantes et devoir chercher d’où venaient les erreurs que je faisait s’est avéré tout aussi instructif.

Maintenant je peux dire que je connais vraiment beaucoup mieux le système que j’utilise au quotidien et j’en suis très satisfait car cela me sera sans doute utile un jour où l’autre. Je reste cependant lucide. Je sais bien qu’Archlinux n’est pas un système fait pour moi à l’heure actuelle et je suis bien conscient qu’il ne s’agissait là que de la première marche. La plus facile. Dans les faits je suis encore bien incapable d’administrer une telle distribution au quotidien, car il ne faut pas se le cacher c’est à ce niveau que ce situe la vraie difficulté. En revanche désormais je le sais, avec un peu de travail je peux finir par y arriver. Je sais aussi que même si je m’arrête en route, j’en sortirai moins bête et mieux armé pour maîtriser mon système. Dans tous les cas cette installation ça a été que du bon et c’est pour cela que je vous incite à en faire autant.

Gardez toutefois à l’esprit que je ne vous dis pas de tout larguer et de vous coller sous Archlinux hein! Je parle bien d’installation et non d’utilisation. Lancez-vous sur une vieille bécane ou dans une Vbox et n’ayez pas peur car au final vous allez-voir, ce n’est pas si compliqué. Techniquement je dirais même que c’est trois fois rien, mais ça apporte beaucoup. 

Alors si ça vous avez l’impression d’avoir raté votre vie de GNU/Linuxien, vous pouvez vous lancer en vous appuyant sur l’excellent guide d’installation mis à disposition et maintenu par Tonton Fred. Celui-ci constitue une très bonne base pour commencer et devrait s’avérer suffisant pour que vous arriviez à finaliser votre installation sans trop de problèmes.

Si cela ne suffit pas vous pouvez également vous appuyer sur le wikiArch du site officiel francophone. Vous y trouverez tout le reste.

Amusez-vous bien et bonne install!

Gravatar de La vache libre
Original post of La vache libre.Votez pour ce billet sur Planet Libre.