You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何映射GitHub Actions Runner公网IP并暴露端口以手动验证服务?

解决GitHub Actions Runner端口暴露供本地浏览器访问的方案

直接通过Runner公网IP+3000端口访问不可行,因为GitHub托管的Runner处于NAT网络架构下,公网IP是平台共享的,不会直接映射到Runner实例的内部端口,外部无法直接访问。

可行的方案是使用反向隧道工具将Runner内部的3000端口转发到公网可访问的地址,以下是具体实现方式:

1. 方案一:使用ngrok(稳定可靠,支持自定义域名)

准备工作

  • 注册ngrok账号,获取个人NGROK_AUTH_TOKEN
  • 进入GitHub仓库的「Settings」→「Secrets and variables」→「Actions」,添加名为NGROK_AUTH_TOKEN的Secret,值为你的令牌

修改后的工作流配置

name: Start NPM Server & Expose Port

on:
  push:
    branches: [ main ]
  workflow_dispatch: # 手动触发更适合临时验证场景

jobs:
  start-server:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Install dependencies
      run: npm install
    - name: Setup ngrok
      run: |
        curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
        echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
        sudo apt update && sudo apt install ngrok -y
        ngrok config add-authtoken ${{ secrets.NGROK_AUTH_TOKEN }}
    - name: Start server and expose port
      run: |
        npm start & # 后台启动服务,避免阻塞后续步骤
        sleep 10 # 等待服务完全启动,可根据实际调整时长
        ngrok http 3000 --log=stdout & # 后台启动ngrok转发端口
        sleep 5 # 等待ngrok建立公网连接
        # 输出公网访问地址
        curl -s http://localhost:4040/api/tunnels | jq -r '.tunnels[0].public_url'
        sleep 3600 # 保持Runner在线1小时,足够完成手动验证

关键说明

  • 手动触发:通过workflow_dispatch可以按需启动工作流,避免代码推送时自动触发浪费资源
  • 后台运行:用&让服务和ngrok在后台运行,确保后续步骤能正常执行
  • 公网地址获取:通过ngrok本地API获取转发后的公网URL,直接复制到本地浏览器即可访问Runner上的服务

2. 方案二:使用LocalTunnel(无需认证,快速测试)

如果只是临时快速验证,可使用无需注册的LocalTunnel:

name: Start NPM Server & Expose Port

on:
  workflow_dispatch:

jobs:
  start-server:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Install dependencies
      run: npm install
    - name: Setup LocalTunnel
      run: npm install -g localtunnel
    - name: Start server and expose port
      run: |
        npm start &
        sleep 10
        # 自定义子域名可选,不填则随机分配
        lt --port 3000 --subdomain my-test-server &
        sleep 5
        echo "访问地址: https://my-test-server.loca.lt"
        sleep 3600

注意:LocalTunnel免费域名稳定性较差,仅适合临时测试场景。

内容的提问来源于stack exchange,提问作者Matt Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:09:24