早上好,朋友们,我有以下docker-compose.yml
文件,用于安装反向代理和带有 phpmyadmin 服务的 LAMP 堆栈。
笔记:我实际上是从头开始创建它的,并添加了新的功能,它可能并不完美。
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 计算机上完美运行,但现在我想集成 websocket 功能,我明白为此我必须使用 SSL 证书,这就是我启用端口 443 的原因,但我找不到示例或在文档中找不到哪些东西对我有用或者我应该添加什么:
- 我应该在我的 hosts 文件中做哪些更改,目前需要添加此行来重定向 http 请求:
# Developer Area Docker
127.0.0.1 lh-2.dock lh-2.pma.dock
# End of section
- 如何使用 yml 文件生成 SSL 证书,我想一定有一些服务映像可以执行此操作,并且不需要更改我的代理的映像,除了在容器之间合并或共享卷。
我在这里迷失了,因为我甚至不知道从哪里开始。
- 我应该在我的 yml 文件中修改 reverse_proxy 服务以将 wss:// 请求重定向到 webserver 服务容器。
在这里我更加迷失,因为我甚至不知道从哪里开始。
- 我应该在我的 Web 服务器/LAMP 服务中修改什么来捕获反向代理发送的内容。
在这里我更加迷茫了,因为我甚至不知道从哪里开始。如果需要更多信息,请告诉我,以便我可以添加。