WordPress is one of the most popular content management systems (CMS) on the market, powering over 40% of all websites on the internet.

One of the major advantages of WordPress is its open source nature.

As an open source platform, WordPress provides users with a high level of flexibility and control over their websites. This allows developers to create custom themes and plugins that can be easily integrated into the WordPress ecosystem.

WordPress’s theme ecosystem is particularly noteworthy. With thousands of themes available, users can choose from a wide range of options to create a unique and visually appealing website.

These themes can be customized further to meet specific needs, providing endless possibilities for website design.

Why Wordpress?

  • 🌟 User-Friendly: WordPress is known for its user-friendly interface and ease of use. With a wide range of templates, plugins, and customization options available, users can create a website with little to no technical expertise.

  • 🛠️ Customization: With thousands of themes and plugins available, WordPress provides endless customization options for users. From basic blogs to complex e-commerce sites, WordPress can be tailored to fit any need.

  • 🔍 SEO-Friendly: WordPress is designed with SEO in mind, making it easier for websites to rank higher in search engine results pages (SERPs). With built-in SEO tools and plugins, WordPress makes it simple for users to optimize their content for search engines.

You should be aware also of this before using Wordpress as CMS 🙀
  • Security: WordPress’s popularity makes it a target for hackers, and vulnerabilities in the software and plugins can put websites at risk.

  • Maintenance: WordPress requires ongoing maintenance, including updates to the core software and plugins, to ensure optimal performance and security.

  • Performance: WordPress can be slow to load, particularly for sites with a lot of plugins or customizations. This can impact user experience and site performance.

The WordPress Project

SelfHosting Wordpress

Pre-Requisites!! Just Get Docker 🐋👇

Important step and quite recommended for any SelfHosting Project - Get Docker Installed

It will be one command, this one, if you are in Linux:

apt-get update && sudo apt-get upgrade && curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh && docker version

And install also Docker-compose with:

apt install docker-compose -y

WordPress with Docker Compose

version: '3.3'

services:
   db:
     image: hypriot/rpi-mysql
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     networks:
       - wpsite

   phpmyadmin:
     depends_on:
       - db
     image: phpmyadmin/phpmyadmin
     restart: always
     ports:
       - '8088:80'
     environment:
       PMA_HOST: db
       MYSQL_ROOT_PASSWORD: password
     networks:
       - wpsite    

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - '8087:80'
     restart: always
     volumes: ['./:/var/www/html']
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     networks:
       - wpsite
networks:
   wpsite:
volumes:
   db_data:

WordPress with NGINX and Docker Compose

If you are interested to exposed the service to the internet, you will want to run uptime kuma behind a NGINX proxy. Follow this steps:

version: '3.3'

services:
   db:
     image: mariadb:latest #hypriot/rpi-mysql
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     networks:
       - wpsite

   phpmyadmin:
     depends_on:
       - db
     image: phpmyadmin/phpmyadmin
     restart: always
     ports:
       - '8088:80'
     environment:
       PMA_HOST: db
       MYSQL_ROOT_PASSWORD: password
     networks:
       - wpsite    

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - '8087:80'
     restart: always
     volumes: ['./:/var/www/html']
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     networks:
       - wpsite
       - nginx_default  
networks:
    wpsite:
    nginx_default:
       external: true    
volumes:
    db_data:

IMPORTANT: make sure to change the default passwords in the configuration file before deploying and exposing it to the internet.

  • Step 3: Finish the setup in NGINX UI as covered in its guide.

FAQ

Other F/OSS Wordpress Alternatives

  • Ghost

Privacy Respectful Web Analytics for Wordpress

  • Umami
  • Matomo
  • Plausible

How to Deploy Nginx Proxy Manager

If you are interested in deploying a separated NGINX instance with Docker, I already created a guide for that here.