前情提要:项目需要使用 webSocket 进行通信,并且使用的是 LaraDock 作为环境。所以使用 laravel-echo-server、laravel-horizon、php-worker 容器进行环境的部署。因为对 Docker 并不懂,仅仅只是使用 LaraDock,所以过程中遇到了很多问题,特此记录下来。
LaraDock 的 Nginx 使用多站点配置的时候,laravel-echo-server 无法链接到 web 进行认证。
通过在 nginx 容器配置中添加别名 ** laradock/docker-compose.yml **
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| nginx: build: context: ./nginx args: - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER} - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT} volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER} - ${NGINX_HOST_LOG_PATH}:/var/log/nginx - ${NGINX_SITES_PATH}:/etc/nginx/sites-available ports: - "${NGINX_HOST_HTTP_PORT}:80" - "${NGINX_HOST_HTTPS_PORT}:443" depends_on: - php-fpm networks: frontend: backend: aliases: - my-site.com
|
更改完配置之后需要重新构建 nginx 和 laravel-echo-server 容器。
并重新开启。
坑二
larave-echo-server 的 ssl 证书
- 直接配置 ssl 证书。(不明白证书需要发在目录的什么位置,所以 google 了很多内容之后选择了下面的方法。以后如果有机会补充第一点)
- 配置 nginx 反向代理。 laravel-echo-server
1 2 3 4 5 6 7
| location /socket.io { proxy_pass http://laravel-echo-server:6001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
|
- 配置 laravel-echo-server 配置文件 laravel-echo-server.json 为如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| { "authHost": "https://laravel-echo-server", "authEndpoint": "/broadcasting/auth", "clients": [], "database": "redis", "databaseConfig": { "redis": { "port": "6379", "host": "redis" } }, "devMode": true, "host": null, "port": "6001", "protocol": "http", "socketio": {}, "sslCertPath": "", "sslKeyPath": "" }
|
操作技巧
- 不使用 -d 参数可以更好的进行调试
1
| docker-compose up laravel-echo-server
|
- 使用 logs 参数可以查看详情的日志输出
1
| docker-compose logs laravel-echo-server
|