Step 1: Update Your System
First, make sure your system is up-to-date.
sudo apt update
sudo apt upgrade -y
Step 2: Install Apache
Install Apache web server.
sudo apt install apache2 -y
Enable and start the Apache service.
sudo systemctl enable apache2
sudo systemctl start apache2
Step 3: Install MariaDB
Install MariaDB server.
sudo apt install mariadb-server mariadb-client -y
Secure the MariaDB installation.
sudo mysql_secure_installation
Follow the prompts to:
- Set a root password
- Remove anonymous users
- Disallow root login remotely
- Remove test databases
- Reload privilege tables
Step 4: Create a Database for WordPress
Log into MariaDB.
sudo mysql -u root -p
Run the following SQL commands to create a database and a user for WordPress.
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 5: Install PHP
Install PHP and necessary extensions.
sudo apt install php libapache2-mod-php php-mysql php-mbstring php-xml php-zip php-gd php-curl -y
Step 6: Configure PHP for Large File Uploads
Edit the PHP configuration file.
sudo nano /etc/php/*/apache2/php.ini
Change the following settings:
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
max_input_time = 300
Step 7: Restart Apache
After making changes to the PHP configuration, restart Apache.
sudo systemctl restart apache2
Step 8: Download and Install WordPress
Navigate to the web directory /var/www/
Download the latest version of WordPress.
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
Or if it's a zip file
unzip latest.zip
rename the wordpress site with the domain of your wabsite
mv wordpress mysite.com
You might want to keep the wordpress compressed file untill next version comes up.
From here you should be ready to go to the local ip address in your browser and finish the installation process of wordpress. If the wordpress installation opens and after putting the information to access to the database you just created for wordpress it does not connect, you will have to enter that information manually like is shown in the next step.
Step 9: Configure WordPress
Navigate to folder /var/www/mysite.com and create a WordPress configuration file from the sample file. Make a copy of the sample file and edit the new copy as shown below:
cp wp-config-sample.php wp-config.php
Edit the wp-config.php file.
sudo nano wp-config.php
Add your database details with the details you chose when you created the database in step 4:
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wordpress_user');
define('DB_PASSWORD', 'strong_password');
define('DB_HOST', 'localhost');
Step 10: Set Permissions
Set proper permissions for the WordPress files or better yet for this purpose to the www directory.
sudo chown -R www-data:www-data /var/www/
sudo find /var/www/ -type d -exec chmod 750 {} \;
sudo find /var/www/ -type f -exec chmod 644 {} \;
Step 11: Enable Apache Rewrite Module
Enable the rewrite module.
sudo a2enmod rewrite
Step 11: Disable the default apache website
sudo a2dissite 000-default.conf
Step 12: Restart Apache Again
Restart Apache to apply all changes.
sudo systemctl restart apache2
Step 13: Complete WordPress Installation
Open a web browser and navigate to your server’s IP address. Follow the on-screen instructions to complete the WordPress installation.
Step 14: Secure Your Server
- Install UFW (Uncomplicated Firewall)
sudo apt install ufw -y
sudo ufw allow 22
sudo ufw allow 80sudo ufw allow 443sudo ufw enable
- Configure SSL with Let’s Encrypt
If you have a domain name purchased or one for free, here is how to get the certificates from letsencrypt but first make sure to map your public ip address to the server running apache. Also you need to create at least a basic configuration file for mysite.com.
Navigate to /etc/apache2/sites-available. Create and edit the configuration for mysite.com file by copying the following lines:
nano mysite.com.conf
<VirtualHost *:80>
ServerName mysite.com
Redirect permanent / https://mysite.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName mysite.com
DocumentRoot /var/www/mysite.com
<Directory /var/www/mysite.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# SSLEngine on
# SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
# Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
NOTE: I’ve left commented the lines corresponding to SSL because when you reload the apache service in the next step it will fail because the certificates are not yet present. Using the command certbot –apache will automatically add the necessary lines in the configuration file.
Enable the site:
sudo a2ensite mysite.com.conf
Reload apache
sudo systemctl reload apache2.service
Install Certbot.
sudo apt install certbot python3-certbot-apache -y
Obtain an SSL certificate.
sudo certbot --apache
Or
sudo certbot certonly --apache -d mywebsite.com
Follow the prompts to set up HTTPS.
- Regular Updates and Backups
Set up a cron job for automatic updates.
sudo crontab -e
Add the following line for daily updates:
@daily apt update && apt upgrade -y
Happy Blogging!