Docker compose

Archivo docker-compose.yml para WordPress con WooCommerce, incluyendo MySQL/MariaDB y configuración optimizada para ecommerce:

version: '3.8'

services:
  db:
    image: mariadb:10.6
    container_name: wp_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wp_network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  wordpress:
    build:
      context: .
      dockerfile: Dockerfile-wordpress
    container_name: wp_app
    restart: always
    depends_on:
      db:
        condition: service_healthy
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: ${DB_NAME}
      PHP_MEMORY_LIMIT: 512M
      PHP_UPLOAD_MAX_FILESIZE: 64M
    volumes:
      - wordpress_data:/var/www/html
      - ./plugins:/var/www/html/wp-content/plugins
      - ./themes:/var/www/html/wp-content/themes
      - ./uploads:/var/www/html/wp-content/uploads
    ports:
      - "8080:80"
    networks:
      - wp_network

volumes:
  db_data:
  wordpress_data:

networks:
  wp_network:
    driver: bridge

Crea un archivo Dockerfile-wordpress para personalizar WordPress:

FROM wordpress:php8.2-apache

# Instalar dependencias para WooCommerce
RUN apt-get update && apt-get install -y \
    libzip-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd zip mysqli pdo_mysql opcache

# Configuración de PHP para ecommerce
COPY php.ini /usr/local/etc/php/conf.d/woocommerce.ini

Crea un php.ini para optimización:

memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 600
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=200

Crea un .env para las variables:

DB_ROOT_PASSWORD=your_root_password
DB_NAME=wordpress
DB_USER=wpuser
DB_PASSWORD=wppassword

Estructura de directorios:

├── docker-compose.yml
├── Dockerfile-wordpress
├── php.ini
├── .env
├── plugins/
├── themes/
└── uploads/

Para iniciar el stack:

  1. Crea los directorios necesarios:
mkdir -p plugins themes uploads
  1. Inicia los contenedores:
docker-compose up -d
  1. Accede a:
http://localhost:8080

Pasos post-instalación:

  1. Completar instalación de WordPress
  2. Instalar plugin WooCommerce
  3. Configurar permalinks (Settings > Permalinks)
  4. Habilitar SSL si es necesario (usando reverse proxy)

Comandos útiles:

  • Ver logs: docker-compose logs -f
  • Detener: docker-compose down
  • Actualizar: docker-compose pull && docker-compose up -d

Recomendaciones para producción:

  1. Agregar reverse proxy con Nginx/Apache para SSL
  2. Configurar backups periódicos
  3. Implementar cache (Redis/Memcached)
  4. Usar volumen para SSL certificates
  5. Monitorear recursos con cAdvisor o Portainer

Este setup incluye:

  • Última versión de PHP 8.2
  • GD Library para manejo de imágenes
  • Optimizaciones de rendimiento para WooCommerce
  • Volúmenes persistentes para datos
  • Configuración de seguridad básica
  • Red aislada para los servicios

¡Asegúrate de modificar las contraseñas en el archivo .env antes de implementar! 🔒