Write the Code. Change the World.

1月 09

https://github.com/coturn/coturn

这里使用 docker 来构建。

先准备一份 docker-compose.yaml 文件。

version: '3.9'
  services:
    coturn:
      image: coturn/coturn
      ports:
        - 3478:3478
        - 5349:5349
      volumes:
        - ./conf/coturn:/etc/coturn
      networks: webrtcnet
networks:
  webrtcnet:
    name: 'webrtcnet'
    driver: bridge

这里配置了端口映射和配置文件。当然配置文件可以不要,这样就空账号密码。ip 随主机 ip。这里加了 volumes, 可以有,但不一定要用。

./conf/coturn/turnserver.conf 配置文件。这里我全注释掉了。

# listening-port=3478
# tls-listening-port=5349       
# external-ip=47.**.**.81 
# user=17vision:17vision2024
# realm=17vision.com

然后执行 docker-compose up -d 运行起来。

最后,可以通过 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 这个站点进行测试。

操作如下图所示:

相关文章

https://blog.csdn.net/codebooks/article/details/115757643

https://zhuanlan.zhihu.com/p/622818243

1月 06

有的时候只有一个域名。想让其他的服务也用这个域名和 80 端口。用 nginx 做代理就是一种方式。websocket 通常也会用到。

业务场景

在这里,有一个域名 xxx.com,通常使用 https 来访问,比如 https://xxx.com。加入 https://xxx.com, 已经有正在使用的业务。下边的场景都不能去干涉已有的业务场景。

  • 我有一个 node.js 的服务,其端口后是 3000,那么就可以通过代理来实现域名的访问。只是,这里要在 url 上做文章。 比如我请求 https://xxx.com/blog/xxx 这个服务,就让其转发到 node.js 的服务的 /xxx 上。那么,nginx 可以这样配置。
# Upgrade Connection websockets 和 升级的 http 协议才会用到
location ^~/blog/ {
    proxy_pass http://blog:3000/;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_set_header Host $host;
    # proxy_set_header Upgrade $http_upgrade; 
    # proxy_set_header Connection 'upgrade';
    # proxy_cache_bypass $http_upgrade;
}

这里的代理 http://blog:3000/ 是因为 docker 构建的同一个网络中的服务叫做 blog,所以可以这么写。如果仅仅是宿主机,可以通过具体的 ip 来弄。

其实,之前我是想通过 rewrite 来实现。代码就是下边这样。只是这样虽然 url 修改了,但是似乎又重新发起请求了,并不是直接到代理那边。以至于添加的 location 无效。具体是什么情况,也不是很了解。毕竟 nginx 不精通,遇到具体的需要就去查询。所以想实现修改 url 又能实现代理,可以用上边的 location 语法。

# Upgrade Connection websockets 和 升级的 http 协议才会用到
location /blog {
    rewrite ^/dss(.*)$ $1 last;  
    proxy_pass http://blog:3000;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    # proxy_set_header Upgrade $http_upgrade; 
    # proxy_set_header Host $host;
    # proxy_set_header Connection 'upgrade';
    # proxy_cache_bypass $http_upgrade;
}

主要是因为 node 那边定义的路由就是 /xxx/xxx, 没有 blog 这一节。

1月 03

使用 docker 是很方便,有的时候掉进去,却找不到原因。使用 docker-compose 对服务进行编排是一个很常见的场景。当执行 docker-compose up -d 的时候,无论是服务端代码,还是配置代码,都是正确的,日志也是正确的。可是容器总是会 Exited 状态。这个时候就很着急。其实,容器退出的原因一般是因为错误和不在前台运行导致的。既然没有错误,那估计就是容器没在前台运行。

今天使用 alpine 为基础镜像,安装一个 supervisord 作为守护进程,然后就是自己的业务环境 skynet 和 skynet 的业务代码。当以前都配置的很好,编写的很好,状态也很好的时候。容器就是退出。这个是一个很痛苦的事情。其实,还是对容器退出没理解透彻。

下边是启动时候,打印的一些日志。

nanjing_dev  | NanjingDevServer                 STARTING
nanjing_dev  | NanjingDevServer                 RUNNING   pid 14, uptime 0:00:50
nanjing_dev  | Proto Recv-Q Send-Q Local Address           Foreign Address         State
nanjing_dev  | tcp        0      0 127.0.0.11:33351        0.0.0.0:*               LISTEN
nanjing_dev  | tcp        0      0 0.0.0.0:8105            0.0.0.0:*               LISTEN
nanjing_dev  | udp        0      0 127.0.0.11:36173        0.0.0.0:*

没有任何错误。错误就在容器没有在前台运行。因为服务是用 supervisord 来启动的。让 supervisord 在前台运行不就好了。这个时候只需要修改 supervisor_xxx.ini 的配置文件,将启动方式改为前台即可。

[supervisord]
nodaemon=true

就是 nodaemon 设置为 true。 默认是 false 哈。