Gestion des services
Vous trouverez ici décrites les différentes étapes du cycle de vie d'un service, de la décision de sa création à sa fermeture en passant par sa maintenance.
Création, installation, déploiement
Conditions d'ouverture
Avant de penser à ouvrir un nouveau service, il faut s'assurer d'avoir un objet unique et précis qui corresponde à un besoin très concret. Il faut donc vérifier que le service auquel on pense ne fasse pas entièrement ou en partie doublon avec un autre, ou qu'il ne puisse pas être intégré à une autre unité existante, ou inversement. Une fois ces conditions vérifiées, il faut effectuer les étapes suivantes dans l'ordre :
- Ouvrir une issue dans https://git.felinn.org/FELINN/asso en utilisant le modèle « création de service ». Le titre doit adopter le format « [service : création]
{{ nom de l'unité concernée }}» et la description doit détailler le besoin et l'objectif. - L'issue doit être approuvée au niveau CC-CP-V dans le cas d'un service en production et CC-CV-V dans le cas d'un service en test ou d'un VPS.
- Si approuvée, l'issue doit donner lieu à la création de l'unité. L'issue ne peut être fermée que lorsque les décisions suivantes ont été prises :
- un·e ou des membres responsables de son administration
- mise place des permissions
- domaine à appliquer au service :
{{ service }}.felinn.orgpour les services en production (FELINN core){{ service }}.labs.felinn.orgpour les services en test (FELINN labs){{ nom }}.{{ domaine }}pour les VPS
- type de virtualisation :
LXCpar défaut pour les services de la FELINNKVMuniquement s'il y a besoin d'isoler le noyau (par exemple en cas d'accès root pour des personnes extérieures)
- ressources allouées
- logiciel pour le service en question:
- libre de préférence, open source au minimum (la différence est notamment expliquée ici)
- bien maintenu
- avec une communauté active
- léger
- dans le cas d'une
KVM, le nom d'hôte (hostname) et lelogin(nom d'utilisateurice régulier) désirés
Création de l'unité
- Sur container LXC
- Sur machine virtuelle KVM
En complément du protocole ci-dessous, ne pas hésiter à consulter la documentation officielle de notre hyperviseur Proxmox.
- Se loguer en @(ssh) sur felinn.org et mettre à jour les images disponibles avec
pveam update(ou vérifier que les images sont à jour). - Télécharger la dernière image disponible et stable de Debian (ou de la distribution désirée), visible sur l'interface PVE dans
storage (local)ou avec la commandepveam available | grep debian. Les images sont enregistrées dans/var/lib/vz/template/cache/. S'il y a une version plus à jour, télécharger l'imagesystemavecpveam download local debian-{{ version }}.tar.gzet pensez à supprimer les images obsolètes. - Créer un container (
Create CT) sur l'interface PVE (ou ensshavec la commandepct) avec les paramètres suivants (laisser par défaut ce qui n'est pas précisé) :
GeneralCT-IDpar défaut (le plus bas disponible). À partir de 100 pour les services FELINN et 200 pour les autres.Hostnamenom du service complet (avec URL) tel que décidé dans l'issue dédiéeRessource poolFELINN-core, FELINN-labs ou VPS en fonction du type de service choisiPasswordle créer dans le répertoirepassde la FELINN (voir la documentation dédiée) avecpass generate -c FELINN/{{ hostname }}/root. Cette commande génère et copie dans le presse papier pendant 45sec.
Template: choisir le dernier template debian (ou autre OS téléchargé) stableRoot disklocal-zfs- capacité en fonction de ce qui a été décidé (utiliser des puissances de 2, c'est la tradition 😆)
CPU: en fonction de ce qui a été décidé (il est possible de mettre plus de cœurs juste le temps de l'installation pour aller plus vite )Memoire- en fonction de ce qui a été décidé (il est possible de mettre plus de mémoire juste le temps de l'installation pour aller plus vite !)
- SWAP = RAM
NetworkIPv4192.168.10.{{ pct_id }}/24si c'est un serviceFELINN core192.168.20.{{ pct_id }}/24si c'est un service VPS pour isoler les deux sous-réseaux
Gateway:192.168.10.1ou192.168.20.1en fonction de si c'est un serviceFELINN coreouVPSConfirmation, bien relire et vérifier !- vous pouvez lancer le container
- Entrer dans le container en
sshavec la commandepct enter {{ pct_id }}. - Nettoyer l'installation debian et installer les outils cool de base avec ce snippet.
- Vérifier que la TMZ est bien paramétrée sur
Europe/Paris - Vérifier que les
localespar défaut sont bien paramétrées enEN_US.utf8 - De préférence, activer
zshavecchsh: choisir/bin/zsh
En complément du protocole ci-dessous, ne pas hésiter à consulter la documentation officielle de notre hyperviseur Proxmox.
Pour simplifier la procédure qui suit, il existe un template basé sur Debian pour les VM accessibles dans proxmox avec le nom VM-TEMPLATE. Il suffit de cloner le template et de modifier en fonction des besoins.
Assurez vous d'avoir préalablement récupéré toutes les informations nécessaires avant de vous lancer dans l'installation.
Pour créer une VM « from scratch », suivre les indications suivantes :
Depuis l'hôte : télécharger la dernière image disponible et stable de Debian (ou de la distribution désirée), visible sur le site officiel (ici de Debian).
Sauf validation d'un option contraire lors de la décision de la création du service, il est préférable d'utiliser une image légère de type netinst.
Les images sont enregistrées dans /var/lib/vz/template/iso/. S'il y a une version plus à jour, télécharger l'image avec wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-{{ version }}-amd64-netinst.iso et pensez à supprimer les images obsolètes.
Créer une VM (Create VM) sur l'interface PVE (ou en ssh avec la commande qm) avec les paramètres suivants (laisser par défaut ce qui n'est pas précisé ci-dessous) :
GeneralVM-IDpar défaut (le plus bas disponible). À partir de 100 pour les services FELINN et 200 pour les autres.Namenom du service complet (avec sous-domaine) tel que décidé dans l'issue dédiéeRessource poolFELINN-core, FELINN-labs ou VPS en fonction du type de service choisi
OSUse CD/DVD disc image file (iso)choisir le dernier iso debian (ou autre OS téléchargé) stableGuest OSdécrire le type d'OS utilisé
System: laisser par défautHard Disklocal-zfs- capacité en fonction de ce qui a été décidé (utiliser des puissances de 2, c'est la tradition 😆)
CPU: en fonction de ce qui a été décidé (il est possible de mettre plus de cœurs juste le temps de l'installation pour aller plus vite !)Memoire: en fonction de ce qui a été décidé (il est possible de mettre plus de mémoire juste le temps de l'installation pour aller plus vite !)NetworkMAC address: générer une adresse MAC avececho {{ $FQDN }}|md5sum|sed -E 's/^(..)(..)(..).*$/68:e1:66:\1:\2:\3/'ou laisser enauto
Confirm: bien relire et vérifier
✅ Vous pouvez lancer la VM
Il faut désormais installer et configurer la distribution.
Entrer dans la VNC de la machine virtuelle via l'interface web de PVE en cliquant sur le nom de la VM dans le menu de gauche, puis >_ Console. Cette action ouvrira une fenêtre pop-up d'un terminal de la machine (noVNC par défaut).
Si on a affaire à Debian, voici la configuration de préférence :
- l'installation classique (la non graphique) est plus légère
Englishcomme langue pour avoir les manuels d'origine.OtherdansCountrypour éviter les problèmes de comptabilitéFrançaispour le keymap (peu d'importance dans la mesure ou aucun clavier ne sera réellement branché dessus 😆)DNS name serverutiliser les serveurs DNS de la FDN- le nom d'hôte désiré par la personne (physique ou morale) responsable de la VM
- le FQDN pour le nom de domaine
- générer pour
rootun mot de passe aléatoire de 8 caractères de long le temps de l'installation pour pouvoir l'écrire directement dans la VNC (cf. le tuto sur pass). full namele pseudo désiré par lae futur·e admin- générer pour l'utilisateurice un mot de passe aléatoire de 8 caractères de long le temps de l'installation pour pouvoir l'écrire directement dans la VNC.
Europedans continentfrancedans country (la deuxième fois lorsque ce choix est disponible)en_US.UTF-8en configuration deslocalespar défaut- le chiffrement de la partition montée sur
/implique de connaitre la phrase de passe pendant la séquence de boot. Dans certains cas, il est plus intéressant de chiffrer uniquement la partition avec les données sensible. À discuter avec l'administrateurice responsable de la VM. - LVM est un bon choix car on peut modifier la taille de la partition sans redémarrer la machine virtuelle (voir notamment la doc proxmox à ce sujet)
- ne pas scanner de CD ou DVD additionnel
- comme la VM n'est pas encore connectée,
Go backpour poursuivre l'installation sans choisir de miroir - il n'y a pas de proxy pour les connexions sortantes
- installer GRUB sur la seule partition proposée
- se loguer en root dans le VNC
- éditer le fichier de configuration réseau debian
vi /etc/network/interfacesavecnanopour configurer l'interfaceens18ou équivalente
auto lo
iface lo inet loopback
auto ens18
iface ens18 inet static
address 192.168.20.100
netmask 255.255.255.0
gateway 192.168.20.1
- lancer la commande
systemctl restart networkingpour prendre en charge la nouvelle configuration réseau - tester la connexion avec la commande
ping felinn.org
- ajouter le miroir de Rezopole dans
/etc/apt/sources.list:
# […]
deb http://ftp.rezopole.net/debian buster main contrib
deb-src http://ftp.rezopole.net/debian buster main contrib
- faites les mises à jours avec :
apt update && apt full-upgrade
- installer OpenSSH sur la VM invitée
apt install openssh-server
# vérifier que le service est lancé
ss -tunlp
- autoriser sur la VM invitée une connexion SSH en root avec mot de passe dans
/etc/ssh/sshd_config:
# […]
# PermitRootLogin prohibit-password
PermitRootLogin yes
# […]
-
appliquer la nouvelle configuration en relançant le service:
service ssh restart -
configurer une règle NAT sur l'hôte sur un port alternatif libre dans
/etc/conf.d/nat/nat.conf:
#=== SSH ===#
# […]
77.95.64.26:1822 192.168.20.205:22
# ↑port ↑VM-ID
-
recharger la configuration NAT avec
run-nat.sh -
ouvrir une connexion SSH depuis l'extérieur avec
ssh -p 1822 user@77.95.64.26
Dès que l'accès SSH est établi, il est possible de copier/coller des mots de passe compliqués. Il faut le faire pour root et le nom de l'utilisateurice.
Le mieux est d'ajouter l'utilisateurice au groupe admin avec sudo, d'ajouter une authentification par clé RSA et de désactiver le login root en SSH.
Si un enregistrement DNS A pointe vers l'IP de la FELINN 77.95.64.26 pour le domaine dédié à la VM, il est possible de se connecter avec la commande ssh -p 1822 root@domain.tld.
Pour ne plus avoir à préciser le port, il est possible d'ajouter le port alternatif à la configuration du client SSH en local sur votre machine dans $HOME/.ssh/config:
Host domain.tld
Port 1822
Pour rendre un service web sur la VM accessible depuis l'exterieur, consulter la section sur le reverse-proxy.
Installation du service
Cette section et les suivantes ne sont obligatoires que pour les services de la FELINN. Pour les VPS, chacun·e est responsable de la gestion de son service. Mais nous vous encourageons tout de même à vous inspirer de ce qui suit !
RTFM pour être sûr d'installer uniquement ce qui est nécessaire ! Si besoin, suivre des tutoriels non officiels. Ceux de DigitalOcean par exemple sont souvent des références pertinentes. Quelques bonnes pratiques en vrac :
Permissions
Pour les services web, il faut bien faire attention à les faire tourner en user:group www-data ou équivalent et jamais en root, ainsi que l'installation dans la mesure du possible.
Arborescence
- Par convention, l'installation des services web se fait dans
/var/www/{{ hostname }}. - Si le code est téléchargé à la main, il est possible de faire un lien symbolique :
/var/www/foo.felinn.org -> /var/www/code-v1.23, ça permet de simplifier les mises à jour.
Base de données
- utiliser
postgresqlde préférence pour les performance,mariadbsinon,sqlite3en dernier recours s'il s'agit d'un service très léger et statique mysqlest remplacé parmariadb- penser à changer le mot de passe
rootet à créer unuserdédié avec des mots de passe générés avecpass