golang多端口本地服务管理插件ergo的使用

Golang多端口本地服务管理插件Ergo的使用

简介

Ergo是一个用于本地域名管理的反向代理代理工具,可以轻松管理运行在不同端口的多个应用程序。

Ergo Proxy

快速开始

基本使用示例

# 启动一个监听8800端口的web服务器
python3 -m http.server 8800 &

# 添加一个名为mylocalsite的服务到ergo
echo "http://localhost:8800 mylocalsite" > .ergo

# 启动ergo本地服务(可能需要sudo权限)
ergo local &

# 向ergo服务发起HTTP请求
curl http://mylocalsite.localhost

完整示例

  1. 首先创建一个简单的Go HTTP服务:
// main.go
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello from Go service!")
    })

    fmt.Println("Server running on port 3000")
    http.ListenAndServe(":3000", nil)
}
  1. 启动服务:
go run main.go
  1. 配置Ergo:
# 添加服务到ergo
echo "goservice http://localhost:3000" > .ergo

# 启动ergo
ergo run
  1. 现在可以通过http://goservice.dev访问你的Go服务

安装方法

OSX

brew tap cristianoliveira/tap
brew install ergo

Linux

curl -s https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.sh | sh

Windows

从PowerShell运行:

Invoke-WebRequest https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.ps1 -out ./install.ps1; ./install.ps1

从源码安装

go install github.com/cristianoliveira/ergo

高级用法

本地子域名

# 绑定到localhost:80并监听子域名请求
ergo local

# 使用不同端口
ergo local -p 8080

# 使用不同的回环地址
echo '127.0.0.1 localapp' >> /etc/hosts
ergo local -domain localapp

添加多个服务

# 添加第一个服务
echo "service1 http://localhost:3000" > .ergo

# 添加第二个服务
echo "service2 http://localhost:4000" >> .ergo

# 使用ergo add快捷方式添加服务
ergo add service3 http://localhost:5000

# 列出所有服务
ergo list

# 启动ergo
ergo run

配置代理

系统网络配置

需要将http://127.0.0.1:2000/proxy.pac配置到系统网络设置中。

Ergo提供了自动配置命令:

ergo setup <operation-system>

支持的OS包括:

  • osx
  • linux-gnome
  • windows

浏览器配置

Chrome

# Linux
google-chrome --proxy-pac-url=http://localhost:2000/proxy.pac

# OS X
open -a "Google Chrome" --args --proxy-pac-url=http://localhost:2000/proxy.pac

Firefox

  1. 进入首选项 > 常规 > 网络设置
  2. 选择"自动代理配置URL"
  3. 输入http://localhost:2000/proxy.pac

开发

构建

make all

测试

make test
# 集成测试(需要管理员权限)
make test-integration

总结

Ergo是一个简单高效的工具,可以帮助开发者轻松管理本地多个服务的域名映射,无需记住复杂的端口号。通过简单的配置文件,即可实现类似生产环境的域名访问体验。


更多关于golang多端口本地服务管理插件ergo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang多端口本地服务管理插件ergo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang多端口本地服务管理插件Ergo使用指南

Ergo是一个用Go编写的轻量级本地开发环境管理工具,特别适合管理多个本地服务端口。它提供了简单的命令来启动、停止和监控多个本地服务。

安装Ergo

go install github.com/cristianoliveira/ergo@latest

基本使用

1. 初始化配置

首先创建一个~/.ergo目录和配置文件:

mkdir -p ~/.ergo

然后创建配置文件~/.ergo/config

[services]
# 服务配置格式: name = "host:port"
myapp = "localhost:3000"
api = "localhost:4000"
frontend = "localhost:5000"

2. 启动Ergo代理

ergo run

这将启动Ergo代理,默认监听.dev域名的80端口。

3. 访问服务

配置完成后,可以通过以下URL访问服务:

高级功能

自定义域名后缀

在配置文件中修改域名后缀:

[ergo]
domain = "test"
port = 80

[services]
myapp = "localhost:3000"

然后就可以通过http://myapp.test访问。

动态添加服务

无需重启Ergo,可以直接在配置文件中添加新服务:

[services]
myapp = "localhost:3000"
api = "localhost:4000"
frontend = "localhost:5000"
newservice = "localhost:6000"  # 新增服务

使用环境变量

Ergo支持环境变量配置:

export ERGO_DOMAIN=local
ergo run

Golang集成示例

以下是一个Go程序,它使用Ergo管理多个本地服务:

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	// 1. 创建Ergo配置
	config := `[ergo]
domain = "local"
port = 80

[services]
app1 = "localhost:8080"
app2 = "localhost:8081"
`

	// 2. 写入配置文件
	configPath := os.ExpandEnv("$HOME/.ergo/config")
	err := os.WriteFile(configPath, []byte(config), 0644)
	if err != nil {
		fmt.Printf("Error writing config: %v\n", err)
		return
	}

	// 3. 启动Ergo
	cmd := exec.Command("ergo", "run")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	
	go func() {
		if err := cmd.Run(); err != nil {
			fmt.Printf("Ergo error: %v\n", err)
		}
	}()

	// 4. 启动示例服务
	go startDemoServer(8080, "Service 1")
	go startDemoServer(8081, "Service 2")

	fmt.Println("Access services at:")
	fmt.Println("http://app1.local")
	fmt.Println("http://app2.local")
	fmt.Println("Press Ctrl+C to stop")

	select {} // 保持程序运行
}

func startDemoServer(port int, name string) {
	cmd := exec.Command("python3", "-m", "http.server", fmt.Sprintf("%d", port))
	cmd.Dir = os.TempDir()
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		fmt.Printf("%s error: %v\n", name, err)
	}
}

常见问题解决

  1. 端口冲突:确保80端口未被占用,或修改Ergo监听端口
  2. DNS解析问题:可能需要安装dnsmasq或修改hosts文件
  3. 权限问题:在Linux/Mac上可能需要sudo运行

替代方案

如果你需要更复杂的功能,可以考虑:

  • docker-compose:适合容器化环境
  • ngrok:用于将本地服务暴露到公网
  • localtunnel:简单的端口转发工具

Ergo的优势在于其简单性和对多服务管理的专注性,特别适合前端开发和微服务架构的本地测试。

回到顶部