Как в Docker интегрировать WebSocket в службу LAMP с промежуточным обратным прокси-сервером?

Доброе утро, друзья, у меня следующееdocker-compose.ymlфайл, с помощью которого я устанавливаю обратный прокси и стек LAMP с сервисом phpmyadmin.

Примечание. Я создал его практически с нуля и добавил в него новые функции, возможно, он не идеален.

      version: "3.8"

services:
  reverse-proxy:
    env_file:
      - .env
    container_name: Proxy-Server
    image: jwilder/nginx-proxy:alpine
    restart: always
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/nginx/certs
    ports:
      - "${LH_HOST_MACHINE_UNSECURE_HOST_PORT:-80}:80"
      - "${LH_HOST_MACHINE_SECURE_HOST_PORT:-443}:443"
    depends_on:
      - webserver
      - phpmyadmin
    networks:
      - lamp-network
    extra_hosts:
      - "${LH_WEB_SERVER_DOMAIN}:127.0.0.1"
      - "${LH_PHPMYADMIN_DOMAIN}:127.0.0.1"
    environment:
      - TRUST_DOWNSTREAM_PROXY=true
      - ENABLE_WEBSOCKETS=true
    labels:
      - "lh2.setup.description=Proxy Server"
      - "lh2.setup.role=reverse-proxy"
  webserver:
    env_file:
      - .env
    container_name: ${LH_SYSTEM_NAME}-Web-Server
    build:
      context: ./bin/${LH_PHP_ENVIRONMENT}
    restart: always
    expose:
      - 80
      - 443
    networks:
      - lamp-network
    depends_on:
      - database
    volumes:
      - ${LH_PROJECT_ROOT}:/var/www/html:rw
      - ${LH_PROJECT_ROOT}${LH_DOCUMENT_ROOT}:/var/www/html/public:rw
      - ${LH_VHOSTS_DIR}:/etc/apache2/sites-enabled
      - ${LH_PHP_INI}:/usr/local/etc/php/php.ini
      - ${LH_LOG_DIR}:/var/log/apache2
      - ${LH_LOG_CRON}:/var/log/cron
    environment:
      LH_WEB_MASTER: ${LH_WEB_MASTER}
      VIRTUAL_HOST: ${LH_WEB_SERVER_DOMAIN}
      LH_APACHE_DOCUMENT_ROOT: ${LH_APACHE_DOCUMENT_ROOT}
      LH_DOCUMENT_ROOT: ${LH_DOCUMENT_ROOT}
      HOST_MACHINE_MYSQL_PORT: ${LH_HOST_MACHINE_MYSQL_PORT}
      MYSQL_DATABASE: ${LH_MYSQL_DATABASE}
      MYSQL_ROOT_PASSWORD: ${LH_MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${LH_MYSQL_USER}
      MYSQL_PASSWORD: ${LH_MYSQL_PASSWORD}
    extra_hosts:
      - "host.docker.internal:host-gateway"
    labels:
      - "lh2.setup.description=Web Server"
      - "lh2.setup.role=webserver"
  database:
    env_file:
      - .env
    build:
      context: ./bin/${LH_DATABASE}
    container_name: ${LH_SYSTEM_NAME}-${LH_DATABASE}
    restart: always
    networks:
      - lamp-network
    ports:
      - "127.0.0.1:${LH_HOST_MACHINE_MYSQL_PORT}:${LH_HOST_MACHINE_MYSQL_PORT}"
    volumes:
      - ${LH_MYSQL_INITDB_DIR}:/docker-entrypoint-initdb.d
      - ${LH_MYSQL_DATA_DIR}:/var/lib/mysql
      - ${LH_MYSQL_LOG_DIR}:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${LH_MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${LH_MYSQL_DATABASE}
      MYSQL_USER: ${LH_MYSQL_USER}
      MYSQL_PASSWORD: ${LH_MYSQL_PASSWORD}
    labels:
      - "lh2.setup.description=Database Server"
      - "lh2.setup.role=database"
  phpmyadmin:
    env_file:
      - .env
    container_name: ${LH_SYSTEM_NAME}-phpmyadmin
    image: phpmyadmin/phpmyadmin
    restart: always
    depends_on:
      - database
    environment:
      VIRTUAL_HOST: ${LH_PHPMYADMIN_DOMAIN}
      PMA_HOST: database
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: ${LH_MYSQL_ROOT_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${LH_MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${LH_MYSQL_USER}
      MYSQL_PASSWORD: ${LH_MYSQL_PASSWORD}
      UPLOAD_LIMIT: ${LH_UPLOAD_LIMIT}
      MEMORY_LIMIT: ${LH_MEMORY_LIMIT}
    volumes:
      - /sessions
      - ${LH_PHP_INI}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini
    networks:
      - lamp-network
    labels:
      - "lh2.setup.description=phpMyAdmin"
      - "lh2.setup.role=phpmyadmin"
networks:
  lamp-network:
    driver: bridge

Все это отлично работает на моем локальном компьютере с Windows 11, но теперь я хотел бы интегрировать функциональность веб-сокета. Я понимаю, что для этого мне нужно использовать сертификат SSL, поэтому я включаю порт 443, но не могу найти пример. или в документации, что мне не хватает или что мне следует добавить:

  1. Какие изменения мне следует внести в файл хостов, в настоящее время необходимо было добавить эту строку для перенаправления http-запросов:
      # Developer Area Docker
127.0.0.1 lh-2.dock lh-2.pma.dock
# End of section
  1. Как сгенерировать сертификат SSL с использованием файла yml, я полагаю, что должен быть какой-то образ службы, который делает это и не требует изменения образа моего прокси, кроме включения или совместного использования томов между контейнерами.

Я потерялся здесь, потому что даже не знаю, с чего начать.

  1. Мне следует изменить в своем файле yml службуverse_proxy, чтобы перенаправлять запросы wss:// в контейнер службы веб-сервера.

Здесь я еще больше теряюсь, потому что даже не знаю, с чего начать.

  1. Что мне следует изменить в моем веб-сервере/службе LAMP, чтобы перехватить то, что отправил обратный прокси-сервер.

Здесь я еще больше теряюсь, потому что даже не знаю, с чего начать. Если требуется дополнительная информация, дайте мне знать, чтобы я мог ее добавить.

0 ответов

Другие вопросы по тегам