能否配置Expo通过自定义域名启动供移动设备公网访问?
问题
我目前在云端托管的Code Server环境中开发React Native应用,需要确认是否支持通过自定义域名运行Expo,让移动设备可以通过公网访问服务。
默认状态下Expo监听地址为 exp://10.0.0.186:19000,属于内网地址,无法从公网直接访问。我已知可以通过 expo start --port XXX 命令指定服务端口,但不清楚是否支持自定义域名配置。
此前尝试添加 --tunnel 参数启动服务失败,错误输出如下:
Error starting ngrok: /usr/lib/node_modules/expo-cli/node_modules/xdl/binaries/linux/adb/adb: 1: Syntax error: Unterminated quoted string Tunnel URL not found (it might not be ready yet), falling back to LAN URL.
解决方案
修复--tunnel模式启动报错
你遇到的ngrok启动失败问题,是Expo CLI内置的adb二进制文件和云端服务器CPU架构不兼容导致的,按以下步骤修复即可:
- 在云端服务器安装和系统架构匹配的官方adb包,Debian/Ubuntu系统执行
sudo apt update && sudo apt install -y adb,CentOS/RHEL系统执行sudo dnf install -y android-tools - 配置环境变量强制Expo调用系统安装的adb:在当前用户的shell配置文件(
~/.bashrc/~/.zshrc,根据你使用的shell选择)中添加export EXPO_USE_SYSTEM_ADB=1,执行source 对应配置文件路径让配置立即生效 - 重新执行
expo start --tunnel即可正常启动ngrok隧道,自动生成公网可访问的链接,直接用移动设备扫码就能连接开发服务,不需要额外配置域名。
自定义域名配置方法
如果需要使用自有域名而非Expo自动生成的隧道地址,按以下步骤配置:
- 先将你的自定义域名A记录解析到云端服务器的公网IP,同时在服务器防火墙、云服务商安全组规则中放开19000、19001、19002三个TCP端口的入站权限,这三个端口分别对应Metro打包服务、调试服务、日志服务
- 启动Expo时指定监听所有网卡地址,执行命令:
expo start --host 0.0.0.0 --port 19000 - 打开项目根目录下的
app.json配置文件,在expo配置节点下添加hostUri字段,值为你的自定义域名加19000端口,示例配置如下:
{ "expo": { "name": "your-app-name", "slug": "your-app-slug", "hostUri": "your-custom-domain.com:19000" } }
- 保存配置后重启Expo服务,终端生成的访问二维码就会指向你的自定义域名地址,移动设备在可以正常解析该域名的网络环境下,扫码即可连接开发服务。
- 如果服务前端挂了Nginx、Caddy等反向代理,需要额外开启WebSocket协议转发支持,否则热更新、调试连接会建立失败。
内容的提问来源于stack exchange,提问作者Djordje
相关产品推荐
相关产品推荐

