#!/bin/bash

# Встановлення змінних оточення для неінтерактивного режиму
export DEBIAN_FRONTEND=noninteractive

# Генерація випадкового пароля для MariaDB та phpMyAdmin
DB_ROOT_PASSWORD=$(openssl rand -base64 12)
PHPMYADMIN_PASS=$(openssl rand -base64 12)

# Попереднє налаштування phpmyadmin
echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections
echo "phpmyadmin phpmyadmin/app-password-confirm password $PHPMYADMIN_PASS" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/admin-pass password $DB_ROOT_PASSWORD" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/app-pass password $PHPMYADMIN_PASS" | debconf-set-selections
echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect none" | debconf-set-selections

# Оновлення пакетів
apt update && apt upgrade -y

# Встановлення необхідних пакетів
apt install nginx mariadb-server mariadb-client php-fpm php-mysql php-mbstring php-xml php-gd php-curl php-zip php-json php-bz2 -y

# Налаштування root пароля MariaDB
mysqladmin -u root password "$DB_ROOT_PASSWORD"

# Налаштування безпеки MariaDB
mysql -u root -p"$DB_ROOT_PASSWORD" <<EOF
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
EOF

# Створення бази даних та користувача для phpMyAdmin
mysql -u root -p"$DB_ROOT_PASSWORD" <<EOF
CREATE DATABASE IF NOT EXISTS phpmyadmin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY '$PHPMYADMIN_PASS';
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'localhost';
FLUSH PRIVILEGES;
EOF

# Встановлення phpMyAdmin
apt install phpmyadmin -y

# Створення та налаштування конфігураційного файлу phpMyAdmin
cat > /etc/phpmyadmin/config.inc.php <<EOF
<?php
\$cfg['blowfish_secret'] = '$(openssl rand -base64 32)';
\$i = 0;
\$i++;
\$cfg['Servers'][\$i]['auth_type'] = 'cookie';
\$cfg['Servers'][\$i]['host'] = 'localhost';
\$cfg['Servers'][\$i]['connect_type'] = 'tcp';
\$cfg['Servers'][\$i]['compress'] = false;
\$cfg['Servers'][\$i]['AllowNoPassword'] = false;
\$cfg['Servers'][\$i]['user'] = 'phpmyadmin';
\$cfg['Servers'][\$i]['password'] = '$PHPMYADMIN_PASS';
\$cfg['UploadDir'] = '';
\$cfg['SaveDir'] = '';
\$cfg['TempDir'] = '/tmp';
?>
EOF

# Налаштування прав доступу
chown -R www-data:www-data /etc/phpmyadmin
chmod 755 /etc/phpmyadmin
chmod 644 /etc/phpmyadmin/config.inc.php

# Створення символічного посилання
ln -sf /usr/share/phpmyadmin /var/www/html/

# Налаштування Nginx
cat > /etc/nginx/conf.d/phpmyadmin.conf <<EOF
server {
    listen 80;
    server_name _;
    root /var/www/html/phpmyadmin;
    index index.php index.html index.htm;
    
    location / {
        try_files \$uri \$uri/ /index.php?\$args;
    }
    
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        fastcgi_param PATH_INFO \$fastcgi_path_info;
    }
    
    location ~ /\.ht {
        deny all;
    }
}
EOF

# Видалення стандартної конфігурації
rm -f /etc/nginx/sites-enabled/default

# Перезапуск сервісів
systemctl restart nginx
systemctl restart php$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")-fpm
systemctl restart mysql

# Імпорт схеми бази даних phpMyAdmin
zcat /usr/share/doc/phpmyadmin/examples/create_tables.sql.gz | mysql -u phpmyadmin -p"$PHPMYADMIN_PASS" phpmyadmin

# Виведення інформації
echo "Встановлення завершено"
echo "Пароль root для MariaDB: $DB_ROOT_PASSWORD"
echo "Пароль користувача phpmyadmin: $PHPMYADMIN_PASS"
echo "phpMyAdmin доступний за адресою http://$(hostname -I | awk '{print $1}')/phpmyadmin"