Integrando Discourse, Caddy y WordPress con Docker Ports para Proxy inverso

Mi primera publicación y quería proporcionar una guía que hice con nuestro amigo ChatGPT después de luchar durante días para descubrir cómo hacer que Caddy funcionara como proxy inverso para Discourse, instalado con las instrucciones de la oficina. Usé información que encontré en el foro de Caddy aquí. Configuración de Caddy Discourse. Esto puede ser sencillo, pero para aquellos de nosotros que recién comenzamos con Discourse, es un poco complicado ponerlo en marcha.

Gracias por una comunidad obviamente genial.

Integración de Discourse, Caddy y WordPress con Puertos Docker para Proxy Inverso


Descripción General

Esta guía proporciona un proceso paso a paso para configurar Discourse con Caddy como proxy inverso, junto con una instalación de WordPress, utilizando Docker Compose. Estas instrucciones están diseñadas para un servidor Ubuntu 22 LTS típico y demuestran cómo integrar múltiples servicios garantizando una configuración limpia y reproducible.


Requisitos Previos

Asegúrate de que se cumplan los siguientes requisitos previos antes de continuar:

  1. Docker y Docker Compose:

    bash

    apt update && apt install docker docker-compose -y
    
  2. Discourse Instalado:

  3. Nombres de Dominio:

    • Un dominio principal para WordPress (por ejemplo, website.com).
    • Un subdominio para Discourse (por ejemplo, forum.website.com).

Paso 1: Configuración de docker-compose.yml

El archivo docker-compose.yml define los servicios para Caddy (proxy inverso), WordPress y MySQL.

Ubicación del Archivo

Guarda el archivo como /etc/docker-services/docker-compose.yml.

Configuración

yaml

version: '3.8'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_net

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: example_user
      WORDPRESS_DB_PASSWORD: example_password
      WORDPRESS_DB_NAME: example_db
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - caddy_net

  db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: example_password
      MYSQL_DATABASE: example_db
      MYSQL_USER: example_user
      MYSQL_PASSWORD: example_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - caddy_net

volumes:
  caddy_data:
  caddy_config:
  db_data:

networks:
  caddy_net:
    external: true

Paso 2: Configuración del Proxy Inverso de Caddy

Caddy proxy las solicitudes tanto a Discourse como a WordPress y gestiona los certificados HTTPS.

Ubicación del Archivo

Guarda la configuración como /etc/docker-services/Caddyfile.

Configuración

caddyfile

website.com {
    reverse_proxy wordpress:80
}

forum.website.com {
    reverse_proxy app:80
}

Esta configuración asegura:

  • Las solicitudes a website.com se proxy a el contenedor de WordPress.
  • Las solicitudes a forum.website.com se proxy a el contenedor de Discourse.

Paso 3: Configuración de Discourse

Actualiza app.yml para integrar Discourse con Caddy y la red Docker.

Ubicación del Archivo

Ubicado en /var/discourse/containers/app.yml.

Cambios de Configuración

  1. Exponer Puertos HTTP No Estándar:

    yaml

    expose:
      - "8880:80"   # http
    
  2. Eliminar Plantillas SSL:

    yaml

    # - "templates/web.ssl.template.yml"
    # - "templates/web.letsencrypt.ssl.template.yml"
    
  3. Establecer Red Docker:

    yaml

    docker_args:
      - '--network caddy_net'
    
    networks:
      caddy_net:
        external: true
    
  4. Reconstruir Discourse: Aplica los cambios reconstruyendo el contenedor de Discourse:

    bash

    cd /var/discourse
    ./launcher rebuild app
    

Paso 4: Despliegue de los Servicios

Inicia los servicios Docker para Caddy y WordPress:

  1. Navega al directorio de Docker Compose:

    bash

    cd /etc/docker-services
    
  2. Inicia los contenedores:

    bash

    docker compose up -d
    

Paso 5: Pruebas y Verificación

  1. Verificar Contenedores en Ejecución:

    bash

    docker ps
    
  2. Acceder a WordPress: Navega a:

    arduino

    https://website.com
    
  3. Acceder a Discourse: Navega a:

    arduino

    https://forum.website.com
    
  4. Revisar Registros:

    • Caddy:

      bash

      docker logs caddy
      
    • Discourse:

      bash

      tail -f /var/discourse/shared/standalone/log/rails/production.log
      

Solución de Problemas

  1. Discourse No Responde:

    • Asegúrate de que Discourse esté enlazado al puerto 8880.

    • Verifica que el contenedor esté conectado a caddy_net:

      bash

      docker network inspect caddy_net
      
  2. Errores SSL de Caddy:

    • Revisa los registros de certificados de Caddy en /data.
  3. Problemas de Reconstrucción:

    • Asegúrate de que la red caddy_net esté activa al reconstruir Discourse:

      bash

      docker network ls
      

Conclusión

Esta guía demuestra cómo integrar Discourse, Caddy y WordPress utilizando Docker Compose y una configuración de proxy inverso. Siguiendo estos pasos, puedes lograr una configuración modular y segura para tu propia infraestructura de sitio web.

¿Usaste un Arduino para esto?