This post will demonstrate using Podman to provision two stand-alone SSL-secured WordPress websites with different root domains on a single server.Β Both websites are backed by individual Oracle MySQL databases and phpMyAdmin interfaces.
After being inspired by a HTTPS/SSL security article created by my colleague Anastasios Kentominas, I started tinkering with the idea of creating a website to serve my own blog. After exploring the many different blog hosting frameworks, I settled on WordPress. Though there are many options out there for pay-to-host WordPress sites, I wanted to experiment and see if I could get a secure WordPress website hosted from my home network.
Obviously, there are network security risks in this. I plan to share how I set the networking up to (hopefully) protect my home network while also not paying monthly hosting fees for a low-traffic website. I will create a future blog post describing that part of the project.
I also wanted to hone my Podman skills. I had set up LAMP servers before, but this time, I wanted to see if I could get everything deployed on an Oracle Linux server, with each LAMP service running in its own container. There are many examples on the internet on how to achieve this, but I had some additional requirements. I wanted to be able to serve multiple independent websites from the same server simultaneously. I also wanted access to a stand-alone phpMyAdmin UI for each website I was hosting.
Prerequisites
To get started, you will need a server that has access to the internet and has a functioning version of Podman installed.
Server Hardware
The setup described below should be compatible with any modern MacOS, Windows, or Linux operating system. I’ve tested it on MacOS 14.3, Ubuntu 22, Ubuntu 20, Oracle Linux 8, and Oracle Linux 9. I haven’t tested it on Windows, which is why I am saying it “should” work. If anyone does end up testing it on Windows, please do let me know your results in the comments.
That being said, this configuration should run on any server hardware that can run Podman and that the container base images are compatible with.
To check your server architecture against the images used in this demo, take a look at the supported architecture sections in the documentation included with the official images below:
Docker images used in this demo
- swag – Official documentation
- mysql – Official Image
- phpmyadmin – Official Image
- wordpress – Official Image
If you need help getting this part of the prerequisites completed, let me know in the comments, and I’ll create a blog post on how to get Podman installed and your DNS settings configured.
Networking
The server needs to have port 80 and 443 open, and be reachable via two different URLs (not bare IP addresses), from the public internet.
For people who are trying this at home, I would suggest using the excellent Firewalla Purple Firewall/Router to both secure your network and provide you with a dynamically updating DNS URL that points to your home network. You can also use software-based solutions like the no-ip free Dynamic DNS service.
DNS and Domains
Both websites created in this demo will accept traffic directed to www.<yourdomain>. In addition, one website will be configured to listen on site1.<yourdomain>, and the other website will be configured to listen on site2.<your_other_domain>. These subdomain names (www, site1, site2) are arbitrary and can be configured to suit your needs.
You will need to access your domain DNS settings and create a CNAME record that points those subdomains to the URL of your server.
If you need help with configuring your domain to point to your server URL, please let me know in the comments below and I will create a blog post on that subject.
Downloading the repository
It is important that you download the entire dual-wordpress-phpmyadmin-podman git repository, as several files need to be in place before starting the containers. I suggest you clone the dual-wordpress-phpmyadmin-podman repo from Github, but you can also download a zip file of the configuration if you are not set up with a Github account.
Website Security
A .env file must be created in the root level of the dual-wordpress-phpmyadmin-podmanΒ directory to configure the database and website credentials. This file is where the WordPress website and database credentials are stored. To get started, copy this example to your local filesystem:
This example .env file should be changed to utilize unique and secure usernames and passwords before you create any containers. The .gitignore file in the repository directory is also set to ignore this .env file. This should help prevent you from inadvertently pushing your actual passwords to a Git repository.
Customizing the Website Domain Names
Though site1 and site2 are perfectly good for subdomain names π, the default dual-wordpress-phpmyadmin-podman configuration files point to the domain1.com and domain2.net domains. Before deploying your WordPress websites, you must change the compose.yml file and the nginx configuration files to refer to the domains you configured in the DNS and Domains section above.
Note: You have the option to simplify your setup by using a single domain for both WordPress websites. This means you can create two separate WordPress websites using the same single domain. If you choose this single-domain solution, you will need to rename one of the phpmyadmin subdomains.
Updating the compose.yml file to point to your domain(s)
- Update the environment and volume arrays in the swag service section, changing every reference to domain1.com and domain2.net to your domain(s). Update the email address and time zone as well.
- I suggest you set the STAGING variable to true until you are sure you have the correct configuration. If you try too many times with an invalid config, you will get blocked from creating certificates for a period of time.
Note: When STAGING is set to true, you will NOT get valid SSL certificates, but you can ensure that all the DNS and Firewall settings configured above are correctly resolving and allowing traffic.
Pointing the SWAG NGINX Reverse Proxy to your domains
You may have noticed that when you updated the volumes section in the compose.yml file to point to your domains, you were actually changing the expected names of the nginx configuration files that will be shared from your local Podman host to the container filesystems.
Before starting the containers, it is imperative that you also rename the files on your Podman host to match what the compose.yml file is expecting to find. Specifically, the 4 files listed below will need to be renamed to match the domain names you will be using:
phpmyadmin.domain1.com.phpmyadmin.subdomain.conf
phpmyadmin.domain2.net.phpmyadmin.subdomain.conf
site1.domain1.com.wordpress.subdomain.conf
site2.domain2.net.wordpress.subdomain.conf
These files contain references to the domain names that were part of their original filename. The server_name attribute in each file must be updated to point to domain indicated by their new filename.

Setting WordPress Application Defaults
WordPress utilizes the php.ini file to set application defaults, such as the maximum size for uploaded files or post content. These defaults are often too conservative for modern website assets. To adjust these and any other configuration values supported by the php.ini file, you can modify the values in the php.ini files within the wordpress-site1 and/or wordpress-site2 directories.
A more detailed article describing the php.ini file can be found here.
Creating the WordPress Websites
After setting up your DNS records, server firewall, website/database credentials, and the SWAG configuration files, you are ready to create the websites. podman compose handles the creation of the required containers and inter-container networking. After ensuring your shell is open to the top-level of the dual-wordpress-phpmyadmin-podmanΒ directory, execute the following command:
podman compose up --detach
The β-detach argument tells PodmanΒ to run the containers in the background. This prevents you from accidentally stopping the containers by closing the shell or otherwise ending the process. Take a look at the command line execution and expected output below.
podman compose up --detach
>>>> Executing external compose provider "/usr/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 5.2.2
** excluding: set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=dual-wordpress-phpmyadmin-podman', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=swag -d --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=swag --cap-add NET_ADMIN -e PUID=1000 -e PGID=1000 -e TZ=America/Denver -e URL=unreeled.com -e SUBDOMAINS=site1,phpmyadmin -e EXTRA_DOMAINS=site2.unreeled.net, phpmyadmin.unreeled.net -e VALIDATION=http -e CERTPROVIDER= -e [email protected] -e ONLY_SUBDOMAINS=true -e STAGING=false -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/data/swag:/config -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/swag/default.conf:/config/nginx/site-confs/default.conf -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/swag/site1.unreeled.com.wordpress.subdomain.conf:/config/nginx/proxy-confs/site1.unreeled.com.wordpress.subdomain.conf -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/swag/phpmyadmin.unreeled.com.phpmyadmin.subdomain.conf:/config/nginx/proxy-confs/phpmyadmin.unreeled.com.phpmyadmin.subdomain.conf -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/swag/site2.unreeled.net.wordpress.subdomain.conf:/config/nginx/proxy-confs/site2.unreeled.net.wordpress.subdomain.conf -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/swag/phpmyadmin.unreeled.net.phpmyadmin.subdomain.conf:/config/nginx/proxy-confs/phpmyadmin.unreeled.net.phpmyadmin.subdomain.conf --net dual-wordpress-phpmyadmin-podman_default --network-alias swag -p 443:443 -p 80:80 --restart unless-stopped lscr.io/linuxserver/swag
93863ab47170865914477b36cdda01851d4e5128869b9c132ac2580096b9fd2a
exit code: 0
podman volume inspect dual-wordpress-phpmyadmin-podman_database-site1-data || podman volume create dual-wordpress-phpmyadmin-podman_database-site1-data
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_database-site1-data']
Error: no such volume dual-wordpress-phpmyadmin-podman_database-site1-data
['podman', 'volume', 'create', '--label', 'io.podman.compose.project=dual-wordpress-phpmyadmin-podman', '--label', 'com.docker.compose.project=dual-wordpress-phpmyadmin-podman', 'dual-wordpress-phpmyadmin-podman_database-site1-data']
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_database-site1-data']
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=database-site1 -d --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=database-site1 -e PUID=1000 -e PGID=1000 -e TZ=America/Denver -e MYSQL_ROOT_PASSWORD=I-Can-hazPazw03D -e MYSQL_DATABASE=site1_wordpress -e MYSQL_USER=wordpress-root -e MYSQL_PASSWORD=r00t@nFire! -v dual-wordpress-phpmyadmin-podman_database-site1-data:/var/lib/mysql --net dual-wordpress-phpmyadmin-podman_default --network-alias database-site1 --restart unless-stopped mysql
d1e70227c318efd43e4114d4b2fed964a79255570260afdf4f2c1660ff91086d
exit code: 0
podman volume inspect dual-wordpress-phpmyadmin-podman_database-site2-data || podman volume create dual-wordpress-phpmyadmin-podman_database-site2-data
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_database-site2-data']
Error: no such volume dual-wordpress-phpmyadmin-podman_database-site2-data
['podman', 'volume', 'create', '--label', 'io.podman.compose.project=dual-wordpress-phpmyadmin-podman', '--label', 'com.docker.compose.project=dual-wordpress-phpmyadmin-podman', 'dual-wordpress-phpmyadmin-podman_database-site2-data']
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_database-site2-data']
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=database-site2 -d --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=database-site2 -e PUID=1000 -e PGID=1000 -e TZ=America/Denver -e MYSQL_ROOT_PASSWORD=I-Cant-hazPazw03D -e MYSQL_DATABASE=site2_wordpress -e MYSQL_USER=wordpress-root -e MYSQL_PASSWORD=r8zeDaR00f! -v dual-wordpress-phpmyadmin-podman_database-site2-data:/var/lib/mysql --net dual-wordpress-phpmyadmin-podman_default --network-alias database-site2 --restart unless-stopped mysql
0c17c35852d2e9fc367922fe0b853125e680750417a3e25b3e928129ac2c775e
exit code: 0
podman volume inspect dual-wordpress-phpmyadmin-podman_wordpress-site1-data || podman volume create dual-wordpress-phpmyadmin-podman_wordpress-site1-data
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_wordpress-site1-data']
Error: no such volume dual-wordpress-phpmyadmin-podman_wordpress-site1-data
['podman', 'volume', 'create', '--label', 'io.podman.compose.project=dual-wordpress-phpmyadmin-podman', '--label', 'com.docker.compose.project=dual-wordpress-phpmyadmin-podman', 'dual-wordpress-phpmyadmin-podman_wordpress-site1-data']
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_wordpress-site1-data']
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=wordpress-site1 -d --requires=database-site1 --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=wordpress-site1 -e PUID=1000 -e PGID=1000 -e WORDPRESS_DB_HOST=database-site1 -e WORDPRESS_DB_NAME=site1_wordpress -e WORDPRESS_DB_USER=wordpress-root -e WORDPRESS_DB_PASSWORD=r00t@nFire! -e WORDPRESS_CONFIG_EXTRA= define( 'WP_MEMORY_LIMIT', '333M' ); -v dual-wordpress-phpmyadmin-podman_wordpress-site1-data:/var/www/html -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/wordpress-site1/php.ini:/usr/local/etc/php/conf.d/php.ini --net dual-wordpress-phpmyadmin-podman_default --network-alias wordpress-site1 -p 33080:80 --restart always wordpress:latest
266af8e6c6540fc65f091eb0969b075146999e075b86a615eaed6dc5c0da89d1
exit code: 0
podman volume inspect dual-wordpress-phpmyadmin-podman_wordpress-site2-data || podman volume create dual-wordpress-phpmyadmin-podman_wordpress-site2-data
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_wordpress-site2-data']
Error: no such volume dual-wordpress-phpmyadmin-podman_wordpress-site2-data
['podman', 'volume', 'create', '--label', 'io.podman.compose.project=dual-wordpress-phpmyadmin-podman', '--label', 'com.docker.compose.project=dual-wordpress-phpmyadmin-podman', 'dual-wordpress-phpmyadmin-podman_wordpress-site2-data']
['podman', 'volume', 'inspect', 'dual-wordpress-phpmyadmin-podman_wordpress-site2-data']
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=wordpress-site2 -d --requires=database-site2 --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=wordpress-site2 -e PUID=1000 -e PGID=1000 -e WORDPRESS_DB_HOST=database-site2 -e WORDPRESS_DB_NAME=site2_wordpress -e WORDPRESS_DB_USER=wordpress-root -e WORDPRESS_DB_PASSWORD=r8zeDaR00f! -e WORDPRESS_CONFIG_EXTRA= define( 'WP_MEMORY_LIMIT', '333M' ); -v dual-wordpress-phpmyadmin-podman_wordpress-site2-data:/var/www/html -v /srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman/config/wordpress-site2/php.ini:/usr/local/etc/php/conf.d/php.ini --net dual-wordpress-phpmyadmin-podman_default --network-alias wordpress-site2 -p 33081:80 --restart always wordpress:latest
d484cdaf96cba4ebb091bcf1427b294ce0e4f9f1f6607c15e27f4751c88fb058
exit code: 0
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=phpmyadmin-site1 -d --requires=database-site1 --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=phpmyadmin-site1 -e PMA_HOST=database-site1 -e PMA_PASSWORD=I-Can-hazPazw03D --net dual-wordpress-phpmyadmin-podman_default --network-alias phpmyadmin-site1 -p 8080:80 --restart unless-stopped phpmyadmin:latest
727dea57078e69858183505c393c15ed2d6647d35f1dd2ca460927d3e03ab0dd
exit code: 0
['podman', 'network', 'exists', 'dual-wordpress-phpmyadmin-podman_default']
podman run --name=phpmyadmin-site2 -d --requires=database-site2 --label io.podman.compose.config-hash=827509acb19daf6fec1d80caf72296fffcc5f55b4e26d9e7ea67804a1821e0e3 --label io.podman.compose.project=dual-wordpress-phpmyadmin-podman --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@dual-wordpress-phpmyadmin-podman.service --label com.docker.compose.project=dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.working_dir=/srv/samba/wammpus-samba/dual-wordpress-phpmyadmin-podman --label com.docker.compose.project.config_files=compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=phpmyadmin-site2 -e PMA_HOST=database-site2 -e PMA_PASSWORD=I-Cant-hazPazw03D --net dual-wordpress-phpmyadmin-podman_default --network-alias phpmyadmin-site2 -p 8081:80 --restart unless-stopped phpmyadmin:latest
df8a41e691726c9aba2f34d284de2195b7099831695b776b8c728021cf14ffae
exit code: 0
Viewing the Container Log Output
When executing podman compose with the --detach argument, you will not see the log output of the containers. To view a live output of the container logs, execute the podman compose logs command with the --follow argument.
Take a look at a sample of the container logs below:
podman compose logs --follow
podman compose logs
>>>> Executing external compose provider "/usr/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 5.2.2
podman logs swag database-site1 database-site2 wordpress-site1 wordpress-site2 phpmyadmin-site1 phpmyadmin-site2
93863ab47170 [migrations] started
93863ab47170 [migrations] 01-nginx-site-confs-default: executing...
93863ab47170 [migrations] 01-nginx-site-confs-default: succeeded
93863ab47170 [migrations] 02-swag-old-certbot-paths: executing...
93863ab47170 [migrations] 02-swag-old-certbot-paths: succeeded
93863ab47170 [migrations] done
93863ab47170 βββββββββββββββββββββββββββββββββββββββ
93863ab47170
d1e70227c318 2025-04-18 17:16:26-06:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.3.0-1.el9 started.
d1e70227c318 2025-04-18 17:16:26-06:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
d1e70227c318 2025-04-18 17:16:26-06:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.3.0-1.el9 started.
d1e70227c318 2025-04-18 17:16:26-06:00 [Note] [Entrypoint]: Initializing database files
d1e70227c318 2025-04-18T23:16:27.004428Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
d1e70227c318 2025-04-18T23:16:27.006514Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 9.3.0) initializing of server in progress as process 75
266af8e6c654 WordPress not found in /var/www/html - copying now...
d1e70227c318 2025-04-18T23:16:27.016718Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
266af8e6c654 Complete! WordPress has been successfully copied to /var/www/html
d1e70227c318 2025-04-18T23:16:27.558273Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
d1e70227c318 2025-04-18T23:16:29.104624Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
266af8e6c654 No 'wp-config.php' found in /var/www/html, but 'WORDPRESS_...' variables supplied; copying 'wp-config-docker.php' (WORDPRESS_CONFIG_EXTRA WORDPRESS_DB_HOST WORDPRESS_DB_NAME WORDPRESS_DB_PASSWORD WORDPRESS_DB_USER)
d1e70227c318 2025-04-18T23:16:32.458092Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
d1e70227c318 2025-04-18 17:16:32-06:00 [Note] [Entrypoint]: Database files initialized
d1e70227c318 2025-04-18 17:16:32-06:00 [Note] [Entrypoint]: Starting temporary server
d1e70227c318 2025-04-18T23:16:32.505493Z 0 [System] [MY-015015] [Server] MySQL Server - start.
d1e70227c318 2025-04-18T23:16:32.717500Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 9.3.0) starting as process 114
d1e70227c318 2025-04-18T23:16:32.731092Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
d1e70227c318 2025-04-18T23:16:33.069958Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
0c17c35852d2 2025-04-18 17:16:27-06:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.3.0-1.el9 started.
266af8e6c654 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.93. Set the 'ServerName' directive globally to suppress this message
266af8e6c654 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.93. Set the 'ServerName' directive globally to suppress this message
266af8e6c654 [Fri Apr 18 23:16:30.784124 2025] [mpm_prefork:notice] [pid 1:tid 1] AH00163: Apache/2.4.62 (Debian) PHP/8.2.28 configured -- resuming normal operations
266af8e6c654 [Fri Apr 18 23:16:30.784830 2025] [core:notice] [pid 1:tid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
df8a41e69172 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.96. Set the 'ServerName' directive globally to suppress this message
df8a41e69172 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.0.96. Set the 'ServerName' directive globally to suppress this message
df8a41e69172 [Fri Apr 18 23:16:34.149910 2025] [mpm_prefork:notice] [pid 1:tid 1] AH00163: Apache/2.4.62 (Debian) PHP/8.2.28 configured -- resuming normal operations
df8a41e69172 [Fri Apr 18 23:16:34.150055 2025] [core:notice] [pid 1:tid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
93863ab47170 βββ βββββββββββ βββββββ
93863ab47170 βββ ββββββββββββββββββββ
93863ab47170 βββ ββββββββββββββ βββ
93863ab47170 βββ ββββββββββββββ βββ
93863ab47170 ββββββββββββββββββββββββββββ
93863ab47170 βββββββββββββββββββ βββββββ
93863ab47170
93863ab47170 Brought to you by linuxserver.io
93863ab47170 βββββββββββββββββββββββββββββββββββββββ
d484cdaf96cb WordPress not found in /var/www/html - copying now...
<\span>
Testing and Troubleshooting
Connecting directly to WordPress and phpMyAdmin
There might be times when you want to test the WordPress or phpMyAdmin containers/services without going through the nginx reverse proxy (Swag container/service). For example, during troubleshooting, maybe you aren’t sure if the port forwarding on your router/firewall is malfunctioning or if there is a problem with the WordPress site itself.Β
To help determine the source of a problem, its useful to be able to reach out directly to either of the WordPress sites and/or the phpMyAdmin dashboards. The podman compose configuration is set to allow this via local port forwarding.Β
- wordpress-site1 – port 33080
- wordpress-site2 – port 33081
- phpmyadmin-site1 – port 8080
- phpmyadmin-site2 – port 8081
You will need to ensure these ports are allowed through any firewall between your browser and the podman host.Β
A note about protected ports and rootless containers
One of the challenges of using Podman is that it is typically run without root permissions. Depending on your Linux configuration, you may have trouble starting the swag container with Podman – as the container is designed to open a connection on both ports 80 and 443. In most cases, root permissions are required to open ports that are below 1024.
This can be remedied in several ways, as documented by Red Hat.Β The way I chose to solve it on Oracle Linux 9, was to add the following line to the /etc/sysctl.conf file:
Deleting the container volumes
If you have made significant changes to your container configurations, for example, changing the name of the website domains or database credentials, it is sometimes best to delete the container volumes and start from a clean slate. Be advised that this will delete ALL the databases referenced by the containers and all the configuration settings changed inside the WordPress website.
Use the podman volume rm command to remove each of the container volumes.
podman volume rm dual-wordpress-phpmyadmin-podman_database-site1-data
podman volume rm dual-wordpress-phpmyadmin-podman_database-site2-data
podman volume rm dual-wordpress-phpmyadmin-podman_wordpress-site1-data
podman volume rm dual-wordpress-phpmyadmin-podman_wordpress-site2-data
Credit where credit is due
The hard work of many others made this post possible. I’d like to thank the developers at linuxserver.io, and phpMyAdmin, the Oracle MySQL Team, and the maintainers of the official WordPress docker images.
Further Reading
- Β SWAG User Documentation – very detailed information on how to further configure SSL and nginx reverse proxies within the SWAG container.
0 Comments