在Windows服务器上部署和运行Golang Web应用的完整指南

在Windows服务器上部署和运行Golang Web应用的完整指南 我的Go应用程序在我的笔记本电脑上运行一个Web API,并且运行顺畅。

enter image description here

我阅读了这篇文章并使用配置文件完成了IIS设置:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>					
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:9000/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

并将编译后的文件复制到了同一位置,但是一旦我访问URL,什么也没得到,而且一旦我运行.exe文件,它很快就终止了!

有什么办法能在MS服务器上运行这个可执行文件吗?

enter image description here

更新

如果我在服务器上移除绑定,那么应用程序就能正常工作,看起来这个绑定过程阻塞了端口!

image


更多关于在Windows服务器上部署和运行Golang Web应用的完整指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

非常感谢。

更多关于在Windows服务器上部署和运行Golang Web应用的完整指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


大家好, 要在 Windows 服务器上运行 Go Web 应用程序,您可以按照以下步骤操作:

  1. 安装 Go:从官方网站下载并安装适用于 Windows 的最新版本 Go。
  2. 设置 GOPATH 环境变量:将 GOPATH 环境变量设置为您希望存储 Go 项目的路径。
  3. 安装 Git:如果您计划使用 Git 来管理 Go 项目的源代码,请下载并安装适用于 Windows 的 Git。
  4. 克隆或下载 Go 项目:从源代码仓库(例如 GitHub)克隆或下载 Go 项目。
  5. 构建 Go 项目:打开命令提示符并导航到项目目录。使用 go build 命令来构建 Go 项目。
  6. 运行 Go 项目:使用 go run 命令来运行 Go 项目。默认情况下,Go Web 应用将监听 8080 端口。您可以使用 -port 标志指定不同的端口。
  7. 配置 Web 服务器:为了使 Go Web 应用能够从互联网访问,您需要配置一个 Web 服务器(例如 IIS 或 Apache)以将请求转发到 Go 应用。
  8. 测试应用:打开 Web 浏览器并导航到服务器的 IP 地址或主机名以测试 Go Web 应用。

遵循这些步骤应该能让您在 Windows 服务器上运行 Go Web 应用程序。请注意,这些步骤的具体细节可能会因您使用的 Windows Server 具体版本和运行的 Go 项目而异。希望按照以下过程逐步操作后,您的问题能得到解决。

在Windows服务器上部署Go Web应用时,端口冲突是常见问题。IIS反向代理配置正确,但Go应用无法启动,通常是因为端口已被占用。以下是解决方案:

1. 检查端口占用

在PowerShell中运行:

netstat -ano | findstr :9000

如果端口被占用,会显示进程ID。终止占用进程或修改Go应用端口。

2. 修改Go应用端口

修改Go代码使用其他端口:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Go Web应用运行中")
    })
    
    // 使用9001端口避免冲突
    port := ":9001"
    fmt.Printf("服务器运行在端口 %s\n", port)
    http.ListenAndServe(port, nil)
}

3. 更新IIS反向代理配置

修改web.config指向新端口:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>					
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:9001/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

4. 使用Windows服务运行Go应用

创建服务确保应用持续运行:

方法1:使用nssm(推荐)

下载nssm,然后运行:

nssm install GoWebService "C:\path\to\your\app.exe"
nssm set GoWebService AppDirectory "C:\path\to\your\"
nssm start GoWebService

方法2:使用sc命令

sc create GoWebService binPath= "C:\path\to\your\app.exe" start= auto
sc start GoWebService

5. 防火墙配置

确保防火墙允许端口访问:

New-NetFirewallRule -DisplayName "Go Web App" -Direction Inbound -Protocol TCP -LocalPort 9001 -Action Allow

6. 调试步骤

创建测试应用验证配置:

package main

import (
    "log"
    "net/http"
    "os"
)

func main() {
    // 创建日志文件
    f, err := os.OpenFile("goapp.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
    log.SetOutput(f)
    
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        log.Printf("收到请求: %s %s", r.Method, r.URL.Path)
        w.Write([]byte("Go应用正常运行"))
    })
    
    log.Println("启动服务器在端口 9001")
    if err := http.ListenAndServe(":9001", nil); err != nil {
        log.Fatal("服务器启动失败:", err)
    }
}

编译并运行测试应用,检查日志文件确认应用状态。

7. 验证IIS配置

在IIS管理器中:

  • 确保应用程序池正在运行
  • 检查站点绑定没有冲突
  • 确认URL重写模块已安装

关键问题:IIS可能已经占用了9000端口。修改Go应用使用其他端口(如9001),并相应更新IIS反向代理配置,即可解决端口冲突问题。

回到顶部