1. Install LEMP
2. Create a New Nginx Server Block:
Create a new Nginx server block for each WordPress website you want to host. You can do this by creating a new configuration file in the /etc/nginx/sites-available/
directory. For example, to create a new server block for a website called example.com
, you can create a file called example.com.conf
in the /etc/nginx/sites-available/
directory.
nano /etc/nginx/sites-available/example.com.conf
3. Configure Nginx Server Block:
In the server block configuration file, you need to specify the root directory for your WordPress installation and the domain name of your website. Here is an example configuration file:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; allow all; } # Block PHP files in uploads directory location ~* /wp-content/uploads/.*\.php$ { deny all; } # Block access to hidden files and directories location ~ /\. { deny all; access_log off; log_not_found off; } }
Note: if you are using a different version of PHP then replace the 7.4 with the version you are using. eg. 8.0 and do not forget to replace example.com with your domain.
4. Create Database
Create a New MySQL Database: Create a new MySQL database for each WordPress website you want to host. You can do this using the MySQL command line interface
mysql -u root
or
mysql -u root -p
CREATE DATABASE db_databasename; GRANT ALL PRIVILEGES ON db_databasename.* TO 'wordpressuser'@'localhost'; FLUSH PRIVILEGES; exit;
Note: Replace the databasename and wordpressuser as per your choice. we will use the database name and wordpressuser later in the section of wordpress configuration.
5. Download WordPress & Install
Download and Install WordPress: Download and install WordPress in the root directory of your website. You can do this using the WordPress command line interface.
wget https://wordpress.org/latest.zip
Create WordPress folder for your website.
sudo mkdir -p /var/www/example.com
copy latest.zip to /var/www/example.com
cp latest.zip /var/www/example.com/latest.zip
unzip with
cd /var/www/example.com unzip latest.zip
change Directory to your newly created folder </var/www/example.com>
cd /var/www/example.com
here you will see a folder named wordpress
change directory again to wordpress
cd wordpress
copy wp-config-sample.php to wp-config.php
sudo cp wp-config-sample.php wp-config.php
Now edit the new config file with a command-line text editor like Nano.
sudo nano wp-config.php
Find the following lines and replace the red texts with the database name, username and password you created in the previous step.
/** The name of the database for WordPress */ define('DB_NAME', 'database_name_here'); /** MySQL database username */ define('DB_USER', 'username_here'); /** MySQL database password */ define('DB_PASSWORD', 'password_here');
Then scroll down to find the following line.
$table_prefix = 'wp_';
By default, every WordPress database table name begins with wp_
as the prefix. It’s highly recommended to change it to something else to improve security. Use random characters like below.
$table_prefix = 'DBexAg_';
Save and close the file.
We also need to set the Nginx user (www-data
) as the owner of the WordPress site directory by using the following command.
sudo chown www-data:www-data /var/www/example.com/ -R
Enable Nginx Server Block: Once you have created the Nginx server block configuration file and installed WordPress, you need to enable the server block by creating a symbolic link to the file in the /etc/nginx/sites-enabled/
directory. You can do this using the ln
command:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
To Test nginx configuration
sudo nginx -t
If the test is successful, reload Nginx.
sudo systemctl reload nginx
you probably need to install some PHP7.4 extensions. if you are using php7.4.
sudo apt install php-imagick php7.4-fpm php7.4-mbstring php7.4-bcmath php7.4-xml php7.4-mysql php7.4-common php7.4-gd php7.4-json php7.4-cli php7.4-curl php7.4-zip
Then reload PHP-FPM and Nginx. The wizard should now be displayed.
sudo systemctl reload php7.4-fpm nginx
6. Enabling HTTPS
To encrypt the HTTP traffic, we can enable HTTPS by installing a free TLS certificate issued from Let’s Encrypt. Run the following command to install Let’s Encrypt client (certbot) on Ubuntu 20.04 server.
sudo apt install certbot python3-certbot-nginx
And run this command to obtain and install TLS certificate.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d example.com,www.example.com
The certificate should now be obtained and automatically installed.
7. Finish the Installation with the Setup Wizard
Enter your domain name in the browser address bar.
example.com
or
example.com/wp-admin/install.php
You shall see the WordPress installation wizard. Select a language.
Choose Language
Create an admin account and click the Install WordPress button.
And now your new WordPress site is installed.