Set Up Wordpress Project into AWS

Oct 13 AWS

After create the EC2 set up in Ubuntu, connection the server through ssh connection.

Update and Install Required Packages

Update the system: sudo apt update && sudo apt upgrade -y Install Apache: sudo apt install apache2 -y Install PHP: sudo apt install php libapache2-mod-php php-mysql -y Install MySQL: sudo apt install mysql-server -y Secure MySQL Installation: Run the MySQL security script: sudo mysql_secure_installation

Create a MySQL Database for WordPress

Login to MySQL: sudo mysql -u root -p Create Database and User: CREATE DATABASE demo_wordpress; CREATE USER 'demo_wordpress_user'@'localhost' IDENTIFIED BY 'demo_wordpress_password'; GRANT ALL PRIVILEGES ON demo_wordpress.* TO 'demo_wordpress_user'@'localhost'; FLUSH PRIVILEGES; EXIT;

Install and Configure WordPress

Navigate to the web directory: cd /var/www/html Download WordPress: sudo wget https://wordpress.org/latest.tar.gz sudo tar -xvzf latest.tar.gz sudo mv wordpress/* sudo rm -rf wordpress latest.tar.gz Set Permissions: sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/ Configure WordPress: Rename the WordPress config file: sudo mv wp-config-sample.php wp-config.php Edit the wp-config.php file to include your MySQL database details: sudo nano wp-config.php Add the following lines:
define('DB_NAME', 'wordpress'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'your_password'); define('DB_HOST', 'localhost');

Install phpMyAdmin

Install phpMyAdmin: sudo apt install phpmyadmin -y During the installation, choose Apache2 as the web server and configure phpMyAdmin with the MySQL root password. Enable phpMyAdmin: sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Assign an Elastic IP to Your Instance

Update Apache to Work with Elastic IP: Edit the Apache configuration file: sudo nano /etc/apache2/sites-available/000-default.conf Add your server's Elastic IP: <VirtualHost *:80>     ServerName your-elastic-ip </VirtualHost> Restart Apache: sudo systemctl restart apache2 Remove index.html sudo rm index.html

Increase File Upload Size

Locate the php.ini file for PHP 8.3.6, typically located at /etc/php/8.3/apache2/php.ini on Ubuntu. sudo nano /etc/php/8.3/apache2/php.ini Update the following settings:
upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300 memory_limit = 128M
Save and Close the File: Save changes (Ctrl + O), then exit (Ctrl + X). Restart Apache to Apply the Changes: sudo systemctl restart apache2

Search in nano editor

To search within the Nano editor, you can use the following steps:
  1. Open Nano and Enter Search Mode:
  2. Press Ctrl + W to start searching.
  3. Type Your Search Query:
  4. After pressing Ctrl + W, type the text you want to find and press Enter.
  5. Move to the Next Match (if any):
  6. To find the next instance of your search term, press Ctrl + W again and hit Enter without typing anything new.
  7. Exit Search:
  8. Continue editing as usual after finding your desired location.

If only the homepage is working and all other pages are returning a 404 error in WordPress

If only the homepage is working and all other pages are returning a 404 error in WordPress, this is likely due to a permalink or .htaccess configuration issue. Here’s how you can troubleshoot and fix it:
  1. Reset Permalinks in WordPress
  2. Log into Your WordPress Admin Dashboard.
  3. Go to Settings > Permalinks
  4. Select Your Preferred Permalink Structure (e.g., Post Name).Click Save Changes to refresh the permalinks.
  5. Click Save Changes to refresh the permalinks.
This action often regenerates the `.htaccess` file and fixes the 404 errors. Verify .htaccess File Configuration Check the .htaccess File** in your WordPress root directory (usually `/var/www/html` on Ubuntu).If the `.htaccess` file does not exist, create one using the following command: sudo nano /var/www/html/.htaccess Ensure the File Has the Following Basic WordPress Rules:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Save and Close the File: Save the changes (`Ctrl + O`), then exit (`Ctrl + X`). Set the Correct Permissions on .htaccess: sudo chown www-data:www-data /var/www/html/.htaccess sudo chmod 644 /var/www/html/.htaccess Enable Mod Rewrite in Apache (if not already enabled) Enable the Rewrite Module: sudo a2enmod rewrite Restart Apache to Apply Changes: sudo systemctl restart apache2 Check Apache Configuration Open the default site configuration file for Apache: sudo nano /etc/apache2/sites-available/000-default.conf Verify That `AllowOverride` is Set to `All`: Ensure the following line appears in the `<Directory /var/www/html/>` section:
<Directory /var/www/html/> AllowOverride All </Directory>
Save and Restart Apache:
sudo systemctl restart apache2

Setup a Domain or Subdomain in the Server

First backup and zip the all wordpress files from /var/www/html to /var/www Navigate to the /var/www/html directory cd /var/www/html Zip All Files Inside the html Folder Install Zip sudo apt update sudo apt install zip -y Use the zip command to compress all files and subdirectories within html into a single zip file: sudo zip -r ../wordpress_backup.zip ./* Download the zip file and later will upload the zip file through filezilla Move the Backup to a Safe Location To Move to Another Directory: sudo mv wordpress_backup.zip /path/to/backup/location To Download Locally Using SCP: Run this command from your local terminal: scp -i /path/to/your-key.pem ubuntu@your-server-ip:/var/www/wordpress_backup.zip /local/path/to/save

Create the DNS Record for the Subdomain

  1. Log into your domain registrar’s control panel (e.g., GoDaddy, Namecheap, or AWS Route 53).
  2. Add an A Record for the subdomain:
  3. Name: subdomain (replace with your actual subdomain, e.g., blog for blog.yourdomain.com).
  4. Type: A
  5. Value: Your server’s IP address.
  6. TTL: Leave at default (usually 300 seconds).
  7. Save the DNS changes.
  8. It may take some time (up to 24 hours) for DNS changes to propagate.
Create a Directory for the Subdomain On your server, create a directory to store the files for your subdomain. Navigate to the web root directory and create a folder for your subdomain: sudo mkdir -p /var/www/subdomain.yourdomain.com Assign correct permissions for this directory: sudo chown -R www-data:www-data /var/www/subdomain.yourdomain.com sudo chmod -R 777 /var/www/subdomain.yourdomain.com Create a Virtual Host Configuration for the Subdomain in Apache Create a new virtual host configuration file for the subdomain: sudo nano /etc/apache2/sites-available/subdomain.yourdomain.com.conf Add the following configuration (replace subdomain.yourdomain.com and /var/www/subdomain.yourdomain.com with your actual subdomain and directory paths):
<VirtualHost *:80> ServerName subdomain.yourdomain.com DocumentRoot /var/www/subdomain.yourdomain.com <Directory /var/www/subdomain.yourdomain.com> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/subdomain_error.log CustomLog ${APACHE_LOG_DIR}/subdomain_access.log combined </VirtualHost>
Save and close the file (press Ctrl + O to save, then Ctrl + X to exit). Enable the New Virtual Host and Restart Apache Enable the new site with the following command: sudo a2ensite subdomain.yourdomain.com.conf Reload or restart Apache to apply the changes: sudo systemctl reload apache2

Create and Setup Free SSL in Zero SSL

Create and set up a free SSL certificate from ZeroSSL on your server, follow these steps: Prerequisites Ensure you have:
  1. A domain name (e.g., subdomain.yourdomain.com) properly pointed to your server's IP.
  2. An email account for SSL registration.
  3. Access to SSH on the server.
Register for a Free ZeroSSL Account
  1. Visit ZeroSSL and create a free account.
  2. After registering, navigate to the Dashboard.
Generate a New SSL Certificate
  1. Start a New Certificate Order:
  2. Click on "Create Free SSL Certificate".
  3. Enter your subdomain (e.g., subdomain.yourdomain.com).
  4. Continue to the next step.
  5. Choose Validation Method:
  6. Select DNS (CNAME) or HTTP File Upload as the validation method.
  7. DNS (CNAME): You will need to add a CNAME record to your DNS settings.
  8. HTTP File Upload: You will need to upload a specific file to your web server for verification.
  9. Complete Domain Verification:
  10. Follow ZeroSSL’s instructions for the chosen validation method:
  11. For DNS (CNAME): Add the provided CNAME record in your domain registrar’s DNS settings.
  12. For HTTP File Upload: Upload the specified file to /var/www/subdomain.yourdomain.com/.well-known/pki-validation/ on your server.
  13. Once done, click Verify Domain in ZeroSSL.
  14. Download Certificate Files:
  15. After verification, download the certificate files from ZeroSSL, which should include:
  16. certificate.crt
  17. ca_bundle.crt
  18. private.key

Configure Apache to Use the SSL Certificate

Transfer Certificate Files to Your Server: Upload the certificate.crt, ca_bundle.crt, and private.key files to your server, ideally to the /etc/ssl/subdomain.yourdomain.com directory: sudo mkdir -p /etc/ssl/subdomain.yourdomain.com sudo mv certificate.crt /etc/ssl/subdomain.yourdomain.com/ sudo mv ca_bundle.crt /etc/ssl/subdomain.yourdomain.com/ sudo mv private.key /etc/ssl/subdomain.yourdomain.com/ Update Apache Virtual Host Configuration: Open or create a configuration file for your subdomain (e.g., /etc/apache2/sites-available/subdomain.yourdomain.com-ssl.conf): sudo nano /etc/apache2/sites-available/subdomain.yourdomain.com-ssl.conf Add SSL Configuration to the File: Add the following configuration to enable SSL: apache
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName subdomain.yourdomain.com DocumentRoot /var/www/subdomain.yourdomain.com SSLEngine on SSLCertificateFile /etc/ssl/subdomain.yourdomain.com/certificate.crt SSLCertificateKeyFile /etc/ssl/subdomain.yourdomain.com/private.key SSLCertificateChainFile /etc/ssl/subdomain.yourdomain.com/ca_bundle.crt <Directory /var/www/subdomain.yourdomain.com> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/subdomain_error.log CustomLog ${APACHE_LOG_DIR}/subdomain_access.log combined </VirtualHost> </IfModule>
Enable the SSL Virtual Host and SSL Module: sudo a2enmod ssl sudo a2ensite subdomain.yourdomain.com-ssl.conf Restart Apache to Apply Changes: sudo systemctl restart apache2 Redirect HTTP to HTTPS (Optional) To redirect all HTTP traffic to HTTPS, open the original non-SSL Virtual Host file for your subdomain (e.g., /etc/apache2/sites-available/subdomain.yourdomain.com.conf): Add the following lines to redirect HTTP to HTTPS: apache
<VirtualHost *:80> ServerName subdomain.yourdomain.com DocumentRoot /var/www/subdomain.yourdomain.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </VirtualHost>
Save the file and restart Apache: sudo systemctl restart apache2