WordPress¶
Install a lightweight WordPress container with OpenLiteSpeed Edge or Stable version on Ubuntu 24.04 Linux.
Prerequisites¶
Configuration¶
Edit the .env
file to update the demo site domain, default MySQL user, and password. Feel free to check Docker hub Tag page if you want to update default openlitespeed and php versions.
Installation¶
Clone this repository or copy the files from this repository into a new folder:
git clone https://github.com/litespeedtech/ols-docker-env.git
cd
to the folder in which docker-compose.yml
is saved, and run: docker compose up
Note: If you wish to run a single web server container, please see the usage method here.
Components¶
The docker image installs the following packages on your system:
Component | Version |
---|---|
Linux | Ubuntu 24.04 |
OpenLiteSpeed | 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 Encryptbin
contains multiple CLI scripts to allow you add or delete virtual hosts, install applications, upgrade, etcdata
stores the MySQL databaselogs
contains all of the web server logs and virtual host access logslsws
contains all web server configuration filessites
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
docker compose up -d
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
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
mod_secure
on the web server: bash bin/webadmin.sh [-M, --mod-secure] disable
Accessing the Database¶
After installation, you can use phpMyAdmin 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/openlitespeed:latest
RUN apt update && apt install lsphp83-pspell -y
build: ./custom
line under the image: litespeedtech
of docker-composefile
. So it will look like this: litespeed:
image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
build: ./custom
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.
How do I Create a Dedicated Virtual Host Configuration?¶
OpenLiteSpeed's Docker solution uses docker.conf
as a template config file by default. If you want to customize some specific features from a dedicated virtual host, please follow these steps:
- Create the virtual host you want by following the Creating a Domain and Virtual Host method
- In the OpenLiteSpeed WebAdmin Console, navigate to VHost Template > Template > Member Virtual Hosts, and choose the domain you want to be created as a dedicated virtual host
- Click the Instantiate feature from the Actions column. Now you should be able to find the dedicated virtual host in the Virtual Hosts tab.