Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在windows server 2008上部署go web项目_Windows_Http_Go_Deployment - Fatal编程技术网

在windows server 2008上部署go web项目

在windows server 2008上部署go web项目,windows,http,go,deployment,Windows,Http,Go,Deployment,我的项目:go-1.12.5;杜松子酒;vue cli-3.8.2 在windows server 2008上,在本地帐户下运行main.exe-效果良好。但当注销我的帐户时,所有本地帐户程序都将关闭,包括我的go服务器 我做的第一件事是尝试为我的GO配置IIS。没有什么好结果 然后我尝试从系统帐户运行main.exepsexec-s c:\rafd\main.exe。注销时,进程不会关闭。但是前端在我的帐户中,系统看不到我项目的本地文件(js、html、css) 告诉我如何启动Go服务器,以在

我的项目:go-1.12.5;杜松子酒;vue cli-3.8.2

在windows server 2008上,在本地帐户下运行main.exe-效果良好。但当注销我的帐户时,所有本地帐户程序都将关闭,包括我的go服务器

我做的第一件事是尝试为我的GO配置IIS。没有什么好结果

然后我尝试从系统帐户运行main.exepsexec-s c:\rafd\main.exe。注销时,进程不会关闭。但是前端在我的帐户中,系统看不到我项目的本地文件(js、html、css)


告诉我如何启动Go服务器,以在注销我的项目后不停止生活

两种方法实现它

  • 使用ISS(或其他web服务器)

    如果您选择此选项,您还有更多选择:

    • 保持项目代码不变,但是

      • 确保能够告诉它在哪个套接字上侦听连接,以便您可以告诉它在
        localhost:8080上侦听。
        例如,教您的程序接受命令行参数,例如
        -listen
        或其他
      • 配置IIS的方式应确保它能够将特定虚拟主机上的传入HTTP请求和/或服务器运行实例的路径前缀发送到服务器。您必须使IIS配置成为它代理请求的套接字,并且IIS启动程序的方式彼此一致
    • 重新编写代码,改用FastCGI协议。 这基本上相当于使用
      net/fastcgi
      而不是
      net/http

      好处是IIS(甚至它的旧版本)支持FastCGI开箱即用。 缺点是FastCGI被认为比Go中的普通HTTP稍慢,并且您将失去在独立模式下运行程序的能力

  • 把你的程序转换成一个合适的窗口™ 服务或使用一些帮助工具“包装”它,使其成为一个窗口™ 服务

    前者更干净,因为它允许您的程序实际了解Windows服务管理子系统将发送给您的控制请求。如果需要,您还可以轻松地将程序转换为收缩包装产品。你可以从一开始

    后者可能更容易一些,但是YMMV。 如果您想探索这种方法,请查找诸如
    srvany
    nssm
    winsv
    等工具

    请注意,其中只有
    srvany
    是由Microsoft®提供的,而且它在Win7、W2k8之后就不存在了,因此您最好的内置赌注可能是搞乱了
    sc.exe

    在任何一种情况下,如果您选择此路径,您都必须处理在应用程序资产上设置适当权限的问题。 这个问题本身相当复杂,因为涉及到许多运动部件

    首先,您必须确保您的资产不是从“进程的当前目录”访问的——当它作为一个服务运行时,这个目录基本上是随机的,但可以是从进程运行时被明确告知的位置(通过命令行选项或其他方式)访问的,也可以是通过合理的猜测得出的(这本身就是一个复杂的话题)

    下一步,您必须确保帐户位于您的Windows™ 用于运行服务的确实具有访问资产存储位置的权限。 另一种可能是添加一个专用帐户,并让SCM使用它来运行您的服务

    请注意,在任何一种情况下,正确的错误处理及其报告都是至关重要的:当您的程序以非交互方式运行时,您想知道什么时候出错:套接字无法打开或侦听、未找到资产、尝试打开资产文件时拒绝访问,等等在所有这些情况下,您必须1)处理错误,2)以您可以处理的方式报告错误。 对于非交互式窗口™ 编程最好的方法可能是使用事件日志(例如,通过
    golang.org/x/sys/windows/svc/eventlog


  • 有两种方法

  • 使用ISS(或其他web服务器)

    如果您选择此选项,您还有更多选择:

    • 保持项目代码不变,但是

      • 确保能够告诉它在哪个套接字上侦听连接,以便您可以告诉它在
        localhost:8080上侦听。
        例如,教您的程序接受命令行参数,例如
        -listen
        或其他
      • 配置IIS的方式应确保它能够将特定虚拟主机上的传入HTTP请求和/或服务器运行实例的路径前缀发送到服务器。您必须使IIS配置成为它代理请求的套接字,并且IIS启动程序的方式彼此一致
    • 重新编写代码,改用FastCGI协议。 这基本上相当于使用
      net/fastcgi
      而不是
      net/http

      好处是IIS(甚至它的旧版本)支持FastCGI开箱即用。 缺点是FastCGI被认为比Go中的普通HTTP稍慢,并且您将失去在独立模式下运行程序的能力

  • 把你的程序转换成一个合适的窗口™ 服务或使用一些帮助工具“包装”它,使其成为一个窗口™ 服务

    前者更干净,因为它允许您的程序实际了解Windows服务管理子系统将发送给您的控制请求。如果需要,您还可以轻松地将程序转换为收缩包装产品。你可以从一开始

    后者可能更容易一些,但是YMMV。 如果您想探索这种方法,请查找诸如
    srvany
    nssm
    winsv
    等工具

    请注意,其中只有
    srvany
    是由Microsoft®提供的,而且还缺少si