# Installing WordPress on Debian

1. Log into the Debian device
2. Run the following commands in a terminal:
   # update repositories and install any available software updates
   sudo apt update
   sudo apt upgrade -y
   # install Apache HTTPD and MySQL
   sudo apt-get install apache2 mariadb-server mariadb-client curl
   # install PHP components
   sudo apt install php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
   # configure the MySQL database
   sudo su
   mysql_secure_installation
3. Press Enter to login as root
4. Type Y and press Enter to set a root password, type the password twice to confirm
5. Type Y and press Enter to remove anonymous users
6. Type Y and press Enter to disallow root login remotely
7. Type Y and press Enter to remove the test database
8. Type Y and press Enter to reload privilege tables
9. Run the following command to login into MySQL:
   mysql -u root -p
10. Authenticate with the root password set earlier
11. Run the following commands to create the WordPress database and database user
    CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    GRANT ALL ON wordpress.* TO 'wordpress_user'@'localhost' IDENTIFIED BY 'W0rdPr3ss!!';
    FLUSH PRIVILEGES;
    EXIT;
    exit
12. Continue with the following commands to download and extract WordPress in the Apache webroot
    # download latest wordpress version
    sudo wget https://wordpress.org/latest.tar.gz
    # extract latest.tar.gz
    sudo mkdir /var/www/wordpress
    sudo tar xzvf latest.tar.gz --directory /var/www
    # create a new wordpress.conf file to configure the site
    sudo nano /etc/apache2/sites-available/wordpress.conf
13. Paste the following configuration into wordpress.conf

    Alias /wordpress "/var/www/wordpress/"
    <Directory /var/www/wordpress/>
    AllowOverride All
    </Directory>

14. Press CTRL+O, Enter, CTRL+X to write the changes to wordpress.conf
15. Continue with the following commands to enable the site and restart Apache:
    # enable the Wordpress site and required PHP modules
    sudo a2ensite wordpress
    sudo a2enmod rewrite
    # create a .htaccess file
    sudo touch /var/www/wordpress/.htaccess
    # copy the sample wordpress config
    sudo cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
    # create an upgrade directory
    sudo mkdir /var/www/wordpress/wp-content/upgrade
    # set the owner of the new wordpress directory to www-data
    sudo chown -R www-data:www-data /var/www/wordpress
    # change additional permissions
    sudo find /var/www/wordpress/ -type d -exec chmod 750 {} \;
    sudo find /var/www/wordpress/ -type f -exec chmod 640 {} \;
    # generate secure secret keys, copy the output for use shortly
    curl -s https://api.wordpress.org/secret-key/1.1/salt/
    # edit wp-config.conf
    sudo nano /var/www/wordpress/wp-config.php
16. Press CTRL+W and search for define('AUTH_KEY'
17. Paste the secure secret keys generated earlier, overwriting the template
18. Press CTRL+W and search for define('DB_NAME'
19. Update the database name, username and password
20. Press CTRL+W and search for define('FS_METHOD'
21. Set the value to 'direct'
22. Press CTRL+O, Enter, CTRL+X to write the changes to wp-config.conf
23. Continue the setup by running the following commands in terminal
    # restart apache2 service
    sudo systemctl restart apache2
24. Open a web browser and navigate to http://DNSorIP/wordpress
25. The Wordpress setup screen should be displayed
26. Select a language > Click Continue
27. Create a site title and WordPress login > Click Install WordPress
28. When the installation completes, login with the WordPress credentials created in the previous step
29. Welcome to your very own, self-hosted WordPress installation