#!/bin/bash # Check for root privileges if [[ $EUID -ne 0 ]]; then echo "This script must be run as root (use sudo)" exit 1 fi # 1. Prompt for the MySQL Root Password echo "Enter the desired MySQL root password:" read -s SECURE_PASS echo "Confirm the MySQL root password:" read -s SECURE_PASS_CONFIRM if [ "$SECURE_PASS" != "$SECURE_PASS_CONFIRM" ]; then echo "Passwords do not match. Exiting." exit 1 fi # 2. Add repository for PHP 8.2 (Ondrej Sury PPA / Repository) echo "Setting up PHP 8.2 repository..." apt update -y apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 if [ -f /etc/debian_version ]; then # Pure Debian setup curl -sS https://packages.sury.org/php/README.txt | bash else # Ubuntu setup add-apt-repository ppa:ondrej/php -y fi apt update -y # 3. Install Packages (Apache, MariaDB, PHP 8.2 + Extensions, phpMyAdmin) # We pre-seed the phpMyAdmin choice so it installs completely unattended echo "phpmyadmin phpmyadmin/reconfigure-webconfig select apache2" | debconf-set-selections echo "phpmyadmin phpmyadmin/dbconfig-install boolean false" | debconf-set-selections apt install -y apache2 mariadb-server php8.2 php8.2-mysql php8.2-mbstring \ php8.2-gd php8.2-xml php8.2-zip php8.2-curl php8.2-imap php8.2-apcu phpmyadmin # 4. Start Services systemctl enable --now apache2 systemctl enable --now mariadb # 5. Set MySQL Root Password # Debian uses mysql_native_password or unix_socket by default. We alter root to use native passwords for tools like phpMyAdmin. sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$SECURE_PASS');" sudo mysql -e "FLUSH PRIVILEGES;" # 6. Configure phpMyAdmin for Remote Access # Debian puts the phpmyadmin configuration into its own file. We link it to Apache. if [ -f /etc/phpmyadmin/apache.conf ]; then ln -sf /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf a2enconf phpmyadmin > /dev/null fi # 7. Firewall (UFW on Debian/Ubuntu instead of firewalld) if command -v ufw &> /dev/null; then ufw allow 'Apache Full' fi # 8. Restart Apache systemctl restart apache2 echo "------------------------------------------------" echo "LAMP Installation Complete!" echo "PHP Version: $(php -v | head -n 1)" echo "Extensions: IMAP, APCu" echo "URL: http://$(curl -s https://ifconfig.me)/phpmyadmin" echo "------------------------------------------------" # 9. CALL THE NEXT SCRIPT NEXT_SCRIPT="./manage_vhosts.sh" if [ -f "$NEXT_SCRIPT" ]; then echo "Found $NEXT_SCRIPT. Launching post-install setup..." chmod +x "$NEXT_SCRIPT" "$NEXT_SCRIPT" else echo "No follow-up script found at $NEXT_SCRIPT. Finished." fi