Compare commits
4 Commits
3d64c538af
...
8e882c7756
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e882c7756 | |||
| b8808e4219 | |||
| 5375a48bfd | |||
| 4936d3c8e7 |
@@ -1,3 +1,4 @@
|
||||
all_inclusive
|
||||
common
|
||||
server-dhcp
|
||||
server-httpd
|
||||
|
||||
1
scripts/all_inclusive/.list_files.txt
Normal file
1
scripts/all_inclusive/.list_files.txt
Normal file
@@ -0,0 +1 @@
|
||||
lychee_install.sh
|
||||
158
scripts/all_inclusive/lychee_install.sh
Normal file
158
scripts/all_inclusive/lychee_install.sh
Normal file
@@ -0,0 +1,158 @@
|
||||
#!/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"
|
||||
|
||||
# Générer un mot de passe alphanumérique sécurisé
|
||||
DB_PASSWORD=$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)
|
||||
echo "Mot de passe généré pour la base de données : ${DB_PASSWORD}"
|
||||
|
||||
# Sauvegarde temporaire root-only
|
||||
echo "${DB_PASSWORD}" > /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 = Europe/Paris|" ${PHP_INI_CLI}
|
||||
sed -i "s|^;*date.timezone =.*|date.timezone = Europe/Paris|" ${PHP_INI_APACHE}
|
||||
|
||||
|
||||
# Sécuriser MariaDB
|
||||
mysql_secure_installation <<EOF
|
||||
|
||||
y
|
||||
n
|
||||
y
|
||||
y
|
||||
y
|
||||
y
|
||||
EOF
|
||||
|
||||
# Créer la base et l'utilisateur avec droits restreints
|
||||
mysql <<EOF
|
||||
CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EOF
|
||||
|
||||
# Télécharger et installer Lychee proprement
|
||||
cd /tmp
|
||||
wget https://github.com/LycheeOrg/Lychee/releases/latest/download/Lychee.zip
|
||||
unzip Lychee.zip
|
||||
rm -rf ${LYCHEE_DIR}
|
||||
mv Lychee ${LYCHEE_DIR}
|
||||
rm Lychee.zip
|
||||
|
||||
# Demander le nom de domaine ou l'IP publique
|
||||
read -p "Entrez le nom de domaine ou l'adresse IP d'accès à Lychee (ex: lychee.mondomaine.fr ou 192.168.1.100) : " LYCHEE_HOST
|
||||
|
||||
# Forcer le protocole HTTP pour APP_URL
|
||||
APP_URL="http://${LYCHEE_HOST}"
|
||||
|
||||
# Modification du .env
|
||||
cp ${LYCHEE_DIR}/.env.example ${LYCHEE_DIR}/.env
|
||||
|
||||
sed -i "s|^APP_URL=.*|APP_URL=${APP_URL}|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^DB_CONNECTION=.*|DB_CONNECTION=mysql|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^DB_HOST=.*|DB_HOST=127.0.0.1|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^DB_PORT=.*|DB_PORT=3306|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^#*DB_DATABASE=.*|DB_DATABASE=${DB_NAME}|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^#*DB_USERNAME=.*|DB_USERNAME=${DB_USER}|" ${LYCHEE_DIR}/.env
|
||||
sed -i "s|^#*DB_PASSWORD=.*|DB_PASSWORD=\"${DB_PASSWORD}\"|" ${LYCHEE_DIR}/.env
|
||||
|
||||
# Définir le fuseau horaire
|
||||
echo "APP_TIMEZONE=Europe/Paris" >> ${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 <<EOF
|
||||
<FilesMatch "\.(env|env\.example|sql|log|conf)$">
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</FilesMatch>
|
||||
EOF
|
||||
|
||||
# Configuration Apache
|
||||
cat > ${APACHE_CONF} <<EOF
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot ${LYCHEE_DIR}/public
|
||||
|
||||
<Directory ${LYCHEE_DIR}/public>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/lychee_error.log
|
||||
CustomLog \${APACHE_LOG_DIR}/lychee_access.log combined
|
||||
|
||||
LimitRequestBody 10485760
|
||||
</VirtualHost>
|
||||
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}"
|
||||
@@ -9,33 +9,42 @@ check_root
|
||||
|
||||
set -e
|
||||
|
||||
DB_NAME="$1"
|
||||
DB_USER="$2"
|
||||
echo "👉 Nom de la base de données à créer : "
|
||||
read DB_NAME
|
||||
|
||||
if [[ -z "$DB_NAME" || -z "$DB_USER" ]]; then
|
||||
echo "❌ Usage: $0 <nom_base_de_donnees> <utilisateur_postgresql>"
|
||||
exit 1
|
||||
fi
|
||||
echo "👉 Nom de l'utilisateur PostgreSQL propriétaire : "
|
||||
read DB_USER
|
||||
|
||||
# Lecture du mot de passe en mode sécurisé
|
||||
read -s -p "🔑 Mot de passe PostgreSQL de l'utilisateur 'postgres' : " DB_PASS
|
||||
echo ""
|
||||
|
||||
# Exporter le mot de passe temporairement
|
||||
export PGPASSWORD="$DB_PASS"
|
||||
|
||||
echo "🔎 Vérification de l'existence de l'utilisateur PostgreSQL '$DB_USER'..."
|
||||
USER_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'")
|
||||
USER_EXISTS=$(psql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'")
|
||||
|
||||
if [[ "$USER_EXISTS" != "1" ]]; then
|
||||
echo "❌ L'utilisateur '$DB_USER' n'existe pas dans PostgreSQL."
|
||||
unset PGPASSWORD
|
||||
exit 2
|
||||
else
|
||||
echo "✅ L'utilisateur '$DB_USER' existe."
|
||||
fi
|
||||
|
||||
echo "🔎 Vérification de l'existence de la base de données '$DB_NAME'..."
|
||||
DB_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'")
|
||||
DB_EXISTS=$(psql -U postgres -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'")
|
||||
|
||||
if [[ "$DB_EXISTS" == "1" ]]; then
|
||||
echo "⚠️ La base de données '$DB_NAME' existe déjà."
|
||||
else
|
||||
echo "🛠 Création de la base de données '$DB_NAME' avec le propriétaire '$DB_USER'..."
|
||||
sudo -u postgres createdb -O "$DB_USER" "$DB_NAME"
|
||||
createdb -U postgres -O "$DB_USER" "$DB_NAME"
|
||||
echo "✅ Base de données '$DB_NAME' créée avec succès."
|
||||
fi
|
||||
|
||||
# Nettoyage de la variable d'environnement
|
||||
unset PGPASSWORD
|
||||
|
||||
echo "🎉 Opération terminée."
|
||||
|
||||
@@ -9,15 +9,26 @@ check_root
|
||||
|
||||
set -e
|
||||
|
||||
ROLE_NAME="$1"
|
||||
# Demande interactive si le rôle n’est pas passé en paramètre
|
||||
if [[ -n "$1" ]]; then
|
||||
ROLE_NAME="$1"
|
||||
else
|
||||
read -p "👤 Entrez le nom du rôle PostgreSQL à créer : " ROLE_NAME
|
||||
fi
|
||||
|
||||
if [[ -z "$ROLE_NAME" ]]; then
|
||||
echo "❌ Usage: $0 <nom_du_role>"
|
||||
echo "❌ Le nom du rôle est obligatoire."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Demander le mot de passe de l'utilisateur 'postgres'
|
||||
read -s -p "🔑 Entrez le mot de passe de l'utilisateur 'postgres' : " POSTGRES_PASSWORD
|
||||
echo ""
|
||||
|
||||
export PGPASSWORD="${POSTGRES_PASSWORD}"
|
||||
|
||||
echo "🔎 Vérification de l'existence du rôle PostgreSQL '$ROLE_NAME'..."
|
||||
ROLE_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${ROLE_NAME}'")
|
||||
ROLE_EXISTS=$(psql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${ROLE_NAME}'")
|
||||
|
||||
if [[ "$ROLE_EXISTS" == "1" ]]; then
|
||||
echo "⚠️ Le rôle '$ROLE_NAME' existe déjà."
|
||||
@@ -26,7 +37,7 @@ else
|
||||
ROLE_PASSWORD=$(generate_token 20)
|
||||
|
||||
echo "🛠 Création du rôle '$ROLE_NAME' avec LOGIN et mot de passe..."
|
||||
sudo -u postgres psql -c "CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}';"
|
||||
psql -U postgres -c "CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}';"
|
||||
|
||||
echo ""
|
||||
echo "✅ Rôle '$ROLE_NAME' créé avec succès."
|
||||
@@ -34,7 +45,20 @@ else
|
||||
echo " Nom du rôle : ${ROLE_NAME}"
|
||||
echo " Mot de passe : ${ROLE_PASSWORD}"
|
||||
echo "-------------------------------------------"
|
||||
echo " Pensez à sauvegarder ces informations."
|
||||
|
||||
# Proposer d'enregistrer dans .pgpass
|
||||
read -p "💾 Voulez-vous enregistrer ces identifiants dans ~/.pgpass ? (y/n) " SAVE_PASS
|
||||
if [[ "$SAVE_PASS" =~ ^[Yy]$ ]]; then
|
||||
PGPASS_FILE="${HOME}/.pgpass"
|
||||
echo "*:*:*:${ROLE_NAME}:${ROLE_PASSWORD}" >> "$PGPASS_FILE"
|
||||
chmod 600 "$PGPASS_FILE"
|
||||
echo "✅ Identifiants sauvegardés dans $PGPASS_FILE"
|
||||
fi
|
||||
|
||||
echo "⚠️ Pensez à sauvegarder ces informations si vous ne les enregistrez pas."
|
||||
fi
|
||||
|
||||
unset PGPASSWORD
|
||||
unset POSTGRES_PASSWORD
|
||||
|
||||
echo "🎉 Opération terminée."
|
||||
|
||||
@@ -9,35 +9,49 @@ check_root
|
||||
|
||||
set -e
|
||||
|
||||
# Téléchargement et stockage de la clé PostgreSQL
|
||||
echo "Ajout du dépôt officiel PostgreSQL 17..."
|
||||
|
||||
mkdir -p /etc/apt/keyrings
|
||||
wget -qO /etc/apt/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
|
||||
chmod 644 /etc/apt/keyrings/postgresql.asc
|
||||
|
||||
echo "deb [signed-by=/etc/apt/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
|
||||
|
||||
# Installation
|
||||
echo "Installation de PostgreSQL 17..."
|
||||
apt update -y
|
||||
apt install -y postgresql-17
|
||||
|
||||
echo "Démarrage et activation de PostgreSQL..."
|
||||
echo "Activation et démarrage du service PostgreSQL..."
|
||||
systemctl enable postgresql
|
||||
systemctl start postgresql
|
||||
|
||||
echo "Génération d'un mot de passe fort pour l'utilisateur postgres..."
|
||||
echo "⏳ Attente du démarrage du service PostgreSQL..."
|
||||
sleep 3
|
||||
|
||||
echo "✅ Vérification du service..."
|
||||
if ! systemctl is-active --quiet postgresql; then
|
||||
echo "❌ Le service PostgreSQL ne fonctionne pas correctement."
|
||||
journalctl -xeu postgresql --no-pager | tail -n 20
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🧪 Test de connexion à PostgreSQL..."
|
||||
if ! sudo -u postgres psql -c '\q' 2>/dev/null; then
|
||||
echo "❌ Échec de la connexion à PostgreSQL. Vérifiez que le socket est disponible."
|
||||
echo " Astuce : systemctl status postgresql"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔐 Génération d'un mot de passe fort pour l'utilisateur postgres..."
|
||||
POSTGRES_PASSWORD=$(generate_token 20)
|
||||
|
||||
echo "Configuration du mot de passe de l'utilisateur postgres..."
|
||||
echo "🔧 Configuration du mot de passe de l'utilisateur postgres..."
|
||||
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '${POSTGRES_PASSWORD}';"
|
||||
|
||||
echo "Configuration de l'accès local en md5..."
|
||||
echo "🔧 Configuration de l'accès local en md5..."
|
||||
PG_HBA="/etc/postgresql/17/main/pg_hba.conf"
|
||||
sed -i "s/^\(local\s\+all\s\+postgres\s\+\)peer/\1md5/" "$PG_HBA"
|
||||
|
||||
echo "Redémarrage de PostgreSQL pour prendre en compte la configuration..."
|
||||
echo "♻️ Redémarrage de PostgreSQL pour appliquer les changements..."
|
||||
systemctl restart postgresql
|
||||
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user