====== l'Aventure du grille pain ====== Ou le nouveau serveur maison. Je remplace quelques années d'empilage de services et de serveurs, plusieurs machines qui se chargent des messageries, sites, ressources, organisations etc pour ma famille et quelques associations par une seule nouvelle machine!\\ Un T-BAO R3 Pro Mini PC, AMD Ryzen 7 5700U 8 Cores 4.3GHz, 16GB DDR4 RAM 512GB SSD, HDMI+DP+Type-C Triple 4K Display, WiFi 6 Bluetooth 5.2, 2*USB3.0 2*USB2.0 2*2.5G RJ45 Ports 1*3.5mm Audio Jack, Dual-fan Cooling. Qui ressemble à un grille pain. {{:t-bao-r3-pro-mini-pc-amd-ryzen.jpg?400|}} Cela va me permettre de passer des bons 80W du tout à moins de 20W, gagner de la place et me faciliter la maintenance, sans compter le gros gain de rapidité. Un saut véritable dans le temps, je n'utilisais que de la récup... ici c'est plutôt de l'investissement pour 10ans. L'installation est surdimentionnée pour des services de bases mais je n'aurais plus de reflexion sur le temps d'attente de nextcloud et nous sommes maintenant deux à tester pas mal de trucs, ces ressources seront un confort anti-stress non négligeable.\\ La partie humaine fait aussi partie de l'approche écolo... Pour un bon début , plutot qu'un Raspberry pi 5 + carte pour SSD + SSD , ou une récupération de PC de bureau, bien plus rapide et consommant autant voir moins de 10W il y a sur le marcher aussi des T-BAO N100 250Go/8Go pour 130€. Pour un auto-hebergement plus simple voir juste un Yunohost, c'est peut être une bonne idée. L'installation héberge tout un tas de service pour plusieurs associations, je prévois: * une séparation en plusieurs VM&conteneurs pour faciliter la maintenance, sauvegarde/restauration * une possibilité de migration des différents services vers d'autres serveurs, auto?hébergeurs pour gagner en autonomie, une sorte de ruche pour après tests essaimer des petites installations de Yunohost. * une gestions par association/groupe pour viser à plus d'autonomie, et donner l'administration à d'autres. * en bref pouvoir me séparer de l'hébergement associatif pour déplacer et le passer à d'autres * y ajouter un peu de domotique, suivi des consommations... * y greffer quelques une de mes installations artistiques pour pouvoir vivre un peu avec. * faire de façon saine tout un tas de tests sur des machines virtuelles pour répondre aux sollicitations extérieures (nous sommes deux à développer). Dans l'idéal ,plus tard, ce serveur pourra fonctionner sur un panneau solaire avec une simple adsl ou une liaison 4G pour être autonome à la campagne et participer à une émancipation technique plus grande d'autres personnes ou groupes... Je participe en parallèle à une démarche un peu similaire mais peut être moins radicale sur un projet nommé [[https://hentou.cc|Hentoù]] (le chemin en Breton) avec Bretagne Transition dans le pays de l'Aven... et je maintient un petit atelier sur le sujet : https://minyhack.kerminy.org/ressources:serveur_ovh_hentou Ici, je n'utilise pas les services d'un hébergeur (OVH) en me chargeant moi-même de cela. Ce qui simplifie la structure et surtout rend l'installation bien plus aisée à maintenir. J'accède à tout depuis l'arrivée de la box (fibre pour moi), disques, USB, réseau etc\\ Ce qui m'oblige aussi à sécuriser, câbles, sauvegardes, alimentation, accès , mais ce n'est pas plus mal. **le schéma des réseaux** Grille Pain .------------. .------------------------------------------------------------. |[1] | | .--Proxmox----------------------------------------------. | | BOX OVH | | | | | | +------------>+-+ino0. | | | transfert | | | | iptable http;https;ssh | | | ports | | | | #--------------# | | | 80/443 |IP V4/V6 | | | |[IPFire] | | | | etc |192.168.1.1 | | +-- vmbr0 -----------+ 192.168.1.254| | | | WIFIbis | | | | 192.168.1.2 | 192.168.3.254+- vmbr2+ | | 192.168.3.0 '-----+------' | | | | | | (DHCP) | | .-----------. | | | | | | | | | | |[3] | +-> | | '-- vmbr1------+-----+ 192.168.5.254| +-ino1--+--+----| MAISON +- | | 192.168.5.1 #--------------# | | | | LAN PC +- | | #--------------# | | | | WIFI +- | | |[2] LXC | | | | '-----+-----' | | + Reverseproxy +----------+ | | | | | | 192.168.3.253| | | | +-> | | #--------------# | | | | | #--------------# | | | | | |[2] DNS proxy | | | | | | + VM PiHole +--------+ | | | | | 192.168.3.13 | | | | | | #--------------# | | | | | #-----------------# | | | | | |[3] Fichiers NFS | | | | | | | LXC Alpine +---+ | | | | #-----------------# | | | | | #-----------------# | | | | | |[3] medias local | | | | | | |vidéos,sons,txt +---+ | | | | | appli YNH | | | | | | #-----------------# | | | | | | | | | | #---------------# | | | | | |[2] cumulus | | | | | | + LXC nextcloud +--------+ | | | | #---------------# | | | | | | | | | | #---------------# | | | | | |[2] mail IMAP | | | | | | + LXC nethserver+--------+ | | | | | 993,557 | | | | | | #---------------# | | | | | | | | | | | | | | | | | | | | #---------------# | | | | | |[2] ynh1 | | | | | | + LXC yunohost +-----+ | | | | | sites/... | | | | | | #---------------# | | | | | | | | | | | | | | | | | | | | #---------------# | | | | | |[2] ynh2 | | | | | | + LXC yunohost +-----+ | | | | | services... | | | | | | #---------------# | | | | | | | | | | - - -+ | | | | +--+---> USB DD Backup | | | | | .-------------------------------------------------------. | '------------------------------------------------------------' [1]: {"fill":"#ff0000","a2s:type":"cloud","a2s:delref":true} [IPFire]: {"fill":"#ff0000"} [2]: {"fill":"#008000","a2s:delref":true} [3]: {"fill":"#008000","a2s:delref":true} en prévision , un réseau orange/DMZ sur 192.168.5.0 ... non utiliser pour le moment ====== Mise en place ==== * modification du bios en légacy pour booter sur une cléUSB * Installation de proxmox 8.1 a partir de l'iso https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso posé sur la clé * paramétrage dans l'installation , domaine principal , ip 192.168.1.2 , mail, node:prox * après le premier reboot * modif DNS du node prox en 127.0.0.1:192.168.1.1;1.1.1.1 * j'ai aussi une tartine dd présente déjà partitionnée,formatée * modif /etc/fstab en ajoutant le UUID (faire blkid) #/dev/sda2: UUID="03aaf4ae-b616-46ad-9ae9-1a6d448d20ce" /mnt/DD4T2 ext4 defaults 0 1 #/dev/sda3: UUID="e1e0930c-13f7-411d-9f8a-e020d6f32a55" /mnt/DD4T3 ext4 defaults 0 1 #/dev/sda1: UUID="397a7984-4043-4c10-8717-4a326684068e" /mnt/DD4T1 ext4 defaults 0 1 * le mount doit fonctionner pour l'accès à mes nouvelles partitions * ajout dans Datacenter/Storage les partitions en type directory ==== post install ==== cf tteck pour proxmox , ajustage des dépots à partir de la console du node prox, tout est validé, reboot... bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)" ==== mise en place réseaux ==== /etc/networks/interfaces auto lo iface lo inet loopback iface eno1 inet manual iface enp3s0 inet manual auto vmbr0 iface vmbr0 inet static address 192.168.1.2/24 gateway 192.168.1.1 bridge-ports eno1 bridge-stp off bridge-fd 0 #WAN iface wlp4s0 inet manual auto vmbr1 iface vmbr1 inet static address 192.168.5.1/24 bridge-ports none bridge-stp off bridge-fd 0 #LAN1 DMZ auto vmbr2 iface vmbr2 inet static address 192.168.3.1/24 bridge-ports enp3s0 bridge-stp off bridge-fd 0 #LAN2 On fera pointer la box sur le firewall, transfert de port 80,443,... sur 192.168.2.254\\ qui a son tour délivrera http;https au site par le reverseproxymanager 192.168.2.253 ==== Création d'utilisateur ==== Pour donner accès à l'administration ciblée, certaine VM/LXC par ex apt install sudo # création de l'utilisateur useradd -m USERNAME # mot de passe passwd USERNAME # ajout dans le groupe sudo gpasswd -a USERNAME sudo # ssh mkdir /home/USERNAME/.ssh touch /home/USERNAME/.ssh/authorized_keys chmod 600 /home/USERNAME/.ssh/authorized_keys chown USERNAME:USERNAME /home/USERNAME/.ssh/authorized_keys # Placer ensuite le contenu de vos clés publiques SSH dans ce fichier # ou avec: sur mon pc linux ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub user@ip ssh 'user@ip ' # fonctionne ==== Restriction de l'accès proxmox ==== pour n'accéder qu'a travers le réseau local , ssh ou tailscale:\\ Création du fichier de configuration pour restreindre l'accès à l'interface Web de Proxmox, on autorise seulement ce qui vient vmbr2 192.168.3.xx ou une entrée locale 127.0.0.1 . Mais on garde le port 8006\\ vi /etc/default/pveproxy Insérer le contenu suivant: DENY_FROM="all" ALLOW_FROM="127.0.0.1,192.168.3.0/24" POLICY="allow" Relancer le service\\ sudo service pveproxy restart ==== No root login ==== On change le port du ssh vers un port non standard genre 7422 .\\ On fera le transfert de port dans IPFire pour passer.\\ Faire la modification du fichier /etc/ssh/sshd_config , vi ou nano pour invalider l'accès root et ouvrir le ssh sur un autre port que le 22, pour nous 7422 vi /etc/ssh/sshd_config # vi ou autre éditeur nano ? # Modifier ensuite les lignes suivantes du fichier Port 7422 PermitRootLogin no Relancer ensuite le service SSH qui sera maintenant accessible avec notre utilisateur : USERNAME service ssh restart ou mieux un reboot de Proxmox complet pour voir si tout est bon... penser qu'au cas ou on a plus le ssh en directe sur ce nouveau port:... ssh -p7422 USERNAMEt@domaine.xx -L 8006:127.0.0.1:8006 cad un ssh port 7422 passe à travers vmbr0/vmbr1 sur IPFire (regle iptable du Proxmox) qui fait un tunnel vers le Proxmox (regle de transfert de port de ce firewall) ou avec tailscale ssh USERNAME@domaine.xxtailsscale -L 8006:192.168.5.1:8006 cad ssh a travers tailscale vers la machine domaine.xxtailscale qui fait le tunnel sur l'interface web du Proxmox https://localhost:8006 # pour firefox et l'accès au PVE ===== Firewall IPFire ===== Tout doit entrer sur le firewall...\\ Après tests, IPFire semble le plus simple à mettre en place... suivre ses documention d'install * https://www.zenarmor.com/docs/network-security-tutorials/ipfire-installation * dans le PVE storage DD4T2 pour moi upload la dernière iso (qui peut changer cf https://www.ipfire.org/ ) https://downloads.ipfire.org/releases/ipfire-2.x/2.27-core182/ipfire-2.27-core182-x86_64.iso Pour l’installation: Le réseau GREEN/Vert est la vmbr2 ip=192.168.3.254/24 avec un DHCP actif Le réseau RED/rouge est la vmbr0 ip=192.168.1.3/24 gateway 192.168.1.1 Orange vmbr1 192.168.5.254/24 **On y accede 192.168.3.254:444 en etant sur le LAN** On pourrait y accèder ensuite avec un tunnel ssh: (root ou l'utilisateur admin principal, sur le port 444 d'IPFIre) ssh root@37.187.XX.XX -L 8445:192.168.3.254:444 https://localhost:8445 # firefox On y fera la création de règles de transfert de ports: * http:80 et https:443 vers le LXC 192.168.3.2: reverse-proxy manager * 7422 vers le ssh 7422 de Proxmox ==== backup ==== Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation… ===== ReverseProxyManager ===== Le reverse-proxy permet la déclaration des certificats Let'sEncrypt, des noms de domaines de nos machines;services (et future) pour ventiler les renvois http;https sur le réseau interne orange (192.168.5.0/24 vmbr1) Doc: https://nginxproxymanager.com/guide/ Installation de https://tteck.github.io/Proxmox/, on installe une LXC avec Nginx Proxy Manager\\ Dans une console sur le node bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginxproxymanager.sh)" Choisir vmbr2, une ip fixe 192.168.3.253/24 gateway 192.168.3.254 **le premier accès sera sur 192.168.2.253:81** \\ Email: admin@example.com\\ Password: changeme Mais si on est à l'extérieur (sur le net) ssh -p7422 root@domaine.xx -L 8081:192.168.3.253:81 ou avec tailscale ssh root@hdomaine.xxtailsscale -L 8081:192.168.3.253:81 https://localhost:8081 # pour firefox ajout de python3-certbot-dns-ovh ==== petit ménage ==== oublié par le paramétrage de la LXC? en tout cas faire: yarn cache clean # ? pas sur derniere version pkg clean nvm cache clear ==== Ajout d'un utilisateur sudo/admin ==== pour ne pas avoir d'utilisateur root adduser USERNAME # valider et donner un pass (qu'on sauvegarde!!) (penser keepass) usermod -aG sudo USERNAME ==== Paramétrage ==== - création des certificats des sites locaux - juste en chalenge DNS, pas besoin d'autre chose - création des hôtes - sites locaux pour pointer vers 192.168.3.XXX - ex pour yunohost.moi.org - wiki1.moi.org pointe aussi vers 192.168.3.XXX (géré par yunohost qui s'en charge) - etc ==== backup ==== Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation… ===== Vision nom de domaine ===== En résumé du coté des noms de domaine Grille Pain .------------. .----------------------------------------------------. |[1] | | .--Proxmox--------------------------------------. | | |*.domaine.xx | | #-----------------------------# | | | DNS | | | |[1] ipfire.domaine.xx | | | .--------. | Net OVH +------------>+-+----+--> FIREWALL (192.168.3.254) +------------+--+-+-> LAN =+==> local | BOX | | | | Passerelle | | | '--------' | | | | #-----+-----------------------# | | '------------' | | | | | | | +---------------------. | | | | | | | | | | #-----+----------# #----+------------# | | | | |[2] | |[2] pihole DNS | | | | | | Reverseproxy | | (192.168.3.13) | | | | | | (192.168.3.253)| #---+-------------# | | | | #-------+--------# | | | | | +------------------. | | | | +-------' | | | | | #--------------------# | | | | | |[2] ynh1.domaine.xx | | | | | +-+ 192.168.3.101 #-----------------. | | | | | | wiki1.domaine.xx | | | | | | | truc1.domaine.xx | | | | | | | applixxgroupe1.domaine.xx| | | | | | | autreapli.autredomain.xx | | | | | | #--------------------------------------' | | | | | #--------------------# | | | | | |[2] ynh2.domaine.xx | | | | | +-+ 192.168.3.103 #-----------------. | | | | | | wiki2.domaine.xx | | | | | | | truc2.domaine.xx | | | | | | | applixxgroupe2.domaine.xx| | | | | | | autreapli.autredomain.xx | | | | | I #--------------------------------------' | | | | | #--------------------# | | | | | |[3] medias.local | | | | | +-+ 192.168.3.nnn #-----------------. | | | | | | ampache jellyfin | | | | | | | prowlarr/radarr/lidarr/readarr | | | | | | | transmission | | | | | | | fichier.local en NFS/SMB | | | | | I #--------------------------------------# | | | | | #--------------------------------------# | | | | | +[2] nextcloud.domaine.xx | | | | | | | fichiers/agendas/etc | | | | | I #--------------------------------------' | | | .-----------------------------------------------. | '----------------------------------------------------' [1]: {"fill":"#ff0000","a2s:type":"cloud","a2s:delref":true} [2]: {"fill":"#008000","a2s:delref":true} [3]: {"fill":"#008800","a2s:delref":true} les DNS sont gérés par la pihole (192.168.3.13).\\ Pihole permet d'adresser en local les machines de notre réseaux, plutot que de partir vers le DNS du FAI puis de revenir avec une ip généraliste, les requêtes obtiennent une ip 192.168.3.xx sans sortir de notre zone. Plus rapide,pratique,sécure... Après expériencessss je suis revenu à utiliser pour le partage des données en local une simple **Alpine en LXC privilégiée** avec un serveur NFS (et Samba)\\ Ce qui est très pratique , il suffit d'ajouter dans les fstab des machines devant accéder 192.168.3.XX:/MEDIAS /MEDIAS nfs defaults,user,exec 0 0 Mais qui demande à ce que les LXC soient en privilégiées pour ouvrir les options dans le PVE NFS,CIFS Et donc tout mes fichiers multimedias sont gérés par une Yunohost avec les application Jellyfin,Prowlarr/Radarr/Sonarr/Readarr/Transmission ... Les données sont sur un disque séparé, je ne sauvegarde que les répertoires de données personnelle, pas ce qui vient de la pêche torrent. ===== Hébergement premier groupe ===== J'installe un Yunohost pour rendre le groupe un peu plus autonome et pouvoir faire un éventuel transfert Sur la console du PVE bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/yunohost.sh)" se connecter sur l'ip donnée avec le navigateur pour terminer l'installation Une fois que la post-installation est terminée et que tout marche en root sur ce LXC, ajout d'un php 8.2 sudo apt install lsb-release apt-transport-https ca-certificates software-properties-common -y sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' sudo apt update sudo apt install php8.2 ynh1.domaine.xx, sera l'accès général, peut être prévoir un⋅e admin par groupe? Dans chaque YNH on installera les applications sans se soucier des certificats puisque il sont gérés par ReverseProxyManager.\\ On ne chargera pas non plus YNH de mettre à jour le DNS *.mondomaine.truc ! mais seulement les domaines du groupe Chaque YNH, groupe, se chargera de la gestion de ses propres utilisateurs⋅trices, des accès aux différents services. Si il est besoin de port particulier,il faudra les ajouter aux regles du Proxmox et à IPFire. Par exemple prévoir le routage des messageries/mail MX et autres ===== Récap création ===== d'un site/appli dans un des Yunohost par ex - faire une info DNS dans pihole (et un host sur ipfire ) - s'assurer que le dns (du FAI) pointe bien vers son domaine (ovh?) ,ip extérieur de la box - modifier dans nginxproxymanager http://192.168.3.253:81/nginx/proxy ou créer le host pour pointer vers la bonne ip interne genre 192.168.3.101 (celle du ynh) , choisir let's encrypt sans chalenge - y forcer le ssl - se connecter sur son ynh?. - y creér le bon domaine , ne pas s'occuper des certificats - poser son appli - pph8.2,8.1,8.0,7.4 ...ok - my_weapp pour un site banal php/mysql ou pas on peut choisir le php - si il y besoin d'un port particulier , ajouter une règle au firewall ipfire, nat,port,ip En local un accès navigateur https://truc.mondomaine me demande de valider l'absence de certificat, ce qui me semble normal puisque j’accède directement hors internet, donc auto-signé. Depuis l'extérieur pas de pb nginxproxymanager signe pour lui. Yunohost fonctionne à merveille, j'installe pour chaque site dokuwiki,my_webapp-code html hugo),spip,bludit , etc. [[ https://github.com/YunoHost-Apps/bludit_ynh|Bludit]] est un bon CMS simple sans base de donnée, qui donne la main rapidement au futur admin de la machine et des sites, il ne prend que 40Mo dans le répertoire, on peut l'installer autant de fois qu'on veut, soit en sous domaine soit plus simplement en sous répertoire. ;-) ====== Trucs en plus ===== ===== ajouts ===== ==== consommations ==== ===des espaces disques=== J'ai eu la surprise de voir le disque alloué a la LXC revereproxymanager fondre ...les log dans /data/logs prenant tout l'espace.. et provocant des bugs dans toutes les transactions genre NS_ERROR_NET_PARTIAL_TRANSFERT dans les navigateurs, ceux-ci ne recevant que des bouts de page.\\ La solution est - de vider ce répertoire /data/logs - modifier /etc/logrotate.d/nginx-proxy-manager en commentant "su npm npm" et en changeant le weekly par "daily" et "rotate 2" (il est appelé tous les 2 jours...) - de supprimer aussi le journal system /var/log/journal et de le limiter en parametrant /etc/systemd/journal.conf avec "SystemMaxUse=1M" et "SystemMaxFileSize=1M" - de modifier les fichier nginx.conf pour changer les log de "warm" en "alert" Mon disque utilise 1.8Go Je vais faire une alerte de disque presque plein ... cat < 90) print "Alert "$0;}' | mail -s "Alerte disque presque plein 101" moi@blabla.org df EOF ou pour tous les lxc #!/bin/bash set -x rm /tmp/mailgep # test espace disque restant for idlxc in ` pct list | awk 'NR == 1 {next} {print $1 }' ` do cat < 40) { print "Alert "$0 } ;}' >> /tmp/mailgep df EOF done if [ -s /tmp/mailgep ]; then cat /tmp/mailgep | mail -s "Alerte disque" moi@moimoi.org fi exit 0 a mettre dans le cron (cron -e) genre 0 23 * * * pour tous les soir 23h... ===== Transfères de boite mail IMAP ===== j'utilise imapsync sur la maéine cible pour récupérer mes boites et ses répertoires. * il faut pensez aux contacts, ça se fait directement dans roundcube ou SOGo par export/import fichier ical imapsync --host1 192.168.3.10 --user1 "gentiuser" --password1 "Coollepass" --ssl1 \ --host2 localhost --user2 "gentiuser" --password2 "Coollepass" --ssl2 \ --subscribeall marche nickel ... ===== Et des peut-êtres ===== * ne pas avoir de firewall ni de reverseproxymanager, juste une bonne configuration de Proxmox 8 * il gère les certificats * il gère les DNS * on peut faire des règles de firewall par VM/LXC et du coup pour les Yunohost leur confier leur part de gestion directe des DNS.( créer un nouveau site, un sous domaine, mettre à jour le dns chez ovh/gandi etc) * cela économiserait 2 VM et des manipulations sur le réseaux pas forcement simples. * MAIS on oubli le coté graphique et 'simplificateur' du coup d'IPFire Cela serait peut-être envisageable , la box filtre déjà un peu, et Yunohost,Nethserver(mail) sont bâtis pour un certain niveau de sécurité qu'on pourrait juger suffisant de façon indépendant ?