golang多端口本地服务管理插件ergo的使用
Golang多端口本地服务管理插件Ergo的使用
简介
Ergo是一个用于本地域名管理的反向代理代理工具,可以轻松管理运行在不同端口的多个应用程序。
快速开始
基本使用示例
# 启动一个监听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
完整示例
- 首先创建一个简单的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)
}
- 启动服务:
go run main.go
- 配置Ergo:
# 添加服务到ergo
echo "goservice http://localhost:3000" > .ergo
# 启动ergo
ergo run
- 现在可以通过
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
- 进入首选项 > 常规 > 网络设置
- 选择"自动代理配置URL"
- 输入
http://localhost:2000/proxy.pac
开发
构建
make all
测试
make test
# 集成测试(需要管理员权限)
make test-integration
总结
Ergo是一个简单高效的工具,可以帮助开发者轻松管理本地多个服务的域名映射,无需记住复杂的端口号。通过简单的配置文件,即可实现类似生产环境的域名访问体验。
更多关于golang多端口本地服务管理插件ergo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于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)
}
}
常见问题解决
- 端口冲突:确保80端口未被占用,或修改Ergo监听端口
- DNS解析问题:可能需要安装dnsmasq或修改hosts文件
- 权限问题:在Linux/Mac上可能需要sudo运行
替代方案
如果你需要更复杂的功能,可以考虑:
docker-compose
:适合容器化环境ngrok
:用于将本地服务暴露到公网localtunnel
:简单的端口转发工具
Ergo的优势在于其简单性和对多服务管理的专注性,特别适合前端开发和微服务架构的本地测试。