#!/bin/bash # Vérifier que le script est lancé en root if [[ $EUID -ne 0 ]]; then echo "Ce script doit être exécuté en tant que root." >&2 exit 1 fi # Définir les variables DB_NAME="lychee" DB_USER="lycheeuser" LYCHEE_DIR="/var/www/lychee" APACHE_CONF="/etc/apache2/sites-available/lychee.conf" PHP_VERSION="8.3" PHP_INI_CLI="/etc/php/${PHP_VERSION}/cli/php.ini" PHP_INI_APACHE="/etc/php/${PHP_VERSION}/apache2/php.ini" TIMEZONE=$(timedatectl show --value --property=Timezone) # Générer un mot de passe alphanumérique sécurisé DB_PASSWORD=$(tr -dc 'A-Za-z0-9' /root/.lychee_db_password chmod 600 /root/.lychee_db_password # Mise à jour du système apt update && apt upgrade -y # Ajout du dépôt Sury pour PHP 8.3 apt install -y apt-transport-https lsb-release ca-certificates wget gnupg2 wget -qO - https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/php.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt update # Installation des paquets nécessaires apt install -y apache2 mariadb-server php${PHP_VERSION} php${PHP_VERSION}-cli php${PHP_VERSION}-intl php${PHP_VERSION}-xmlrpc \ php${PHP_VERSION}-soap php${PHP_VERSION}-mysql php${PHP_VERSION}-zip php${PHP_VERSION}-gd php${PHP_VERSION}-tidy \ php${PHP_VERSION}-mbstring php${PHP_VERSION}-curl php${PHP_VERSION}-xml php${PHP_VERSION}-bcmath php${PHP_VERSION}-imagick \ php${PHP_VERSION}-tokenizer libapache2-mod-php${PHP_VERSION} unzip # Définir la timezone PHP pour CLI et Apache sed -i "s|^;*date.timezone =.*|date.timezone = ${TIMEZONE}|" "${PHP_INI_CLI}" sed -i "s|^;*date.timezone =.*|date.timezone = ${TIMEZONE}|" "${PHP_INI_APACHE}" # Sécuriser MariaDB mysql_secure_installation <> ${LYCHEE_DIR}/.env # Propriétés et permissions chown -R www-data:www-data ${LYCHEE_DIR} chmod 640 ${LYCHEE_DIR}/.env find ${LYCHEE_DIR} -type f -exec chmod 640 {} \; find ${LYCHEE_DIR} -type d -exec chmod 750 {} \; # Permissions spécifiques pour data/upload chmod -R 750 ${LYCHEE_DIR}/uploads/ ${LYCHEE_DIR}/data/ # Permissions spécifiques attendues par Lychee chmod -R g+s ${LYCHEE_DIR}/public/uploads chmod -R g+s ${LYCHEE_DIR}/public/sym chmod 2775 ${LYCHEE_DIR}/public/uploads chmod 2775 ${LYCHEE_DIR}/public/uploads/import chmod 2775 ${LYCHEE_DIR}/public/sym chmod 0664 ${LYCHEE_DIR}/public/uploads/import/index.html chmod 0664 ${LYCHEE_DIR}/public/sym/index.html chmod 2775 ${LYCHEE_DIR}/storage/tmp/jobs chmod 2775 ${LYCHEE_DIR}/storage/tmp/uploads chmod -R g+s ${LYCHEE_DIR}/storage/tmp/jobs chmod -R g+s ${LYCHEE_DIR}/storage/tmp/uploads # Protéger les fichiers sensibles via .htaccess cat > ${LYCHEE_DIR}/.htaccess < Order allow,deny Deny from all EOF # Configuration Apache cat > ${APACHE_CONF} < ServerAdmin webmaster@localhost DocumentRoot ${LYCHEE_DIR}/public Options -Indexes +FollowSymLinks AllowOverride All Require all granted ErrorLog \${APACHE_LOG_DIR}/lychee_error.log CustomLog \${APACHE_LOG_DIR}/lychee_access.log combined LimitRequestBody 10485760 EOF # Désactiver modules inutiles a2dismod -f autoindex status cgi userdir # Activer Lychee et désactiver le site par défaut a2enmod rewrite a2ensite lychee.conf a2dissite 000-default.conf # Recharger Apache systemctl reload apache2 # Déterminer l'IP locale IP=$(hostname -I | awk '{print $1}') echo "Installation de Lychee terminée." echo "Accédez à l’interface web pour finaliser la configuration : http://${IP}"