发布于 2026-01-06 2 阅读
0

🚚 如何在任何 GNU/Linux 系统上部署 Golang 应用程序,而无需 Docker?DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

🚚 如何在任何 GNU/Linux 系统上部署 Golang 应用程序,而无需使用 Docker?

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

介绍

嘿,嘿!👋 又一篇关于部署和 Golang 的有趣文章来了。

假设我们需要在远程服务器上运行一个用 Go 编写的应用程序,但是配置 Docker 的时间太长(或者只是懒得配置)。

我们应该怎么做?看看这篇文章吧!😉

📝 目录

我为什么需要这个?

首先,了解服务应用程序在 GNU/Linux 上的工作原理至关重要。此外,对于规模很小的项目(例如初创公司、REST API 微服务等),由于这些项目尚不具备使用 Docker 和部署自动化的能力,了解这些内容也很有帮助。

↑ 目录

我们服务的基础

好了,现在来编写一个简单的 Web 服务,当收到请求时,它会返回一些内容。例如,我将使用我最喜欢的 Web 框架Fiber(v2),它运行速度极快且易于学习。

如果您还不熟悉,请阅读代码中的注释:

package main

import (
    "log"

    "github.com/gofiber/fiber/v2"
)

func main() {
    // Create new Fiber instance
    app := fiber.New()

    // Make path with some content
    app.Get("/hello", func(c *fiber.Ctx) error {
        // Return a string with a dummy text
        return c.SendString("Hello, World 👋!")
    })

    // Start server on http://localhost:3000 or error
    log.Fatal(app.Listen(":3000"))
}
Enter fullscreen mode Exit fullscreen mode

将此文件另存为main.go,并在名称相似的文件夹中构建适用于 GNU/Linux x64 的二进制文件hello_world

GOOS=linux GOARCH=amd64 go build main.go -o ./hello_world
Enter fullscreen mode Exit fullscreen mode

好的。现在,只需将此二进制文件复制到远程服务器的相应/root/go文件夹中即可。

↑ 目录

关于纤维的几句话

你或许会问,那我为什么如此钟爱Fiber Web 框架呢?答案就在于它的主要特性:

  1. 稳健路由
  2. 极致性能
  3. 具备 API 接口的 Web 框架
  4. 灵活的中间件支持
  5. 内存占用低

尤其值得一提的是,Discord社区非常友好,而且文档详尽(已翻译成多种世界语言)!

↑ 目录

创建systemd服务

systemd是一个为 Linux 操作系统提供一系列系统组件的软件套件。

[...] 它的主要目标是统一 Linux 发行版的服务配置和行为;systemd 的主要组件是“系统和服务管理器”——一个用于引导用户空间和管理系统用户的初始化系统。

— 维基百科

太好了!现在我们来创建一个新服务。

  • root以(超级用户)身份连接到远程服务器
  • *.service在文件夹内创建一个扩展名为 .htm 的文件systemd
nano /etc/systemd/system/hello_world.service
Enter fullscreen mode Exit fullscreen mode
  • 将此代码复制到此处:
[Unit]
Description=Go sample web app
After=multi-user.target

[Service]
User=root
Group=root
ExecStart=/root/go/hello_world

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode
  • 点击Ctrl+O保存,Ctrl+X点击关闭编辑器
  • 接下来,启动并启用此服务:
systemctl start hello_world.service
systemctl enable hello_world.service
Enter fullscreen mode Exit fullscreen mode

☝️ 即使远程服务器重启,服务也会自动启动。

↑ 目录

设置反向代理服务器

我将使用Nginx作为反向代理服务器,但您可以选择任何其他代理服务器。

  • 使用软件包管理器进行安装nginx。对于类 Debian 系统,它看起来会像这样:
apt install nginx -y
Enter fullscreen mode Exit fullscreen mode
  • 开始nginx服务:
systemctl start nginx
Enter fullscreen mode Exit fullscreen mode
  • /etc/nginx/sites-available/hello_world在文件中创建配置:
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    location /root/go/hello_world {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }
}
Enter fullscreen mode Exit fullscreen mode
  • 创建指向该文件夹的配置文件符号链接sites-enabled
ln -s /etc/nginx/sites-available/hello_world /etc/nginx/sites-enabled
Enter fullscreen mode Exit fullscreen mode
  • 最后,重新加载nginx以应用配置:
nginx -t && nginx -s reload
Enter fullscreen mode Exit fullscreen mode

🔥 有时可能是3000远程服务器上的端口不可用。请检查防火墙设置。

↑ 目录

最终结果

没错,就是这样!快去http://your_server_ip:3000看看结果吧🎉

结果

↑ 目录

照片由

PS

如果你想在这个博客上看到更多类似的文章,请在下方留言并订阅我。谢谢!😻

❗️您可以通过Boosty平台支持我,既可以长期支持,也可以一次性支持。所有收益都将用于支持我的开源软件项目,并激励我为社区创作新的产品和文章。

在Boosty上支持我

当然,您也可以帮助我让开发者的工作变得更好!只需以贡献者的身份加入我的项目即可。很简单!

我最需要你帮助(和点赞)的项目👇

  • 🔥 gowebly:一款新一代 CLI 工具,可轻松使用 Go 在后端创建出色的 Web 应用程序,使用 htmx、hyperscript 或 Alpine.js 以及最流行的 CSS 框架在前端进行开发。
  • create-go-app:通过运行一条 CLI 命令,创建一个包含 Go 后端、前端和部署自动化功能的新生产就绪项目。

我的其他一些小项目:yatrgosljson2csvcsv2api

文章来源:https://dev.to/koddr/how-to-deploy-golang-application-on-any-gnu-linux-system-but-without-docker-59m1