TangSengDaoDao / TangSengDaoDaoServer

高颜值 IM 即时通讯,聊天
https://tsdaodao.com
Apache License 2.0
2.41k stars 338 forks source link

cloudfalre tunnel方式暴露8090到公网, 无法通过iOS app访问tsdd server 收发消息 #97

Closed yeslsl closed 4 months ago

yeslsl commented 4 months ago

现象

我想通过iOS app方式外网访问tsdd server, 我在本机内网通过docker compose部署tsdd后, 把 8090端口 通过 cloudflare的tunnel方式映射到了公网, https://tsdd.xxxxx.com:443, 在iOS app填写https://tsdd.xxxxx.com:443 后 能登录成功, 但是一直显示连接中, 无法发送消息和接收消息,请问我还需要做怎么配置呢? 我的docker-compise文件里的外部ip写的是内网ip, 请问我该怎么做, 才能在外网通过iOS app访问tsdd呢?

日志

看了tsdd server的日志没看到报错, 我需要看哪个服务的日志排查问题呢?

yeslsl commented 4 months ago

这是 docker-compose.yml文件内容

version: '3.1'
services:
  wukongim:  # 唐僧叨叨通讯服务(悟空IM)
    image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v1.2
    restart: always
    ports:
      # - "5001:5001" # http api端口(业务端调用,仅限内网开放)
      - "5100:5100"  # tcp长连接端口(外网开放)
      - "5200:5200" # websocket端口(外网开放)
      - "5300:5300" # 监控端口
    volumes:
      - ./wukongim:/root/wukongim
    env_file:
      - .env
    environment:
      - WK_EXTERNAL_IP=${EXTERNAL_IP}
  tangsengdaodaoserver:  # 唐僧叨叨的业务服务
    image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoserver:v1.5
    restart: always
    command: "api"
    healthcheck:
      test: "wget -q -Y off -O /dev/null http://localhost:8090/v1/ping > /dev/null 2>&1"
      interval: 10s
      timeout: 10s
      retries: 3
    depends_on:
       - redis
       - mysql
       - wukongim
    ports:
      - "8090:8090"
    volumes:
      - ./tsdd:/home/tsdddata
      - ./tsdd/configs:/home/configs  # 如果需要使用yaml配置,在当前目录下创建tsdd/configs目录,并新建tsdd.yaml配置文件(注意:配置生效优先级environment高于配置文件,如果你配置了environment将覆盖tsdd.yaml的配置项)
    env_file:
      - .env
    environment:
      - TS_DB_MYSQLADDR=root:${MYSQL_ROOT_PASSWORD}@tcp(mysql)/${MYSQL_DATABASE}?charset=utf8mb4&parseTime=true&loc=Local
      - TS_EXTERNAL_IP=${EXTERNAL_IP}
      - TS_FILESERVICE=${TS_FILESERVICE}
      - TS_MINIO_ACCESSKEYID=${MINIO_ROOT_USER}
      - TS_MINIO_SECRETACCESSKEY=${MINIO_ROOT_PASSWORD}
  tangsengdaodaoweb:  # 唐僧叨叨的web服务
    image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoweb:latest
    restart: always
    environment:
      - API_URL=http://tangsengdaodaoserver:8090/
    ports:
      - "4092:80"
  tangsengdaodaomanager:  # 唐僧叨叨的后台管理系统
    image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaomanager:latest
    restart: always
    environment:
      - API_URL=http://tangsengdaodaoserver:8090/
    ports:
      - "4093:80"
  minio: # minio文件管理服务
    image: minio/minio:RELEASE.2023-07-18T17-49-40Z # use a remote image
    expose:
      - "9000"
      - "9001"
    command: "server /data --console-address ':9001'"
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      - MINIO_ROOT_USER=${MINIO_ROOT_USER}
      - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
    volumes:
      - ./miniodata:/data
  mysql:  # mysql数据库
    image: mysql:8.0.33
    command: --default-authentication-plugin=mysql_native_password
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
  redis:  # redis
    image: redis:7.2.3
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 1s
      timeout: 3s
      retries: 30
  adminer:  # mysql web管理工具 调试用,为了安全生产不要打开
    image: adminer:latest
    ports:
      - 8306:8080
yeslsl commented 4 months ago

这是 .env文件内容

# ######### 基础配置 #########

# 服务器的对外IP地址
EXTERNAL_IP=192.168.1.80

 # mysql root用户的密码
MYSQL_ROOT_PASSWORD=Aa1234567
# mysql默认数据库名字
MYSQL_DATABASE=im

# ######### Minio文件服务配置 #########

# minio文件服务的用户名
MINIO_ROOT_USER=minio
#  minio文件服务的密码
MINIO_ROOT_PASSWORD=Aa1234567

######### WuKongIM相关的配置 #########

#  模式 debug or release
WK_MODE=release  
 # 开启最近会话服务端维护
WK_CONVERSATION_ON=true  
# 业务服务的grpc地址
WK_WEBHOOK_GRPCADDR=tangsengdaodaoserver:6979 
# 业务服务的数据源地址
WK_DATASOURCE_ADDR=http://tangsengdaodaoserver:8090/v1/datasource 
# 开启频道信息同步
WK_DATASOURCE_CHANNELINFOON=true 
 # 开启token认证
WK_TOKENAUTHON=true  
# 是否关闭个人白名单功能,默认是开启的,如果关闭发送消息将不做好友关系的判断
WK_WHITELISTOFFOFPERSON=false 

######### TangSengDaoDao的配置 #########

#  模式 debug or release
TS_MODE=release  
# wukongim的内网访问地址
TS_WUKONGIM_APIURL=http://wukongim:5001
# redis连接地址
TS_DB_REDISADDR=redis:6379
# 验证码,如果此值不为空,则使用此值作为验证码,为空则使用短信提供商发送的验证码
TS_SMSCODE=111111Aa
# 使用文件服务的类型
TS_FILESERVICE=minio
# 默认头像获取地址
TS_AVATAR_DEFAULTBASEURL=https://api.multiavatar.com/{avatar}.png
# 唐僧叨叨后台管理系统的管理员密码,用户名为 superAdmin,可随机填写(至少8位)
TS_ADMINPWD=admin1234567
# 唐僧叨叨的文件服务地址
TS_MINIO_UPLOADURL=http://minio:9000
tangtaoit commented 4 months ago

EXTERNAL_IP需要填写外网IP。

yeslsl commented 4 months ago

EXTERNAL_IP需要填写外网IP。

感谢回答, 问题已经解决了,EXTERNAL_IP这里写内网的就行。 问题出在tcp长链接端口5100没有暴露, 配置WK_EXTERNAL_TCPADDR 就可以了