在 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。
如果您想以这种方式进行探索,请寻找 srvany
、nssm
、winsv
等工具。
请注意,其中只有 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