« Organigramme d'installation » : différence entre les versions
| Ligne 60 : | Ligne 60 : | ||
bavarder() { | bavarder() { | ||
local message="$1" | |||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE" | |||
} | } | ||
| Ligne 73 : | Ligne 73 : | ||
<nowiki>#</nowiki> Boucle pour lancer les mises à jour et rediriger toute la sortie de la boucle | <nowiki>#</nowiki> Boucle pour lancer les mises à jour et rediriger toute la sortie de la boucle | ||
{ | { | ||
for container in "${container_array[@]}"; do | |||
bavarder "--- Début du traitement du conteneur : '$container' ---" | |||
config=$(lxc config show "$container") | |||
if echo "$config" | grep -iq "alpine"; then | |||
bavarder "Le conteneur '$container' semble être basé sur Alpine." | |||
is_running=$(lxc list --format csv | grep "^${container}," | grep ",RUNNING,") | |||
if [ -n "$is_running" ]; then | |||
bavarder "Le conteneur '$container' est en cours d'exécution, lancement de la mise à jour..." | |||
lxc exec "$container" -- sh -c "apk update && apk upgrade --available" | |||
result=$? | |||
if [ "$result" -ne 0 ]; then | |||
bavarder "Erreur lors de la mise à jour de '$container'." | |||
fi | |||
else | |||
bavarder "Le conteneur '$container' n'est pas en cours d'exécution, mise à jour ignorée." | |||
fi | |||
else | |||
bavarder "Le conteneur '$container' ne semble pas être basé sur Alpine, mise à jour ignorée." | |||
fi | |||
bavarder "--- Fin du traitement du conteneur : '$container' ---" | |||
done | |||
} >> "$LOG_FILE" 2>&1 | } >> "$LOG_FILE" 2>&1 | ||
| Ligne 104 : | Ligne 104 : | ||
<nowiki>#</nowiki> Vérifier s'il y a eu des erreurs et envoyer un e-mail si c'est le cas | <nowiki>#</nowiki> Vérifier s'il y a eu des erreurs et envoyer un e-mail si c'est le cas | ||
if grep -q "Erreur" "$LOG_FILE"; then | if grep -q "Erreur" "$LOG_FILE"; then | ||
cat "$LOG_FILE" | mail -s 'Rapport de mise à jour LXC - Erreurs détectées' "$EMAIL_DESTINATAIRE" | |||
fi | fi | ||
exit 0 | exit 0 | ||
L'envoi des mails nécessite l'installation de mailutils et ssmtp : | L'envoi des mails nécessite l'installation de mailutils et ssmtp : | ||
# apt-get install mailutils ssmtp | |||
Configuration de ssmtp : | |||
# vi /etc/ssmtp/ssmtp.conf | |||
# | |||
# Config file for sSMTP sendmail | |||
# | |||
# The person who gets all mail for userids < 1000 | |||
# Make this empty to disable rewriting. | |||
root=toto@monmail.fr | |||
# The place where the mail goes. The actual machine name is required no | |||
# MX records are consulted. Commonly mailhosts are named mail.domain.com | |||
mailhub=smtp.gmail.com:587 (pour gmail) | |||
# Where will the mail seem to come from? | |||
# rewriteDomain= | |||
# The full hostname | |||
hostname=raspberrypi | |||
# Are users allowed to set their own From: address? | |||
# YES - Allow the user to specify their own From: address | |||
# NO - Use the system generated From: address | |||
FromLineOverride=YES | |||
UseTLS=YES | |||
UseSTARTTLS=YES | |||
AuthUser=toto@monfournisseur.com | |||
AuthPass=MonMotdePasseDeConnection | |||
'''''Remarque :''' on peut créer un mot de passe d'application dans les paramètre du compte google et l'utiliser ici pour éviter d'avoir à utiliser le mot de passe du compte. | |||
On automatise l'exécution (dimache à 2h du matin) : | On automatise l'exécution (dimache à 2h du matin) : | ||
# crontab -e | # crontab -e | ||
0 2 * * 7 /root/scripts/lxc_auto_update.sh | 0 2 * * 7 /root/scripts/lxc_auto_update.sh | ||
Version du 8 mai 2025 à 08:20
Les outils
Conteneur proxy : cf nginx sur alpine léger
- Création du conteneur
- Installation et configuration de nginx
- Installation de certbot pour let's encrypt
- Voir pour installer des outils de sécurité (fail2ban,...)
Conteneur Mariadb : cf mariadb sur alpinele
- Création du conteneur
- Installation de mariadb
- Configuration
- Création d'un utilisateur
Conteneur PhpMyadmin : cf phpma sur alpineLe
- Création du conteneur
- Installation d'apache2 et de phpmyadmin
- Configuration d'apache2 et de phpmyadmin
Les applis
Conteneur tables : cf tables sur alpine léger & pmb sur alpine léger pour apache2
Conteneur pmb : cf pmb sur alpine léger (historique dans pmb sur alpine lourd)
Conteneur wiki : Cf wiki (mediawiki) sur alpine léger
- Création d'un utilisateur et d'une base de donnée vide pour le wiki
- Transfert de la base de données
- Création du conteneur
- Installation du serveur web
- Installation de la nouvelle version de mediawiki
- Initialisation de l'application
- Modification de LocalSettings.php
- Récupération du contenu sur l'ancien serveur et transfert des données
- Corrections
Conteneur wp : cf wordpress sur alpine léger
mais sauter à la fin. Mariadb et phpmyadmin dans d'autres conteneurs...
Stockage et sauvegardes
création d'un volume pour les sauvegardes :
# lxc storage volume create default sauvegarde-lxc size=50GB
Montage du volume dans chaque conteneur :
# lxc config device add <nom du conteneur> sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes
Sécurisation
Mises à jour automatiques
Installer vim-nox (coloration syntaxique), mailutils (pour l'envoi de mails).
Au niveau du système hôte, on ajoute le script /root/scripts/lxc_auto_update avec :
#!/bin/bash
LOG_FILE="/var/log/lxc_update.log"
bavarder() {
local message="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE"
}
# Récupérer la liste des noms de conteneurs Alpine
containers=$(lxc list --format csv | tail -n +2 | cut -d',' -f1)
bavarder "Liste des conteneurs récupérée : '$containers'"
# Séparer les noms de conteneurs en un tableau
IFS=$'\n' read -r -d '' -a container_array <<< "$containers"
# Boucle pour lancer les mises à jour et rediriger toute la sortie de la boucle
{
for container in "${container_array[@]}"; do
bavarder "--- Début du traitement du conteneur : '$container' ---"
config=$(lxc config show "$container")
if echo "$config" | grep -iq "alpine"; then
bavarder "Le conteneur '$container' semble être basé sur Alpine."
is_running=$(lxc list --format csv | grep "^${container}," | grep ",RUNNING,")
if [ -n "$is_running" ]; then
bavarder "Le conteneur '$container' est en cours d'exécution, lancement de la mise à jour..."
lxc exec "$container" -- sh -c "apk update && apk upgrade --available"
result=$?
if [ "$result" -ne 0 ]; then
bavarder "Erreur lors de la mise à jour de '$container'."
fi
else
bavarder "Le conteneur '$container' n'est pas en cours d'exécution, mise à jour ignorée."
fi
else
bavarder "Le conteneur '$container' ne semble pas être basé sur Alpine, mise à jour ignorée."
fi
bavarder "--- Fin du traitement du conteneur : '$container' ---"
done
} >> "$LOG_FILE" 2>&1
bavarder "Fin de la tentative de mise à jour des conteneurs."
# Définir l'adresse e-mail pour les notifications
EMAIL_DESTINATAIRE="toto@monfournisseur.com" # Remplace par ton adresse e-mail
# Vérifier s'il y a eu des erreurs et envoyer un e-mail si c'est le cas
if grep -q "Erreur" "$LOG_FILE"; then
cat "$LOG_FILE" | mail -s 'Rapport de mise à jour LXC - Erreurs détectées' "$EMAIL_DESTINATAIRE"
fi
exit 0
L'envoi des mails nécessite l'installation de mailutils et ssmtp :
# apt-get install mailutils ssmtp
Configuration de ssmtp :
# vi /etc/ssmtp/ssmtp.conf
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=toto@monmail.fr # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.gmail.com:587 (pour gmail) # Where will the mail seem to come from? # rewriteDomain=
# The full hostname hostname=raspberrypi # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES UseTLS=YES UseSTARTTLS=YES AuthUser=toto@monfournisseur.com AuthPass=MonMotdePasseDeConnection
Remarque : on peut créer un mot de passe d'application dans les paramètre du compte google et l'utiliser ici pour éviter d'avoir à utiliser le mot de passe du compte.
On automatise l'exécution (dimache à 2h du matin) :
# crontab -e 0 2 * * 7 /root/scripts/lxc_auto_update.sh