You are on page 1of 23

// Tutorial //

How To Install WordPress on Ubuntu 22.04 with a

LAMP Stack

Published on April 26, 2022 · Updated on April 26, 2022


LAMP Stack WordPress Ubuntu Ubuntu 22.04

By Lisa Tagliaferri and Jeanelle Horcasitas

Not using Ubuntu 22.04?


Choose a di erent version or distribution.
Ubuntu 22.04

Introduction

WordPress is a popular, open-source content management system CMS that


allows users to create, customize, and manage content on their website. A CMS
provides the basic infrastructure to build a website, which is useful for users who
may not have the knowledge to build and code their own website from scratch.
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
The WordPress CMS has many customization tools, such as an administrative
dashboard with a user-friendly interface to create new web pages, add media,
and more. For these reasons, WordPress is one of the most used CMS in the
market today.
There are many different approaches to getting access to WordPress, but some
setup processes are more complex than others. This tutorial is intended for those
who desire to install and administer a WordPress instance on an unmanaged cloud
server via the command line. Though this approach requires more steps than a
ready-made WordPress installation, it offers administrators greater control over
their WordPress environment.
This tutorial will be using a LAMP Linux, Apache, MySQL, and PHP stack, which
is one option for a server architecture that supports WordPress by providing the
Linux operating system, Apache web server, MySQL database, and PHP
programming language. We’ll install and set up WordPress via LAMP on a Linux
Ubuntu 22.04 server.
Depending on your needs and goals, you may find other options that are more
suitable. As open-source software, WordPress can be freely downloaded and
installed, but to be available on the web, you will likely need to purchase cloud
infrastructure and a domain name. Continue following this guide if you are
interested in working through the server-side installation and setup of a
WordPress site.
If you are looking to access a ready-made WordPress installation, DigitalOcean
Marketplace offers a one-click app to get you started with WordPress through
installation when spinning up your server.

Prerequisites

To complete this tutorial, you will need:


One Ubuntu 22.04 server set up by following the Ubuntu 22.04 initial server
setup guide. Ensure you have a non-root sudo user and firewall enabled.
A LAMP stack installed on your server. Follow our guide on How To Install
Linux, Apache, MySQL, PHP LAMP stack on Ubuntu 22.04 to install and
configure this software.
Your site secured with TLS/SSL certificates. WordPress takes in user input and
stores user data, so it is important for it to have a layer of security. TLS/SSL is the
technology that allows you to encrypt the traffic from your site so that your and
your users’ connection is secure. Here are two options available to meet this
requirement:
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
If you have a domain name you can secure your site with Let’s Encrypt, which
provides free, trusted certificates. Follow our Let’s Encrypt guide for Apache to
set this up.
If you do not have a domain and you are just using this configuration for testing
or personal use, you can use a self-signed certificate instead. This provides the
same type of encryption, but without domain validation. Follow our self-signed
SSL guide for Apache to get set up.
When you are finished with the setup, log into your server as your sudo user and
continue to the first step.
Step 1 — Creating a MySQL Database and User for

WordPress

The first step is a preparatory one. WordPress uses MySQL to manage and store
site and user information. You have MySQL installed already, but need to make a
database and a user for WordPress to use.
To get started, log into the MySQL root (administrative) account by issuing the
following command (note that this is not the root user of your server):
$ sudo mysql Copy

Note: If you installed MySQL by following a tutorial other than the one listed in the
prerequisites, you may have enabled password authentication for your root
MySQL user. If so, you can connect to MySQL with the following command:
$ mysql -u root -p Copy

Within the database, create a dedicated database for WordPress to control. You
can call this whatever you would like, but we will be using the name wordpress in
this guide. Create the database for WordPress by running the following command:
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf Copy

Note: Every MySQL statement must end in a semi-colon ( ; ). Check to make sure
this is present if you are running into any issues.

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Next, you’re going to create a separate MySQL user account that you’ll use
exclusively to operate your new database. Creating specific databases and
accounts can support you from a management and security standpoint. We will
use the name wordpressuser in this guide, but feel free to use any name you
prefer for this use.
You can create this user by running the following command. Remember to choose
a strong password here for your database user where we have password :
mysql> CREATE USER ' wordpressuser '@'%' IDENTIFIED WITH mysql_native_pas Copy

Next, let the database know that your wordpressuser should have complete
access to the database you set up:
mysql> GRANT ALL ON wordpress .* TO ' wordpressuser '@'%'; Copy
You now have a database and user account, each made specifically for
WordPress. You need to flush the privileges so that the current instance of MySQL
knows about the recent changes made:
mysql> FLUSH PRIVILEGES; Copy
Exit out of MySQL by writing the following:
mysql> EXIT; Copy
In the next step, you’ll lay some foundations for WordPress plugins by
downloading PHP extensions for your server.
Step 2 — Installing Additional PHP Extensions

When setting up our LAMP stack, we only required a very minimal set of
extensions in order to get PHP to communicate with MySQL. WordPress and many
of its plugins, however, leverage additional PHP extensions.
You can download and install some of the most popular PHP extensions for use
with WordPress. But first, use the APT package management tools to update your
local package index:
$ sudo apt update

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Copy
Then you can install the various PHP extensions for WordPress:
$ sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-s Copy

This will lay the groundwork for installing additional plugins on your WordPress
site.
Note: Each WordPress plugin has its own set of requirements. Some may require
additional PHP packages to be installed. Check your plugin documentation to
discover its PHP requirements. If they are available, they can be installed with apt
as demonstrated in the previous example.

You’ll need to restart Apache to load these new extensions. In the next section,
you’ll make some more tweaks to Apache’s configuration, so you can wait until
then, or restart now to complete the PHP extension process:
$ sudo systemctl restart apache2 Copy
After you’ve restarted, or if you’re choosing to wait, you can continue to the next
section to begin making adjustments to the Apache configuration.
Step 3 — Adjusting Apache’s Con guration to Allow

for .htaccess Overrides and Rewrites

Next, you’ll be making a few minor adjustments to your Apache configuration.


Based on the prerequisite tutorials, you should have a configuration file for your
site in the /etc/apache2/sites-available/ directory.
In this guide, we’ll use /etc/apache2/sites-available/ wordpress .conf as an
example, but you should substitute the path to your existing configuration file
where appropriate. Additionally, we will use /var/www/ wordpress as the root
directory of our WordPress installation. You should use the web root specified in
your own configuration. If you followed our LAMP tutorial, it may be your domain
name instead of wordpress in both of these instances.
Note: It’s possible you are using the 000-default.conf default configuration
(with /var/www/html as your web root). This is fine to use if you’re only going to

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
host one website on this server. If not, it’s better to split the necessary
configuration into logical chunks, one file per site.

With your paths identified, you can move on to working with .htaccess so that
Apache can handle configuration changes on a per-directory basis.
Enabling .htaccess Overrides

Currently, the use of .htaccess files is disabled. WordPress and many WordPress
plugins use these files extensively for in-directory tweaks to the web server’s
behavior.
Open the Apache configuration file for your website with your preferred text
editor. Here, we’ll use nano :
$ sudo nano /etc/apache2/sites-available/wordpress.conf Copy
To allow .htaccess files, you need to set the AllowOverride directive within a
Directory block pointing to your document root. Add the following content inside
the VirtualHost block in your configuration file, making sure to use the correct
web root directory:
/etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80>
. . .
<Directory /var/www/ wordpress/ >
AllowOverride All
</Directory>
. . .
</VirtualHost>

When you are finished, save and close the file. In nano , you can do this by
pressing CTRL and X together, then Y , and ENTER .
Enabling the Rewrite Module

Next, you can enable mod_rewrite so that you can use the WordPress permalink
feature:
$ sudo a2enmod rewrite Copy

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
This allows you to have more human-readable permalinks to your posts, like the
following two examples:
http://example.com/2012/post-name/
http://example.com/2012/12/30/post-name

The a2enmod command calls a script that enables the specified module within the
Apache configuration.
Enabling the Changes

Before implementing the changes you’ve made, check to make sure you haven’t
made any syntax errors by running the following test:
$ sudo apache2ctl configtest Copy
You may receive output like the following:
Output
AH00558: apache2: Could not reliably determine the server's fully qualif
Syntax OK

If you wish to suppress the top line, add a ServerName directive to your main
(global) Apache configuration file at /etc/apache2/apache2.conf . The
ServerName can be your server’s domain or IP address. This is just a warning
message, however, and doesn’t affect the functionality of your site. As long as the
output contains Syntax OK , you are ready to continue.
Restart Apache to implement the changes. Make sure to restart now even if you
have restarted earlier in this tutorial:
$ sudo systemctl restart apache2 Copy
Next, you’ll download and set up WordPress itself.
Step 4 — Downloading WordPress

Now that your server software is configured, you can download and set up
WordPress. For security reasons, it is always recommended to get the latest
version of WordPress from their site.
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
First, change into a writable directory (we recommend a temporary one like
/tmp ):

$ cd /tmp Copy
Then download the compressed release with the following curl command:
$ curl -O https://wordpress.org/latest.tar.gz Copy
Extract the compressed file to create the WordPress directory structure:
$ tar xzvf latest.tar.gz Copy
You’ll be moving these files into your document root momentarily. Before doing so,
you can add a dummy .htaccess file so that this will be available for WordPress
to use later.
Create the file by running the following:
$ touch /tmp/wordpress/.htaccess Copy
You’ll also copy over the sample configuration file to the filename that WordPress
reads:
$ cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php Copy
Additionally, create the upgrade directory so that WordPress won’t run into
permissions issues when trying to do this on its own following an update to its
software:
$ mkdir /tmp/wordpress/wp-content/upgrade Copy
Now you can copy the entire contents of the directory into your document root.
We are using a dot at the end of our source directory to indicate that everything
within the directory should be copied, including hidden files (like the .htaccess
file we created). Ensure that you replace the /var/www/ wordpress directory with
the directory you have set up on your server:
$ sudo cp -a /tmp/wordpress/. /var/www/ wordpress Copy

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
You’re now ready to configure your WordPress directory.
Step 5 — Con guring the WordPress Directory

Before starting the web-based WordPress setup, you need to adjust some items
in your WordPress directory.
Adjusting the Ownership and Permissions

Another important step is setting up reasonable file permissions and ownership


for the files and directories WordPress uses to function.
Start by giving ownership of all the files to the www-data user and group. This is
the user that the Apache web server runs as, and Apache will need to be able to
read and write WordPress files in order to serve the website and perform
automatic updates.
Update the ownership with the chown command which allows you to modify file
ownership. Be sure to point to your server’s relevant directory:
$ sudo chown -R www-data:www-data /var/www/ wordpress Copy
Next, run two find commands to set the correct permissions on the WordPress
directories and files. This first find command sets every directory within the
/var/www/<>^wordpress<^> directory and sets each one’s permissions to 750 :

$ sudo find /var/www/ wordpress / -type d -exec chmod 750 {} \; Copy


This one finds each file within the directory and sets their permissions to 640 :
$ sudo find /var/www/ wordpress / -type f -exec chmod 640 {} \; Copy
These permissions should get you working effectively with WordPress, but note
that some plugins and procedures may require additional tweaks.
Setting Up the WordPress Con guration File

Now, you need to make some changes to the main WordPress configuration file.
When you open the file, your first task will be to adjust some secret keys to
provide a level of security for your installation. WordPress provides a secure
generator for these values so that you do not have to try to come up with good
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
values on your own. These are only used internally, so it won’t hurt usability to
have complex, secure values here.
To grab secure values from the WordPress secret key generator, run the following:
$ curl -s https://api.wordpress.org/secret-key/1.1/salt/ Copy
You will receive unique values that resemble output similar to the following:
Warning! It is important that you request unique values each time. Do NOT copy
the following example values!

Output
define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES
define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES
define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES
define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES
define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES
define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES
define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES
define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES

These are configuration lines that you can place directly into your configuration
file to set secure keys. Copy the output you received now.
Next, open the WordPress configuration file:
$ sudo nano /var/www/ wordpress /wp-config.php Copy
Find the section that contains the example values for those settings:
/var/www/wordpress/wp-config.php
. . .

define('AUTH_KEY', 'put your unique phrase here');


define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
. . .

Delete those lines and insert the values you copied from the command line:
/var/www/wordpress/wp-config.php
. . .

define('AUTH_KEY', ' VALUES COPIED FROM THE COMMAND LINE ');


define('SECURE_AUTH_KEY', ' VALUES COPIED FROM THE COMMAND LINE ');
define('LOGGED_IN_KEY', ' VALUES COPIED FROM THE COMMAND LINE ');
define('NONCE_KEY', ' VALUES COPIED FROM THE COMMAND LINE ');
define('AUTH_SALT', ' VALUES COPIED FROM THE COMMAND LINE ');
define('SECURE_AUTH_SALT', ' VALUES COPIED FROM THE COMMAND LINE ');
define('LOGGED_IN_SALT', ' VALUES COPIED FROM THE COMMAND LINE ');
define('NONCE_SALT', ' VALUES COPIED FROM THE COMMAND LINE ');

. . .

Next, you’re going to modify some of the database connection settings at the
beginning of the file. You need to adjust the database name, the database user,
and the associated password that you configured within MySQL.
The other change you need to make is to set the method that WordPress should
use to write to the filesystem. Since you’ve given the web server permission to
write where it needs to, you can explicitly set the filesystem method to “direct”.
Failure to set this with your current settings would result in WordPress prompting
for FTP credentials when performing some actions.
This setting can be added below the database connection settings, or anywhere
else in the file:
/var/www/wordpress/wp-config.php
. . .

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', ' wordpress ' );

/** MySQL database username */


define( 'DB_USER', ' wordpressuser ' );

/** MySQL database password */


define( 'DB_PASSWORD', ' password ' );

/** MySQL hostname */

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */


define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */


define( 'DB_COLLATE', '' );

. . .

define('FS_METHOD', 'direct');

Save and close the file when you are finished.


Step 6 — Completing the Installation Through the

Web Interface

Now that the server configuration is complete, you can complete the installation
through the web interface.
In your web browser, navigate to your server’s domain name or public IP address:
https:// server_domain_or_IP

You will be prompted to select the language you would like to use:

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Next, you will come to the main setup page.
Select a name for your WordPress site and choose a username. It is
recommended to choose something unique and avoid common usernames like
“admin” for security purposes. A strong password is generated automatically.
Save this password or select an alternative strong password.
Enter your email address and select whether you want to discourage search
engines from indexing your site:

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
When you click ahead, you will be taken to a page that prompts you to log in:

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Once you log in, you will be taken to the WordPress administration dashboard:

At this point, you can begin to design your WordPress website. If this is your first
time using WordPress, explore the interface to get acquainted with your new
CMS.
Conclusion

Congratulations, WordPress is now installed and is ready to be used.


At this point you may want to start doing the following:
Choose your permalinks setting for WordPress posts, which can be found in
Settings Permalinks.
Select a new theme in Appearance Themes.
Install new plugins to increase your site’s functionality under Plugins > Add
New.
If you are going to collaborate with others, you may also wish to add additional
users at this time under Users Add New.

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
You can refer to other resources on alternate ways to install WordPress, learn how
to install WordPress on different server distributions, automate your WordPress
installations, and scale your WordPress sites by checking out our WordPress
Community tag.

Thanks for learning with the DigitalOcean Community. Check out our
offerings for compute, storage, networking, and managed databases.
Learn more about us

About the authors

Lisa Tagliaferri Author

Jeanelle Horcasitas Author


Technical Writer
Educator and writer committed to empowering our community by
providing access to the knowledge and tools for making creative ideas
into a reality

Still looking for an

answer?
Ask a question

Search for more help

Was this helpful? Yes No

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Comments
heusmich
July 28, 2023
I have the problem that I also don´t see the Wordpress website that I have
to access in step 6. Deleting the index.html. and restarting apache doesn´t
help. Does anybody know what to do?
Show replies Reply

jmora2ec
July 22, 2023
I followed this guide ( and prerequisites) I have one wordpress and one
static site on wsl2 I think has better performance than xampp, I made some
tweaks on permissions and symbol links but nothing that google cannot
find. thanks for sharing.
Reply

LittleGreenBlueSeal
April 20, 2023
For those encountering the issue at step 6, where the wordpress config
does not load and your apache index file loads instead, to fix: remove
index.html from the var/www/your_site_directory, then restart apache.
Navigating to your domain/ip opens up the wordpress setup as per the rest
of the instructions. Hope this helps.
Show replies Reply

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Jos Vlaar
April 3, 2023
Using a \ in my database users password caused a database connection
error in WordPress. Removing this character from the password
(miraculously) made everything work…
Reply

Jos Vlaar
April 3, 2023
This comment has been deleted

Julien Croy
March 15, 2023
This guide is broken, followed every step and displays default page at end.
Either missing a path in a config or data is in incorrect folder.
Show replies Reply

aarona2davis
March 1, 2023
After several attempts using this guide it appears there is missing
information. The site will not load, only the default apache page does…
Reply

a9ddb8417d674522bbcbd0e190
October 13, 2022
Guys, i am just getting apache first page when i am browsing localhost on
my browser. I have done everything here few times including reinstalling
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
whole ubuntu. Everytime i get the same apache page. Cant get to install
wordpress . Anyone have any ideas how i can make this work?
Reply

Eduardo Guzman
September 29, 2022
Hello, after installation, when I try to visit:
https://<my_domain>/wp-admin/install.php
For step #6, I get a 404 Not Found nginx/1.18.0
I raised a question directly with Wordpress here, I’ve tried almost everything
but is just not working. Any help is appreciated.
Reply

Sundance Vargas
September 14, 2022
Had to sudo nano /etc/apache2/apache2.conf and change the AllowOveride
to All from None to make postnames work for wordpress…
Directory /var/www/ Options Indexes FollowSymLinks AllowOverride All
Require all granted </Directory>
and then restart apache2
Reply

Load More Comments

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
This work is licensed under a Creative Commons Attribution-NonCommercial- ShareAlike 4.0
International License.

Get our biweekly


newsletter

Sign up for Infrastructure as a


Newsletter.
Sign up

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Hollie's Hub for Good

Working on improving health and


education, reducing inequality,
and spurring economic growth?
We’d like to help.
Learn more

Become a
contributor

You get paid; we donate to tech


nonprofits.
Learn more

Featured on Community

Kubernetes Course Learn Python 3 Machine Learning in Python

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Getting started with Go Intro to Kubernetes

DigitalOcean Products

Cloudways Virtual Machines Managed Databases Managed Kubernetes


Block Storage Object Storage Marketplace VPC Load Balancers

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow –
whether you’re running one virtual machine or ten thousand.
Learn more

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.
Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com
Get started
This promotional offer applies to new account only.

© 2023 DigitalOcean, LLC.

Convert web pages and HTML files to PDF in your applications with the Pdfcrowd HTML to PDF API Printed with Pdfcrowd.com

You might also like