在 windows server 2008 上部署 go web 项目

Posted

技术标签:

【中文标题】在 windows server 2008 上部署 go web 项目【英文标题】:Deploy go web project on windows server 2008 【发布时间】:2019-10-22 04:30:30 【问题描述】:

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

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

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

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

告诉我如何启动 Go 服务器,在注销后我的项目并没有停止生命

【问题讨论】:

最后一个选项可能是最接近的。您只需将必要的文件放在具有正确权限的位置,以便运行它的帐户访问它们。 @Adrian 我在代码中写了 GO full path dist (html, css, js) 并且运行良好 【参考方案1】:

最简单的解决方案是使用 windows schedular。

在后台以最高权限在系统登录时启动您的 exe 文件。因此,每当您的系统登录时,它都会启动您的 exe 并在后台运行。

你可以参考这个答案, How do I set a Windows scheduled task to run in the background?

【讨论】:

【参考方案2】:

两种处理方式。

    使用 ISS(或其他网络服务器)。

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

    保持项目代码不变,但是

    确保它能够被告知在哪个套接字上侦听连接,以便您可以告诉它侦听,例如,localhost:8080。 例如,教您的程序接受一个命令行参数,例如 -listen 或其他。 以某种方式配置 IIS,使其reverse-proxies 在某个虚拟主机和/或正在运行的服务器实例的路径前缀上传入 HTTP 请求。您必须使 IIS 配置(将请求代理到的套接字)以及 IIS 启动程序的方式彼此一致。

    重写代码以改用 FastCGI 协议。 这基本上相当于使用net/fastcgi 而不是net/http

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

    将您的程序转换为适当的 Windows™ 服务或使用一些帮助工具“包装”它以使其成为 Windows™ 服务。

    前者更简洁,因为它允许您的程序真正了解 Windows 服务管理子系统将发送给您的控制请求。如果/需要时,您还可以轻松地将您的程序变成收缩包装的产品。你可以从golang.org/x/sys/windows/svc开始。

    后者可能更容易一些,但 YMMV。 如果您想以这种方式进行探索,请寻找 srvanynssmwinsv 等工具。

    请注意,其中只有 srvany 是由 Microsoft® 提供的,并且,AFAIK,自 Win7、W2k8 以来它就丢失了,因此您最好的内置赌注可能会与 sc.exe 混淆。

    无论哪种情况,如果您选择这条路线,您将必须处理为您的应用资产设置适当权限的问题。 这个问题本身就相当复杂,因为涉及到许多活动部件。

    首先,您必须确保尝试访问您的资产,而不是从“进程的当前目录”——当它作为服务运行时,这可能本质上是随机的——但无论是从进程显式的地方告诉何时运行(通过命令行选项或其他方式)或使用合理的工程猜测以某种方式弄清楚(这本身就是一个复杂的话题)。

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

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

【讨论】:

在任何情况下权限都是一个问题。默认情况下,IIS 和 Windows 服务都作为系统帐户运行。

以上是关于在 windows server 2008 上部署 go web 项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows server 2008服务器上部署tomcat环境

asp.net网站部署在云服务器windows server 2008上

Windows server2008服务器的 zabbix 怎么部署

Windows Server 2008 多站点部署HTTPS

如何在 Windows Server 2008 R1 上安装 .NET Framework 4.5 参考库?

windows server 2008R2上怎么部署java+tomcat网站