#!/bin/bash # === Configuration (à personnaliser) === DOMAIN_NAME="srv-madis" # Nom de domaine pour accéder à Madis ADMIN_EMAIL="admin@technisem.com" # Email de l'administrateur Madis DB_PASSWORD="dbpass123" # Mot de passe pour l'utilisateur SQL 'madis' USER_PASSWORD="userpass123" # Mot de passe du compte administrateur Madis # === Vérification de l'OS: doit être Debian 12 === if ! grep -q "Debian GNU/Linux 12" /etc/os-release; then echo "Erreur : Ce script est conçu pour Debian 12 uniquement." exit 1 fi # === Vérification des privilèges root/sudo === if [ "$(id -u)" -eq 0 ]; then apt update && apt install -y --no-install-recommends sudo else if ! sudo -v &> /dev/null; then echo "Erreur : exécutez ce script en root ou avec les privilèges sudo." exit 1 fi fi # Empêcher needrestart de demander une interaction lors des upgrades sudo sed -i "s/#\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/" /etc/needrestart/needrestart.conf 2>/dev/null || true export NEEDRESTART_MODE=a # === Synchronisation de l'horloge et fuseau horaire === sudo apt install -y --no-install-recommends ntpdate sudo ntpdate time.nist.gov || true sudo timedatectl set-timezone Europe/Paris # === Installation des paquets requis === export DEBIAN_FRONTEND=noninteractive sudo rm -f /etc/apt/sources.list.d/yarn.list sudo apt update sudo apt -o Dpkg::Options::="--force-confold" upgrade -y # Installer les dépendances système et serveur sudo apt install -y --no-install-recommends \ xfonts-base xfonts-75dpi xfonts-utils xfonts-encodings x11-common libfontenc1 libxrender1 fontconfig \ git nginx default-mysql-server gnupg curl apt-transport-https lsb-release ca-certificates wget openssl # Ajouter le dépôt Sury pour PHP 8.1 et le dépôt Yarn sudo wget -q -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list > /dev/null # Clé et dépôt Yarn curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/yarnkey.gpg echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list > /dev/null # Mettre à jour et installer PHP 8.1 + extensions, Yarn (NodeJS sera installé via son script) sudo apt update && sudo apt -y install \ php8.1-bz2 php8.1-cli php8.1-common php8.1-curl php8.1-fpm php8.1-gd \ php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-zip \ yarn # Définir l'utilisateur Nginx (www-data sur Debian) nginx_user="www-data" # === Installer Node.js 18 (Nodesource) === curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y --no-install-recommends nodejs # === Installer wkhtmltopdf 0.12.5 et libssl1.1 (compatibilité) === # Télécharger libssl1.1 (Debian 11) et wkhtmltopdf pour Debian Buster wget -nv -O libssl1.1_1.1.1w.deb "http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb" wget -nv -O wkhtmltox_0.12.5-1.buster_amd64.deb "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.buster_amd64.deb" # Installer les paquets et nettoyer les fichiers sudo dpkg -i libssl1.1_1.1.1w.deb && rm -f libssl1.1_1.1.1w.deb sudo dpkg -i wkhtmltox_0.12.5-1.buster_amd64.deb && rm -f wkhtmltox_0.12.5-1.buster_amd64.deb # === Installer Composer (gestionnaire PHP) === sudo curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer # === Génération du certificat SSL autosigné === # Créer le fichier de configuration OpenSSL pour le certificat sudo mkdir -p /etc/nginx/ssl sudo tee /etc/ssl/madis_ssl.cnf > /dev/null << EOF [ req ] default_bits = 2048 default_keyfile = /etc/nginx/ssl/nginx.key default_md = sha256 prompt = no distinguished_name = dn [ dn ] C = FR ST = France L = Ville O = MonOrganisation OU = Madis CN = $DOMAIN_NAME emailAddress = $ADMIN_EMAIL EOF # Générer la clé privée et le certificat (valide 1 an) sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt \ -config /etc/ssl/madis_ssl.cnf # === Configuration de Nginx pour Madis === # Arrêter tout service occupant les ports 80 ou 443 (si existant) if sudo ss -tuln | grep -q ':80'; then svc=$(sudo lsof -ti:80) && [ -n "$svc" ] && sudo systemctl stop "$svc" fi if sudo ss -tuln | grep -q ':443'; then svc=$(sudo lsof -ti:443) && [ -n "$svc" ] && sudo systemctl stop "$svc" fi # Supprimer la configuration par défaut de Nginx, s'il y en a une sudo rm -f /etc/nginx/sites-enabled/* /etc/nginx/sites-available/default # Créer la configuration Nginx pour Madis (HTTPS) sudo tee /etc/nginx/sites-available/madis.conf > /dev/null << EOF server { listen 443 ssl; server_name $DOMAIN_NAME; root /var/www/madis/public; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; location / { try_files \$uri /index.php\$is_args\$args; } location ~ ^/index\.php(/|$) { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)\$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT \$realpath_root; internal; } location ~ \.php\$ { return 404; } error_log /var/log/nginx/madis_error.log; access_log /var/log/nginx/madis_access.log; } EOF # Activer la configuration en créant le lien symbolique sudo ln -s /etc/nginx/sites-available/madis.conf /etc/nginx/sites-enabled/madis.conf # Redémarrer Nginx pour prendre en compte la nouvelle config sudo systemctl restart nginx # === Configuration de la base de données (MySQL/MariaDB) === # Supprimer ancienne base/utilisateur si existants sudo mysql -e "DROP DATABASE IF EXISTS madis;" sudo mysql -e "DROP USER IF EXISTS 'madis'@'localhost';" # Créer la base et l'utilisateur sudo mysql </dev/null || true # s'assurer que /var/www est accessible # Récupérer la dernière version de Madis (clonage du dépôt Git) if [ -d "/var/www/madis" ]; then sudo rm -rf /var/www/madis fi sudo -u "$WEB_USER" git clone https://gitlab.adullact.net/soluris/madis.git /var/www/madis # Déterminer le dernier tag (version stable) du dépôt cd /var/www/madis || exit 1 LATEST_TAG=$(git tag -l --sort=-creatordate | head -n1) if [ -n "$LATEST_TAG" ]; then sudo -u "$WEB_USER" git checkout "$LATEST_TAG" fi # Configuration de l'environnement de Madis (.env) sudo -u "$WEB_USER" cp /var/www/madis/.env.dist /var/www/madis/.env sudo sed -i "s|DATABASE_URL=.*|DATABASE_URL=mysql://madis:${DB_PASSWORD}@localhost:3306/madis|" /var/www/madis/.env sudo sed -i "s|APP_ENV=.*|APP_ENV=prod|" /var/www/madis/.env sudo sed -i "s|APP_URL=.*|APP_URL=https://$DOMAIN_NAME|" /var/www/madis/.env sudo sed -i "s|APP_CONNEXION_STATUS_KNOW=.*|APP_CONNEXION_STATUS_KNOW=true|" /var/www/madis/.env sudo sed -i "s|APP_COMMUNE_SVG_REDUCED_PATH=.*|APP_COMMUNE_SVG_REDUCED_PATH=''|" /var/www/madis/.env # (Pas de configuration explicite de MAILER_DSN pour SMTP dans cette version automatisée) # Installer les dépendances et build (via le script deploy de Madis) sudo -u "$WEB_USER" bash -c "cd /var/www/madis && bin/deploy" # Insérer le compte administrateur initial en base (email + mot de passe fourni) # Calculer le hash du mot de passe utilisateur via PHP (BCRYPT) PASSWORD_HASH=$(php -r "echo password_hash('$USER_PASSWORD', PASSWORD_BCRYPT);") sudo mysql madis < $cron_file" sudo bash -c "echo '31 * * * * $WEB_USER cd /var/www/madis && $(which php8.1) bin/console notifications:send' >> $cron_file" sudo chmod 644 "$cron_file" # === Fin de l’installation === echo "✔ Installation de Madis terminée sur https://$DOMAIN_NAME" echo "▶ Vous pouvez vous connecter avec l'utilisateur administrateur suivant :" echo " - **Login/email** : $ADMIN_EMAIL" echo " - **Mot de passe** : $USER_PASSWORD" ## nano madis.sh 29 chmod +x madis.sh 30 clear 31 nano /etc/resolv.conf 32 systemctl restart networking 33 sudo hostnamectl set-hostname srv-madis 34 apt install sudo 35 sudo hostnamectl set-hostname srv-madis 36 nano /etc/hostname 37 o 38 nano /etc/hosts 39 systemctl restart networking 40 reboot 41 sudo reboot 42 clear 43 nano madis.sh 44 rm madis.sh 45 nano madis.sh 46 chmod+x madis.sh 47 chmod +x madis.sh 48 bash madis.sh 49 nano /var/www/madis/.env sudo certbot --nginx -d