Select Page


WordPress is the most well liked CMS (content material control gadget) on the web. It means that you can simply arrange versatile blogs and internet sites on best of a MySQL backend with PHP processing. WordPress has noticed implausible adoption and is a smart selection for buying a website online up and working temporarily. After setup, virtually all management may also be executed in the course of the internet frontend.

On this information, we’re going to focal point on getting a WordPress example arrange on a LEMP stack (Linux, Nginx, MySQL, and PHP) on an Ubuntu 18.04 server.


So as to entire this instructional, you’re going to want get entry to to an Ubuntu 18.04 server.

It is important to carry out the next duties sooner than you’ll get started this information:

  • Create a sudo person in your server: We will be able to be finishing the stairs on this information the usage of a non-root person with sudo privileges. You’ll be able to create a person with sudo privileges by means of following our Ubuntu 18.04 initial server setup guide.
  • Set up a LEMP stack: WordPress will desire a internet server, a database, and PHP with the intention to appropriately operate. Putting in a LEMP stack (Linux, Nginx, MySQL, and PHP) fulfills all of those necessities. Observe this guide to put in and configure this device.
  • Protected your web page with SSL: WordPress serves dynamic content material and handles person authentication and authorization. TLS/SSL is the era that permits you to encrypt the visitors out of your web page in order that your connection is protected. The best way you put up SSL relies on whether or not you could have a website title on your web page.
    • You probably have a website title… one of the best ways to protected your web page is with Let’s Encrypt, which supplies unfastened, depended on certificate. Observe our Let’s Encrypt guide for Nginx to set this up.
    • In the event you should not have a website… and you’re simply the usage of this configuration for trying out or non-public use, you’ll use a self-signed certificates as a substitute. This gives the similar form of encryption, however with out the area validation. Observe our self-signed SSL guide for Nginx to get arrange.

When you find yourself completed the setup steps, log into your server as your sudo person and proceed beneath.

Step 1 — Making a MySQL Database and Consumer for WordPress

Step one that we will be able to take is a preparatory one. WordPress makes use of MySQL to regulate and retailer web page and person data. We’ve got MySQL put in already, however we want to make a database and a person for WordPress to make use of.

To get began, log into the MySQL root (administrative) account. If MySQL is configured to make use of the auth_socket authentication plugin (the default), you’ll log into the MySQL administrative account the usage of sudo:

In the event you modified the authentication way to make use of a password for the MySQL root account, use the next layout as a substitute:

You’ll be induced for the password you put for the MySQL root account.

First, we will create a separate database that WordPress can keep an eye on. You’ll be able to name this no matter you want to, however we will be able to be the usage of wordpress on this information to stay it easy. You’ll be able to create the database for WordPress by means of typing:

  • CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Notice: Each MySQL observation will have to lead to a semi-colon (;). Test to verify that is provide in case you are working into any problems.

Subsequent, we’re going to create a separate MySQL person account that we will be able to use solely to perform on our new database. Growing one-function databases and accounts is a good suggestion from a control and safety point of view. We will be able to use the title wordpressuser on this information. Be at liberty to switch this if you want.

We’re going to create this account, set a password, and grant get entry to to the database we created. We will be able to do that by means of typing the next command. Bear in mind to make a choice a powerful password right here on your database person:

  • GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

You presently have a database and person account, every made in particular for WordPress. We want to flush the privileges in order that the present example of MySQL is aware of in regards to the contemporary adjustments now we have made:

Go out out of MySQL by means of typing:

The MySQL consultation will go out, returning you to the common Linux shell.

Step 2 — Putting in Further PHP Extensions

When putting in our LEMP stack, we most effective required an overly minimum set of extensions with the intention to get PHP to keep in touch with MySQL. WordPress and lots of of its plugins leverage further PHP extensions.

We will be able to obtain and set up one of the vital hottest PHP extensions to be used with WordPress by means of typing:

  • sudo apt replace
  • sudo apt set up php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

Notice: Every WordPress plugin has its personal set of necessities. Some would possibly require further PHP applications to be put in. Test your plugin documentation to find its PHP necessities. If they’re accessible, they may be able to be put in with apt as demonstrated above.

When you find yourself completed putting in the extensions, restart the PHP-FPM procedure in order that the working PHP processor can leverage the newly put in options:

  • sudo systemctl restart php7.2-fpm

We have now all the vital PHP extensions put in at the server.

Step 3 — Configuring Nginx

Subsequent, we will be able to be making a couple of minor changes to our Nginx server block information. In line with the prerequisite tutorials, you’ll have a configuration document on your web page within the /and so on/nginx/sites-available/ listing configured to reply to your server’s area title or IP cope with and secure by means of a TLS/SSL certificates. We’re going to use /and so on/apache2/sites-available/wordpress for instance right here, however you must replace the trail in your configuration document the place suitable.

Moreover, we will be able to use /var/www/wordpress as the basis listing of our WordPress set up. You need to use the internet root specified for your personal configuration.

Notice: It is conceivable you’re the usage of the /and so on/nginx/sites-available/default default configuration (with /var/www/html as your internet root). That is wonderful to make use of if you are most effective going to host one website online in this server. If now not, it is best to separate the vital configuration into logical chunks, one document in line with web page.

Open your web page’s server block document with sudo privileges to start out:

  • sudo nano /and so on/nginx/sites-available/wordpress

Inside the principle server block, we want to upload a couple of location blocks.

Get started by means of developing exact-matching location blocks for requests to /favicon.ico and /robots.txt, either one of which we don’t need to log requests for.

We will be able to use an ordinary expression location to check any requests for static information. We will be able to once more flip off the logging for those requests and can mark them as extremely cacheable since those are most often pricey assets to serve. You’ll be able to regulate this static information listing to include some other document extensions your web page would possibly use:

/and so on/nginx/sites-available/wordpress

server {
    . . .

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; permit all; }
    location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    . . .

Within the prevailing location / block, we want to regulate the try_files listing in order that as a substitute of returning a 404 error because the default possibility, keep an eye on is handed to the index.php document with the request arguments.

This must glance one thing like this:

/and so on/nginx/sites-available/wordpress

server {
    . . .
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php$is_args$args;
    . . .

When you find yourself completed, save and shut the document.

Now, we will test our configuration for syntax mistakes by means of typing:

If no mistakes had been reported, reload Nginx by means of typing:

  • sudo systemctl reload nginx

Subsequent, we will be able to obtain and arrange WordPress itself.

Step 4 — Downloading WordPress

Now that our server device is configured, we will obtain and arrange WordPress. For safety causes particularly, it’s at all times advisable to get the most recent model of WordPress from their web page.

Grow to be a writable listing after which obtain the compressed free up by means of typing:

  • cd /tmp
  • curl -LO

Extract the compressed document to create the WordPress listing construction:

We will be able to be transferring those information into our record root momentarily. Ahead of we do this, we will reproduction over the pattern configuration document to the filename that WordPress in fact reads:

  • cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

Now, we will reproduction all the contents of the listing into our record root. We’re the usage of the -a flag to verify our permissions are maintained. We’re the usage of a dot on the finish of our supply listing to suggest that the whole thing inside the listing must be copied, together with any hidden information:

  • sudo cp -a /tmp/wordpress/. /var/www/wordpress

Now that our information are in position, we’re going to assign possession them to the www-data person and workforce. That is the person and workforce that Nginx runs as, and Nginx will want as a way to learn and write WordPress information with the intention to serve the website online and carry out computerized updates.

  • sudo chown -R www-data:www-data /var/www/wordpress

Our information are actually in our server’s record root and feature the right kind possession, however we nonetheless want to entire some extra configuration.

Step 5 — Putting in the WordPress Configuration Document

Subsequent, we want to make some adjustments to the principle WordPress configuration document.

Once we open the document, our first order of industrial will likely be to regulate some secret keys to offer some safety for our set up. WordPress supplies a protected generator for those values in order that you should not have to take a look at to get a hold of just right values by yourself. Those are most effective used internally, so it will not do any harm usability to have complicated, protected values right here.

To snatch protected values from the WordPress secret key generator, sort:

  • curl -s

You’ll get again distinctive values that glance one thing like this:

Caution: It can be crucial that you simply request distinctive values every time. Do NOT reproduction the values proven beneath!


outline('AUTH_KEY', '1jl/vqfsDO NOT COPY THESE VALUES c_j{iwqD^DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); outline('LOGGED_IN_KEY', 'W(50,L_lGkf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); outline('SECURE_AUTH_SALT', 'p32*p,]zpercentLZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h'); outline('NONCE_SALT', 'Q6]U:Ok?j4LpercentZ]h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');

Those are configuration traces that we will paste immediately in our configuration document to set protected keys. Replica the output you won now.

Now, open the WordPress configuration document:

  • sudo nano /var/www/wordpress/wp-config.php

In finding the segment that comprises the dummy values for the ones settings. It’ll glance one thing like this:


. . .

outline('AUTH_KEY',         'put your distinctive word right here');
outline('SECURE_AUTH_KEY',  'put your distinctive word right here');
outline('LOGGED_IN_KEY',    'put your distinctive word right here');
outline('NONCE_KEY',        'put your distinctive word right here');
outline('AUTH_SALT',        'put your distinctive word right here');
outline('SECURE_AUTH_SALT', 'put your distinctive word right here');
outline('LOGGED_IN_SALT',   'put your distinctive word right here');
outline('NONCE_SALT',       'put your distinctive word right here');

. . .

Delete the ones traces and paste within the values you copied from the command line:


. . .


. . .

Subsequent, we want to alter one of the vital database connection settings at the start of the document. You wish to have to regulate the database title, the database person, and the related password that we configured inside of MySQL.

The opposite alternate we want to make is to set the process that WordPress must use to jot down to the filesystem. Since now we have given the internet server permission to jot down the place it must, we will explicitly set the filesystem solution to “direct”. Failure to set this with our present settings would lead to WordPress prompting for FTP credentials once we carry out some movements. This surroundings may also be added beneath the database connection settings, or any place else within the document:


. . .

outline('DB_NAME', 'wordpress');

/** MySQL database username */
outline('DB_USER', 'wordpressuser');

/** MySQL database password */
outline('DB_PASSWORD', 'password');

. . .

outline('FS_METHOD', 'direct');

Save and shut the document when you find yourself completed.

Step 6 — Finishing the Set up Throughout the Internet Interface

Now that the server configuration is entire, we will end up the set up in the course of the internet interface.

For your internet browser, navigate in your server’s area title or public IP cope with:


Make a choice the language you want to use:

WordPress language selection

Subsequent, you’re going to come to the principle setup web page.

Make a choice a reputation on your WordPress web page and make a choice a username (it is suggested now not to make a choice one thing like “admin” for safety functions). A robust password is generated mechanically. Save this password or choose an alternate sturdy password.

Input your e mail cope with and choose whether or not you wish to have to deter search engines like google from indexing your web page:

WordPress setup installation

While you click on forward, you’re going to be taken to a web page that activates you to log in:

WordPress login prompt

Whenever you log in, you’re going to be taken to the WordPress management dashboard:

WordPress login prompt


WordPress must be put in and able to make use of! Some not unusual subsequent steps are to make a choice the permalinks surroundings on your posts (may also be present in Settings > Permalinks) or to choose a brand new theme (in Look > Subject matters). If that is your first time the usage of WordPress, discover the interface a bit of to get accustomed to your new CMS.