Now that we have the "setup" articles out of the way - we have selected our hardware, installed Proxmox and set up CPU Thermal Monitoring, we can (finally) start deploying some machines and containers to our homelab! Although one of the first apps/services you would normally deploy would be a custom DNS, we will put that one on the backburner for just a few days so we can get something really tangible up and running: let's install WordPress. WordPress actually consists of a few services, most notably a MySQL database, a PHP Website and in most cases, something like NGINX or Apache for the hosting setup. We might look at getting all of this set up and running manually as individual services in a future article, but for today we just want to get it up and running as fast (and easily) as possible. Luckily that is possible due to the power of containers.
Screenshot note: The screenshots were accurate at the time of publication and show our original Proxmox VE 8.3 and TurnKey setup. Newer versions may use different wording or arrange prompts differently. Follow the labels in your installed version. Added notes below explain changes to the written guidance while preserving the original screenshots.
Step 1: Get the container template
As previously stated, Proxmox uses LXC Containers, and is integrated with TurnKey Linux Containers (Visit the TurnKey Linux Official Site). The first thing we need to do is get the official LXC container template installed. After logging in to your Proxmox instance, in the left navigation pane, select your Proxmox node and then select the storage device called local. This is the main drive where Proxmox is installed and all our VM and CT (Container) templates. In the middle navigation pane, select CT Templates. The main window will now show all your installed Container Templates. At the top of the list is a button named Templates. Click this to open a list of all official Container templates that can be installed. The list starts with blank Linux operating system container templates and works down to the TurnKey Linux templates. We are looking for the WordPress one, so search for wordpress and select that container and click Download . Once the download is complete, we can continue to getting an instance of the container set up.


Step 2 - Create a new container
Now that we have the template, we can create a new instance of that container template. In the top right there is a button labelled Create CT . This button will create a new instance of an LXC container template. Click the button to open the new container window and go through each of the screens one by one until the last:
GeneralIn the general screen, fill in the CT ID field, this can be any number normally in the 100 - 999 range, and this is just an ID for the container. Fill in the hostname and choose a password. This password is the password for the
root user of the Linux container.
TemplateIn the template screen, select the container template. You should only have the option to select
local in the Storage dropdown as that is the only place where container templates are installed. In the Template field, select the WordPress container template.
Disks
Select the storage where the container will live and choose its disk size. A 1 GB budget for WordPress's own files is enough for an empty site and can also suit small sites with modest media and plugin use. However, the container disk must also hold Linux, the database, logs and space for updates. The screenshot uses an 8 GiB root disk; keeping that starting allocation gives the whole appliance more room. Large uploads, plugins and local backups can increase usage quickly, so no single disk size is enough for every site.
Added disk-growth note: You can increase the container's disk allocation as a larger site needs more space, provided the underlying Proxmox storage has free capacity. Back up first. Select the container, open Resources, select Root Disk, then use Volume Action → Resize (or Resize disk in versions that label it that way). Enter the additional space to add, rather than the new total, and check the available space inside the container afterwards. This later maintenance action is not shown in the original installation screenshots; the menu may look different in your version. See the official container resize reference.
CPUThis is just the maximum amount of CPU cores the container has access to. This does not mean that those cores are only assigned to this container, it merely states that the container cannot access more than these. We opted for 2 so to balance the PHP and MySQL a bit, but 1 will work. Memory
Same as CPU, this states the maximum. The defaults are fine as is, we opted to double the memory as we have enough going spare. Network
Leave as is and just continue to the next screen. We will do a more in-depth dive of the networking (and firewall) in a future article, but it is outside of the scope of this article. DNS
Again, leave as
Use Host Settings, we might change this in a future container or VM, but seeing as we don't even have our own DNS server up and running yet (At the time of writing), there is no need to change this.
ConfirmCheck that you are happy with all of the settings, and if you are, hit Finish . The installer will run and let you know once done.









Step 3: Set Up the TurnKey Linux Container
Now that the container has been created, go to the Proxmox left navigation pane and select the newly created container. If it has not been started, please click Start . Once the container has started, in the middle navigation pane, go to Console to open an integrated console into the container. You will be prompted for a username first, use root and press Enter, after which you need to enter the password you selected in the first screen of the container setup. Once successfully authenticated, you will be greeted with a TurnKey Linux setup screen. The first screen asks you to set the password for the MySQL database account named adminer. Adminer is a browser-based database management tool; Webmin is the separate system-administration interface for the container. This database password is separate from the container's root login and the WordPress administrator password. Select a strong, unique password and press Enter. The second screen will ask to confirm the password. The third screen will prompt for a password for WordPress, enter a password and confirm on the 4th screen. The 5th screen will prompt you for an email address for the WordPress admin account. The 6th screen will ask for a domain name for the WordPress site.
Please take note: Although the domain name you select here will have an effect and we will probably need to add a DNS record in our own DNS server. The other, more intricate solution is to set up a domain or domain record to point to our network from the internet and we then need to set up an NGINX proxy to manage our VM's and other network nodes. Both of these will be covered in future articles.
When you get to the Backup and Dynamic DNS settings page, just skip for now. You will then be prompted for an email address where notifications regarding security alerts can be sent. You can set it up if you wish; we are going to skip it for this local walkthrough.
Updated security guidance: At the security-updates prompt, choose Install and allow it to finish. A newly downloaded template can still need patches released since that image was built. The container needs a working internet connection; resolve any update errors before exposing the site publicly. The original screenshot was accurate at publication and already shows the Install/Skip prompt. Your version's wording or sequence may differ. TurnKey's security-update guidance also explains the ongoing updates. WordPress core, plugins and themes need their own maintenance; follow the appliance's instructions for your release.
Once installed you will be greeted with a screen that shows you the container addresses. In our case the following:
Web: http://192.168.1.28 uses unencrypted HTTP. https://192.168.1.28 uses HTTPS with the appliance's self-signed TLS certificate. It does have a certificate; the browser warning occurs because that certificate is not trusted automatically. For this local setup, check that the address belongs to your own container before proceeding. A public site should use a certificate trusted by browsers for its domain name. The screenshot records the original local setup; a newer appliance may redirect HTTP to HTTPS.
Webmin: https://192.168.1.28:12321 - This opens Webmin, the system-administration interface for the TurnKey Linux container, where you can manage services and settings. Use username root and the password you selected for the container.
Adminer: https://192.168.1.28:12322 - This opens Adminer for managing the MySQL/MariaDB database in the container, including its tables and data. Log in using username adminer and the password you selected.
Open a new browser window and go to the Web link provided, in our case http://192.168.1.28. Welcome to your own WordPress Instance!










Optional After the Walkthrough: WordPress Checks and PHP Tuning
Complete the TurnKey setup and WordPress login first. The template in the screenshots is a starting image; installing it does not remove the need for later operating-system, WordPress, plugin and theme updates. Keep the chosen administrator credentials private and record the container's address before adding DNS or a proxy in later parts.
Test the basic installation by creating a draft, previewing it, uploading a small image and opening a post permalink. These checks establish more than the presence of the welcome page: they exercise permissions, the database and web routing. If a permalink returns an error, check the selected permalink structure and Apache rewrite configuration before changing unrelated container settings.
PHP upload tuning is optional and should address a measured problem. The command-line PHP configuration may differ from the Apache module or PHP-FPM configuration serving WordPress. php --ini describes CLI PHP; it is not proof of the web request's active file. Use WordPress Site Health and the appliance's web/PHP configuration to identify the relevant version and handler. Avoid editing every /etc/php/*/apache2/php.ini with a wildcard command.
Back up the identified file, adjust only the limits needed for your intended uploads, and restart or reload the service that actually runs that PHP handler. Keep post_max_size large enough for the complete request as well as the uploaded file. Then repeat the same upload and compare any error in the web log. Larger limits also need disk and memory headroom; they are not a general speed improvement.
Retain both a database backup and the files that contain uploads, themes and configuration. Practise restoring into a separate container before making major changes to a site you care about. When a later article introduces a public address, revisit the canonical WordPress URL there instead of guessing it during this local installation.
Further reading: PHP configuration files, WordPress configuration reference.
Conclusion
In conclusion, deploying WordPress in your homelab using Proxmox and TurnKey Linux Containers is a practical way to get hands-on with containerization while immediately reaping the benefits of a fully functional website. By following the step-by-step process—from downloading the official WordPress template and setting up your container to configuring the necessary services like MySQL and PHP via the TurnKey Interface, you now have a solid foundation for hosting dynamic content. This approach not only streamlines your initial setup but also paves the way for future enhancements, such as integrating a custom DNS or a more sophisticated NGINX proxy configuration. Whether you're a seasoned network administrator or just beginning your homelab journey, this project demonstrates that with the right tools, advanced deployments can be both accessible and efficient. Happy containerizing!







