How to Install WordPress with Lighttpd on Ubuntu Linux

Computer monitor with security lock icon
Computer monitor with security lock icon

Web admins often install WordPress on Ubuntu Linux with Apache2 or Nginx and MariaDB with PHP support. This post shows you how to use an alternative HTTP server called Lighttpd HTTP server instead.

Lighttpd is a secure, fast, and flexible HTTP server with a smaller memory footprint than other webservers. In addition, its event-driven architecture is optimized for many parallel connections (keep-alive), which is essential for high-performance dynamic applications.

WordPress, the most powerful and popular content management system (CMS), is the right tool to develop and build robust and dynamic websites based on PHP is flexible and can be run on various HTTP servers.

When you’re ready to set up WordPress with Lighttpd support, follow the steps below:

Install Lighttpd HTTP Server

sudo apt update
sudo apt install lighttpd

After installing Lighttpd, the commands below can be used to stop, start and enable Lighttpd service to always startup when the server boots up.

sudo systemctl stop lighttpd.service
sudo systemctl start lighttpd.service
sudo systemctl enable lighttpd.service

Install MariaDB Database Server

OrangeHRM also requires a database server. And MariaDB database server is a great place to start. To install it, run the commands below.

sudo apt install mariadb-server mariadb-client

After installing, the commands below can be used to stop, start and enable the MariaDB service to always start up when the server boots.

sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service

After that, run the commands below to secure the MariaDB server.

sudo mysql_secure_installation

When prompted, answer the questions below by following the guide.

  • Enter current password for root (enter for none): Press the Enter
  • Set root password? [Y/n]: Y
  • New password: Enter password
  • Re-enter new password: Repeat password
  • Remove anonymous users? [Y/n]: Y
  • Disallow root login remotely? [Y/n]: Y
  • Remove test database and access to it? [Y/n]:  Y
  • Reload privilege tables now? [Y/n]:  Y

Restart MariaDB server

sudo systemctl restart mysql.service

Install PHP 7.1 FastCGI  and Related Modules

PHP 7.1 isn’t available on Ubuntu default repositories… to install it, you will have to get it from third-party repositories.

Run the commands below to add the below third party repository to upgrade to PHP 7.1

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php

Then update and upgrade to PHP 7.1

sudo apt update

After that, run the commands below to install PHP7.1-FastCGI and related PHP modules. Many PHP modules perform different functions. however, the ones below may be needed when developing PHP-based websites.

sudo apt install php7.1-cgi php7.1-mcrypt php7.1-cli php7.1-mysql php7.1-gd php7.1-imagick php7.1-recode php7.1-tidy php7.1-xml php7.1-xmlrpc

After installing PHP7.1-FastCGI, you can enable PHP-FastCGI modules by running the commands below.

sudo sudo lighttpd-enable-mod fastcgi 
sudo lighttpd-enable-mod fastcgi-php

If the commands above fail, install the package below.

sudo apt install libterm-readline-gnu-perl

Then run the commands to enable the modules again; this time, they should work.

 sudo /etc/init.d/lighttpd force-reload

Create WordPress Database

Now that you’ve installed all the required packages, continue below to start configuring the servers. First, run the commands below to create a blank WordPress database.

To log on to the MariaDB database server, run the commands below.

sudo mysql -u root -p

Then create a database called wpdb

CREATE DATABASE wpdb;

Create a database user called wpdbuser with a new password

CREATE USER 'wpdbuser'@'localhost' IDENTIFIED BY 'new_password_here';

Then grant the user full access to the database.

GRANT ALL ON wpdb.* TO 'wpdbuser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;

Finally, save your changes and exit.

FLUSH PRIVILEGES;
EXIT;

Configure Lighttpd PHP-FastCGI Settings

Next, you may want to configure Lighttpd to use PHP server scripting properly. The default PHP-FastCGI configuration file is located at /etc/php/7.1/cgi/php.ini

Open the PHP Lighttpd configuration file by running the commands below

sudo nano /etc/php/7.1/cgi/php.ini

Then edit the file to suit your environment. Some crucial lines to consider:

file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 100M
cgi.fix_pathinfo=0
date.timezone = America/Chicago

Next, open the Lighttpd site configuration file. By default, it’s stored at /etc/lighttpd/lighttpd.conf

sudo nano /etc/lighttpd/lighttpd.conf

They configure the highlighted lines below to enable its rewrite module, create a VirtualHost for our site, and save the file. Remember to replace example.com with your domain name.

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
        "mod_rewrite",
)


$HTTP["host"] =~ "(^|www\.)example.com$" {
    server.document-root = "/var/www/html/wordpress"
    server.errorlog      = "/var/log/lighttpd/example.com-error.log"
    server.error-handler-404 = "/index.php"
}

server.document-root        = "/var/www/html"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80


index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny             = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )

# default listening port for IPv6 falls back to the IPv4 port
## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Next, run the commands below to open the FastCGI default configuration file for Lighttpd.

sudo nano /etc/lighttpd/conf-available/15-fastcgi-php.conf

Then confirm that PHP-FastCGI is configured, as shown in the highlighted portion below, to use PHP 7.1.

# -*- depends: fastcgi -*-
# /usr/share/doc/lighttpd/fastcgi.txt.gz 
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions#mod_fastcgi-fastcgi

## Start an FastCGI server for php (needs the php7.1-cgi package)
fastcgi.server += ( ".php" =>
        ((
                "bin-path" => "/usr/bin/php-cgi7.1",
                "socket" => "/var/run/lighttpd/php.socket",
                "max-procs" => 1,
                "bin-environment" => (
                        "PHP_FCGI_CHILDREN" => "4",
                        "PHP_FCGI_MAX_REQUESTS" => "10000"
                ),
                "bin-copy-environment" => (
                        "PATH", "SHELL", "USER"
                ),
                "broken-scriptfilename" => "enable"
        ))
)

Download WordPress Latest Release

Next, visit the WordPress site and download the latest version.

After downloading, run the commands below to extract the downloaded file and move it into a new WordPress root directory.

cd /tmp && wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz
sudo mv wordpress /var/www/html/wordpress

Then run the commands below to set the correct permissions for WordPress.

sudo chown -R www-data:www-data /var/www/html/wordpress/
sudo chmod -R 755 /var/www/html/wordpress/

Configure WordPress

Now that Lighttpd is configured, run the commands below to create a WordPress wp-config.php file.

sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

Then run the commands below to open the WordPress configuration file.

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

Enter the highlighted text below that you created for your database and save.

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

/** MySQL database username */
define('DB_USER', 'wpdbuser');

/** MySQL database password */
define('DB_PASSWORD', 'user_password_here');

/** MySQL hostname */
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', '');

Restart Lighttpd services

sudo systemctl restart lighttpd.service

After that, open your browser and browse your domain name to launch the WordPress configuration wizard.

You should see the WordPress setup wizard complete.

Please follow the wizard carefully.

http://example.com
wordpress ubuntu installation

Then type the WordPress website name and create a new admin user and password. Then click install.

WordPress install on ubuntu

This should install WordPress.

wordpress install ubuntu

Congratulations! You’ve successfully installed WordPress on Ubuntu.

You may also like the post below:

Posted by
Richard

I love computers; maybe way too much. What I learned I try to share at geekrewind.com.

2 Comments

  1. When trying to enable mysql on boot I’m getting an error.
    # sudo systemctl enable mysql.service
    Synchronizing state of mysql.service with SysV service script with
    /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable mysql
    Failed to enable unit: Refusing to operate on linked unit file
    mysql.service
    Solution:
    sudo systemctl enable mariadb.service

  2. Thank you very much!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: