En esta serie de posts voy a recopilar los pasos para crear una web en wordpress desde cero.

La web que voy a crear en esta serie de posts es la del escuadron virtual de simulación aérea militar GCv Bullfighters. Este escuadrón, de reciente creación, ha sido fundado por miembros veteranos del mítico escuadrón de vuelo español Escuadron 69. En este tipo de escuadrones virtuales se simulan misiones áreas con decenas de pilotos virtuales sobre la plataforma DCS (Digital Combat Simulator). Aplicando normas y procediminetos aereos los más cercanos a la realidad posibles. Basados en procedimientos como la Naval Air Training and Operating Procedures Standardization (NATOPS).

Después de esta breve introducción... ¿Porque Wordpress? Por tres razones principales:

  • Rapidez y sencillez de uso (no tenía intención de crear un site desde cero para esto).
  • Conocer una nueva "tecnología".
  • Conocer el CMS con más presencia en internet.

Para hacerlo vamos a utilizar docker en el entorno de desarrollo, pero en productivo voy a montar el stack LAMP desde cero. Así vemos las dos opciones posibles.

Configurando nuestro entorno de Desarrollo:

Las 3 piezas (ignorando el sistema operativo) que soportan la infraestructura de una web wordpress son:

  1. mysql - Contenedor para mysql
  2. server - Contenedor para wordpress
  3. phpmyadmin - Contenedor para phpmyadmin

En el primer caso, utilizando docker simplemente necesitamos un docker-compose.yml que describa los tres contenedores y como interactuan entre si:

version: "3"
networks:
    env-net:
        driver: bridge
services:
  mysql:
    image: mysql:5.7
    container_name: mysqlcontainer
    tty: true
    ports:
        - "4208:3306"
    volumes:
        - "/var/libclea/mysql/:/var/lib/mysql"
    environment:
        MYSQL_DATABASE: <wp_database>
        MYSQL_USER: <wp_user> 
        MYSQL_PASSWORD: <wp_pass>        
        MYSQL_ROOT_PASSWORD: <password>
    networks:
        - env-net      
  server:
      image: wordpress:latest
      container_name: wordpresscontainer
      ports:
           - "4282:80"
      volumes:
          - /var/www/html/:/var/www/html
      environment:
          WORDPRESS_DB_HOST: mysqlcontainer 
          WORDPRESS_DB_NAME: <wp_database>
          WORDPRESS_DB_USER: <wp_user>
          WORDPRESS_DB_PASSWORD: <wp_pass>
      depends_on:
          - mysqlcontainer
      networks:
          - env- net
  phpmyadmin:
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmincontainer
      ports:
          - "4283:80"
      environment:
          PMA_HOST: mysqlcontainer
          MYSQL_ROOT_PASSWORD: <phpma_pass>
      depends_on:
          - mysqlcontainer
      networks:
          - env-net

Para lanzar nuestro entorno únicamente deberemos ejecutar el comando: sudo docker-compose up

isma@ismalinux  ~/Desktop/code/bullfighters   master ±  sudo docker-compose up
Starting mysqlcontainer ... done
Starting wordpresscontainer  ... done
Starting phpmyadmincontainer ... done
Attaching to mysqlcontainer , wordpresscontainer, phpmyadmincontainer 
mysqlcontainer | 2023-02-05 08:34:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.
mysqlcontainer | 2023-02-05 08:34:40+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysqlcontainer | 2023-02-05 08:34:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.
mysqlcontainer | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
...

Esto lanzará nuestros contenedores:

isma@ismalinux  ~/Desktop/code/bullfighters   master ±  docker container list
CONTAINER ID   IMAGE                   COMMAND                     CREATED          STATUS                  PORTS                                                    NAMES
0f674a2baf78   wordpress:latest        "docker-entrypoint.s…"      36 hours ago     Up About a minute       0.0.0.0:4282->80/tcp, :::4282->80/tcp                    wordpresscontainer
950b50249e34   phpmyadmin/phpmyadmin   "/docker-entrypoint.…"      36 hours ago     Up About a minute       0.0.0.0:4283->80/tcp, :::4283->80/tcp                    phpmyadmincontainer
d86d384d185b   mysql:5.7               "docker-entrypoint.s…"      36 hours ago     Up About a minute       33060/tcp, 0.0.0.0:4208->3306/tcp, :::4208->3306/tcp     mysqlcontainer

Los contenedores dependen de dos estructuras de ficheros en nuestro sistema, que son /var/libcea/ (MySQL) y /var/www/html/ (Sitio Wordpress). Prestar especial atención a los owner de cada carpeta.

isma@ismalinux  ~/Desktop/code/bullfighters   master ±  ls /var/libclea -l 
total 4
drwxr-xr-x 6 999 isma 4096 Feb  5 09:35 mysql
isma@ismalinux  ~/Desktop/code/bullfighters   master ±  ls /var/www/html -l    
total 244
-rw-r--r--  1 www-data www-data   405 Feb  6  2020 index.php
-rw-r--r--  1 www-data www-data 19915 Jan 30 21:33 license.txt
-rw-r--r--  1 www-data www-data  7389 Jan 30 21:33 readme.html
-rw-r--r--  1 www-data www-data  7205 Sep 17 01:13 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Nov 15 20:03 wp-admin
-rw-r--r--  1 www-data www-data   351 Feb  6  2020 wp-blog-header.php
-rw-r--r--  1 www-data www-data  2338 Nov 10  2021 wp-comments-post.php
-rw-rw-r--  1 www-data www-data  5480 Jan 12 01:03 wp-config-docker.php
-rw-r--r--  1 www-data www-data  5584 Jan 29 09:04 wp-config.php
-rw-r--r--  1 www-data www-data  3001 Dec 14  2021 wp-config-sample.php
drwxr-xr-x  8 www-data www-data  4096 Feb  3 23:38 wp-content
-rw-r--r--  1 www-data www-data  5543 Sep 20 17:44 wp-cron.php
drwxr-xr-x 27 www-data www-data 16384 Nov 15 20:03 wp-includes
-rw-r--r--  1 www-data www-data  2494 Mar 19  2022 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3985 Sep 19 10:59 wp-load.php
-rw-r--r--  1 www-data www-data 49135 Sep 20 00:26 wp-login.php
-rw-r--r--  1 www-data www-data  8522 Oct 17 13:06 wp-mail.php
-rw-r--r--  1 www-data www-data 24587 Sep 26 12:17 wp-settings.php
-rw-r--r--  1 www-data www-data 34350 Sep 17 02:35 wp-signup.php
-rw-r--r--  1 www-data www-data  4914 Oct 17 13:22 wp-trackback.php
-rw-r--r--  1 www-data www-data  3236 Jun  8  2020 xmlrpc.php
 isma@ismalinux  ~/Desktop/code/bullfighters   master ± 

El contenedor de wordpress  contiene un servidor apache por defecto preconfigurado, por lo que no tenemos que hacer nada adicional. Simplemente accediendo por localhost en el puerto 4282 podremos acceder a la instancia de wordpress y configurar nuestro sitio (instalar un tema, configurarlo, etc.) y por el puerto 4283 acceder a la instancia de phpadmin. Este último punto será importante de cara al paso a producción, ya que aquí exportaremos nuestra base de datos como paso previo a importarla en producción.