Skip to content

WordPress

Install a Lightweight WordPress container with LiteSpeed Web Server Enterprise stable version based on Ubuntu 24.04 Linux.

Prerequisites

  1. Install Docker
  2. Install Docker Compose
  3. Clone this repository or copy the files from this repository into a new folder:
git clone https://github.com/litespeedtech/lsws-docker-env.git

Configuration

Edit the .env file to update the demo site domain, default MySQL user, and password.

Installation

Open a terminal, cd to the folder in which docker-compose.yml is saved, and run:

docker compose up

Components

The docker image installs the following packages on your system:

Component Version
Linux Ubuntu 24.04
LiteSpeed Latest version
MariaDB Stable version: 11.4
PHP Latest version
LiteSpeed Cache Latest from WordPress.org
ACME Latest from ACME official
WordPress Latest from WordPress
phpMyAdmin Latest from dockerhub

Data Structure

Cloned project

├── acme
├── bin
│   └── container
├── data
│   └── db
├── logs
│   ├── access.log
│   ├── error.log
│   ├── lsrestart.log
│   └── stderr.log
├── lsws
│   ├── admin-conf
│   └── conf
├── sites
│   └── localhost
├── LICENSE
├── README.md
└── docker-compose.yml
  • acme contains all applied certificates from Lets Encrypt

  • bin contains multiple CLI scripts to allow you add or delete virtual hosts, install applications, upgrade, etc

  • data stores the MySQL database

  • logs contains all of the web server logs and virtual host access logs

  • lsws contains all web server configuration files

  • sites contains the document roots (the WordPress application will install here)

Usage

Starting a Container

Start the container with the up or start methods:

docker compose up

You can run with daemon mode, like so:

docker compose up -d

The container is now built and running.

Stopping a Container

docker compose stop

Removing Containers

To stop and remove all containers, use the down command:

docker compose down

Setting the WebAdmin Password

We strongly recommend you set your personal password right away.

bash bin/webadmin.sh my_password

Starting a Demo Site

After running the following command, you should be able to access the WordPress installation with the configured domain. By default the domain is http://localhost.

bash bin/demosite.sh

Creating a Domain and Virtual Host

bash bin/domain.sh [-A, --add] example.com

Deleting a Domain and Virtual Host

bash bin/domain.sh [-D, --del] example.com

Creating a Database

You can either automatically generate the user, password, and database names, or specify them. Use the following to auto generate:

bash bin/database.sh [-D, --domain] example.com

Use this command to specify your own names, substituting user_name, my_password, and database_name with your preferred values:

bash bin/database.sh [-D, --domain] example.com [-U, --user] USER_NAME [-P, --password] MY_PASS [-DB, --database] DATABASE_NAME

Installing a WordPress Site

To preconfigure the wp-config file, run the database.sh script for your domain, before you use the following command to install WordPress:

./bin/appinstall.sh [-A, --app] wordpress [-D, --domain] example.com

Install ACME

We need to run the ACME installation command the first time only.

With email notification:

./bin/acme.sh [-I, --install] [-E, --email] EMAIL_ADDR

Applying a Let's Encrypt Certificate

Use the root domain in this command, and it will check for a certificate and automatically apply one with and without www:

./bin/acme.sh [-D, --domain] example.com

Other parameters:

  • [-r, --renew]: Renew a specific domain with -D or --domain parameter if possible. To force renew, use -f parameter.
  • [-R, --renew-all]: Renew all domains if possible. To force renew, use -f parameter.  
  • [-f, -F, --force]: Force renew for a specific domain or all domains.
  • [-v, --revoke]: Revoke a domain.  
  • [-V, --remove]: Remove a domain.

Update Web Server

To upgrade the web server to latest stable version, run the following:

bash bin/webadmin.sh [-U, --upgrade]

Apply OWASP ModSecurity

Enable OWASP mod_secure on the web server:

bash bin/webadmin.sh [-M, --mod-secure] enable

Disable OWASP mod_secure on the web server:

bash bin/webadmin.sh [-M, --mod-secure] disable

Apply license to LSWS

Apply your license with command:

bash bin/webadmin.sh [-S, --serial] YOUR_SERIAL

Apply trial license to server with command:

bash bin/webadmin.sh [-S, --serial] TRIAL

Accessing the Database

After installation, you can use phpMinAdmin to access the database by visiting http://127.0.0.1:8080 or https://127.0.0.1:8443. The default username is root, and the password is the same as the one you supplied in the .env file.

Customization

If you want to customize the image by adding some packages, e.g. lsphp83-pspell, just extend it with a Dockerfile. 1. We can create a custom folder and a custom/Dockerfile file under the main project. 2. Add the following example code to Dockerfile under the custom folder

FROM litespeedtech/litespeed:latest
RUN apt update && apt install lsphp83-pspell
3. Add build: ./custom line under the "image: litespeedtech" of docker-composefile. So it will looks like this
  litespeed:
    image: litespeedtech/litespeed:${LSWS_VERSION}-${PHP_VERSION}
    build: ./custom
4. Build and start it with command:
docker compose up --build

FAQ

How do I Configure MTU with Docker?

A common problem when operating dockers within a virtualization infrastructure is that the network cards provided to virtual machines do not have the default MTU of 1500. If the outgoing interface has an MTU smaller than 1500, please consider applying the following rules to docker-compose.yml. This will avoid the package getting trimmed.

networks:                                
  default:                               
    driver: bridge                       
    driver_opts:                         
      com.docker.network.driver.mtu: 1400

Be sure to substitute the MTU number 1400 with your own docker outgoing interface MTU size.

How do I Add a Bind Mount for php.ini?

Note

We are using lsphp80 in this example, but you can replace that with your own preferred PHP version.

Move or copy php.ini out of the LiteSpeed folder by running the following command from the host:

docker-compose exec litespeed su -c 'mv /usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini /usr/local/lsws/conf'

Edit docker-compose.yml and add the php.ini bind mount by inserting this line under litespeed > volumes:

- ./lsphp80:/usr/local/lsws/lsphp80/etc/php/8.0/litespeed

The updated section should look like this:

 litespeed:
    image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
    env_file:
      - .env
    volumes:
        - ./lsws/conf:/usr/local/lsws/conf
        - ./lsphp80:/usr/local/lsws/lsphp80/etc/php/8.0/litespeed

Move or copy php.ini back to its original location:

docker-compose exec litespeed su -c 'mv /usr/local/lsws/conf/php.ini /usr/local/lsws/lsphp80/etc/php/8.0/litespeed/php.ini'

Change the host directory permission:

sudo chown -R root:root lsphp80

Is Podman Compatible With the Solution?

Yes, overall Podman and Docker are compatible with each other.

Once you have the podman-docker and the podman-compose packages installed, start the Podman systemd socket-activated service using the following command:

systemctl start podman.socket

You can now use Podman with Compose.