Mac在docker里使用laravel的swoole扩展laravels的注意事项

前言:使用swoole的websocket,需要额外使用端口(默认5200),在docker内安装swoole后,宿主机(MAC电脑)需要访问websocket,socket功能时,需要docker暴露端口(5200),但是我们的容器已经在执行,如果能在不影响本身容器环境的情况下,对外暴露端口呢,如果是安装了docker-compose,那么有对应的配置文件可以改动(请大家自行百度)。笔者并没有安装,网上资料太少,笔者自己研究完,分享一下心得

一、将容器打包成镜像,执行docker commit

这一步主要是保存容器内的所有环境。

docker commit 容器名 镜像名
例子:docker commit store-dev ldb/store:3.0
成功后,会返回类似信息:
sha256:ca46b1ed99abc1338881a55a043ee9670a66601530b3f2e63f41eb949b91e84d

二、新建容器

docker run --name 容器名 -itd -p 对外端口/容器内端口 -v 本地项目路由:容器内项目路由 --link ldb.mysql:mysql --link ldb.redis:redis 镜像repository:镜像tag
例子:docker run --name store-dev -itd -p 80:80 -p 9501:9501 -v ~/Code/store:/data/web/store --link ldb.mysql:mysql --link ldb.redis:redis ldb/store:3.0

三、nginx域名配置文件

  • 获取容器配置:docker inspect 容器名 .在获取到配置后,IPAddress即为IP地址。
  • nginx配置为:
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
upstream laravels {
    # 笔者的websocket是172.17.0.4:9501
    server 第一步获取ip地址:5200 weight=5 max_fails=3 fail_timeout=30s;
    # By UnixSocket Stream file
    #server unix:/xxxpath/laravel-s-test/storage/laravels.sock weight=5 max_fails=3 fail_timeout=30s;
    #server 192.168.1.1:5200 weight=3 max_fails=3 fail_timeout=30s;
    #server 192.168.1.2:5200 backup;
}
server {
    listen 80;
    server_name laravels.oo;
    root /var/www/laravels/public;
    # access_log /var/log/$server_name.access.log  main;
    autoindex off;
    index index.html index.htm;
    # Nginx handles the static resources(recommend enabling gzip), LaravelS handles the dynamic resource.
    location / {
        try_files $uri @laravels;
    }
    # Response 404 directly when request the PHP file, to avoid exposing public/*.php
    #location ~* \.php$ {
    #    return 404;
    #}
    # Http and WebSocket are concomitant, Nginx identifies them by "location"
    # Javascript: var ws = new WebSocket("ws://laravels.com/ws");
    location =/ws {
        proxy_http_version 1.1;
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout: Nginx will close the connection if the proxied server does not send data to Nginx in 60 seconds; At the same time, this close behavior is also affected by heartbeat setting of Swoole.
        # proxy_read_timeout 60s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass http://laravels;
    }
    location @laravels {
        proxy_http_version 1.1;
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout 60s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://laravels;
    }
}
  •  不要忘记将LARAVELS_LISTEN_IPon配置修改为0.0.0.0
  • .env 文件配置参数: REDIS_HOST=redis:6379

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值