Organigramme d'installation

De Documentation
Aller à la navigationAller à la recherche

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