返回博客

在 Ubuntu 22.04 上使用 Nginx 部署 Go Web 应用程序

在 Ubuntu 22.04 上使用 Nginx 部署 Go Web 应用程序

Go 是一种开源的通用编程语言。它的灵感来自 Python 的高效率,同时提供了 C 语言的能力。它最初由 Google 开发,旨在解决其代码库面临的问题(代码复杂性和编译时间长)。与任何其他现代编程语言一样,Go 适用于各种用途。例如,它可以用于 Web 开发、命令行脚本、网络服务器应用、前端开发等。

在本指南中,我们将引导您完成在 Ubuntu 22.04 LTS 上部署一个简单 Go Web 应用程序的步骤。 我们还将实现 Nginx 反向代理来处理流量负载。

前提条件

要执行本指南中演示的步骤,您需要预先配置以下组件:

如果该服务要通过域名访问,则您必须有一个指向该服务器的 FQDN。在这种情况下,建议使用 SSL 保护 Nginx。您可以从我们的教程中了解更多关于 通过我们的教程在 Ubuntu 上使用 Let’s Encrypt 保护 Nginx.

步骤 1 – 创建 Go Web 应用

我们将构建一个简单的 Go Web 应用,在访问该域名时,它将在屏幕上打印 “Hello World”。此外,当访问 <domain>/greet/<username>.

首先在 $GOPATH 下创建一个新项目。创建项目目录:

Go Web Application Make Dir

切换当前目录:

Go Web Application Change Dir

然后,初始化一个项目:

Go Web Application Init Project

接下来,创建 main.go,它将作为我们 Go 应用程序的根目录。它将托管我们 Web 应用的源代码:

在 VS Code 中打开项目:

将以下代码粘贴到文件 main.go:

Go Web Application Main Go

让我们快速分析一下刚刚创建的 Go 程序:

  • 术语 package main 作为我们应用程序的入口点。它还指示 Go 编译器将该文件编译为可执行文件,而不是共享库。
  • The import 语句导入了程序运行所需的所有其他模块。在这里,我们导入了 fmt(用于打印文本)和 net/http (用于 Web 服务器应用)包。
  • 使用函数 http.HandleFunc,我们建立了两个路由:
    • 第一个路由 / 作为 中的父路由func main.
    • 第二个路由 /greet/ 接受一个 URL 参数(在本例中为一个字符串)。然后该字符串将与问候消息一起显示。
      • URL Path 用于存储其后的值 /greet/。然后该值作为 name URL 参数传递。
    • http.ListenAndServe 函数启动 Web 服务器。在这里,它正在监听端口 9990.

现在我们的程序已经准备就绪,将文件编译为可执行文件:

Go 编译器将创建一个与该文件同名的可执行文件。查看输出:

Go Web Application ls -lh

第 2 步 – 配置用于后台执行的 systemd 单元文件

到目前为止,如果当前用户注销系统,Go Web 应用程序将停止运行。对于 Web 服务器来说,这是一个糟糕的设计。为了解决这个问题,我们将创建一个 systemd 单元文件,使其在后台保持运行,即使在用户注销服务器时也是如此。这使配置向生产级部署又迈进了一步。

创建一个专用的 systemd 文件 goweb.service,位于 /lib/systemd/system:

在单元文件中添加以下代码片段:

go web service

在这里,

  • 变量 ExecStart 指示通过位于我们项目目录中的主可执行文件进入服务的入口点( $GOPATH/go-web)。请注意,我们没有提及 $GOPATH,而是输入了可执行文件的完整路径。这是因为 $GOPATH 变量仅对该用户可见。
  • 变量 Restart 告诉 systemd 在程序停止运行的情况下该怎么做。值 always 告诉 systemd 在每次程序停止执行时都重新启动它。
  • 变量 RestartSec 告诉 systemd 在尝试重新启动程序之前等待特定的时间。在这里,该值设置为 5s (5 秒)。
  • 语句 WantedBy=multi-user.target 指定了 systemd 将启用该服务的状态。

保存文件并关闭编辑器。启动服务:

go web start

验证服务是否已启动并运行:

go web status

如输出所示,应用程序已启动并运行。我们现在准备将 Nginx 用作反向代理。

第 3 步 – 将 Nginx 配置为反向代理

现在,我们将为 Nginx 创建一个服务器块以充当反向代理。Web 应用程序将通过反向代理暴露给互联网(以获得额外的性能和安全性)。

将当前活动目录更改为 sites-available:

cd

现在,使用您希望公开应用程序的域名创建一个文件。为了进行演示,我们将使用 example.com:

 

在块文件中输入以下代码:

example.com

在这里,我们使用 proxy_pass 在服务器的 IP 地址 (localhost) 的端口上提供 Go Web 应用程序 9990.

要启用 Nginx 块,请创建该文件到 sites-enabled 文件夹的符号链接(也称为软链接):

create sym

重新加载 Nginx 配置以使更改生效:

reload nginx

第 4 步 – 验证

如果一切正如预期,那么现在应该可以通过以下方式访问该 Web 应用程序: localhost:9990 以及我们配置的域名。在网页浏览器中打开该 URL:

Hello World

正如预期,应用程序在屏幕上打印了 “Hello World”。这是主路由的工作。接下来,通过访问以下 URL 来测试第二个路由:

Hello Cloud

应用程序成功返回了简单的问候消息,其中包含从 URL 接收到的参数中的名称。

瞧!我们已成功在本地服务器上部署了一个 Go Web 应用程序!

结语

在本指南中,我们演示了如何借助 Go 标准库部署一个简单的 Go Web 应用程序。我们还使用 Nginx 部署了一个反向代理。虽然演示是在本地服务器上进行的,但对于公共服务器,强烈建议 配置 SSL 证书 以安全地暴露给互联网。关于更多 Go 编程内容,您可以查看我们关于 构建和安装 Go 程序.

祝您编程愉快!

author

Pranay Kapgate

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。