在深入部署步骤之前,让我们简单讨论一下为什么使用 Supervisor 和 Nginx。
- Supervisor 是一个进程控制系统,可帮助管理和监控在后台运行的应用程序。它可确保您的 Go API 保持运行,并在崩溃时自动重新启动。查看完整文档
- Nginx 是一款高性能 Web 服务器,也可以用作反向代理,非常适合将我们的 Go API 提供给互联网。查看完整文档
为什么选择 Supervisor 而不是其他选项?
您可能想知道为什么我们使用 Supervisor 而不选择Systemd、Docker等容器化解决方案。
Supervisor:
- 设置简单,非常适合管理多个进程,轻松进行日志管理
- 需要手动配置
Systemd:
- 原生Linux,启动速度更快设置
- 更复杂,调试更困难
Docker:
- 隔离环境,易于部署,可扩展
- 更多设置开销,需要容器知识
何时应使用 Supervisor?
当您想要一种简单、非容器化的方式来管理 Go 服务时,请使用 Supervisor,它具有自动重启和日志管理等功能,无需处理 systemd 的复杂性或 Docker 的额外开销。
设置并运行简单的 Go API
要求
开始之前,请确保您的系统上安装了以下软件:
1、Go
$ go version |
2、Supervisor
Ubuntu/Debian: |
安装后,检查 Supervisor 是否正在运行:
$ sudo systemctl status supervisor |
如果它没有运行,请启动并启用它:
$ sudo systemctl start supervisor |
3、Nginx
初始化一个新的 Go 项目
首先,为项目创建一个新目录并初始化一个 Go 模块:
$ cd /var/www/ |
此命令创建一个名为的 Go 模块example.com/go-api,用于管理依赖项。
创建一个简单的 API
现在,创建一个新文件main.go并添加以下代码:
$ vim main.go
package main |
编译并运行 Go 服务器:
$ go run main.go |
如果成功,您应该在终端中看到此消息:
Server started at :8080 |
现在使用以下命令测试 API curl:
$ curl localhost:8080 |
使用 Supervisor 将 API 作为后台服务运行
为 Go API 创建 Supervisor 配置
创建一个新的 Supervisor 配置文件:
$ sudo vim /etc/supervisor/conf.d/go-api.conf |
添加以下配置:
[program:go-api] |
解释
- directory=/var/www/simple-go-api→ Go API 的工作目录。
- command=bash -c 'cd /var/www/simple-go-api && ./main'→ 运行 API。
- autostart=true→ 系统启动时自动启动。
- autorestart=true→ 如果进程崩溃则重新启动。
- user=www-data→ 以 www-data 用户身份运行(根据需要调整)。
- redirect_stderr=true→ 将错误日志重定向到 stdout。
- stdout_logfile=/var/log/api/simple-go-api.out.log→ 标准输出日志文件。
- stderr_logfile=/var/log/api/simple-go-api.err.log→ 错误日志文件。
现在,我们需要构建 Go API:
go build -o main .
确保目录和二进制文件具有正确的权限:
sudo chown -R www-data:www-data /var/www/go-api
sudo chmod 775 /var/www/go-api/main
应用 Supervisor 配置
重新加载 Supervisor 并启动服务:
$ sudo supervisorctl reread |
检查服务状态:
$ sudo supervisorctl avail |
检查日志和调试
如果 API 没有运行,请检查日志:
cat /var/log/go-api.out.log
cat /var/log/go-api.err.log
或者使用 Supervisor 的内置日志查看器:
$ sudo supervisorctl tail -f go-api:go-api_00 |
将 Nginx 设置为 API 的反向代理
创建新的配置文件:
$ sudo vim /etc/nginx/sites-available/go-api
server { |
创建符号链接以启用该站点:
$ sudo ln -s /etc/nginx/sites-available/go-api /etc/nginx/sites-enabled/
测试配置:
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果测试成功,重启Nginx:
$ sudo systemctl restart nginx
现在,您可以使用以下方式访问您的 Go API:
本地主机(如果在本地运行)
curl http://localhost
curl http://YOUR_SERVER_IP
注意:如果您想使用自定义域而不是 IP 地址访问 Go API,则需要购买域名、配置其 DNS 以指向服务器的 IP,并相应地更新 Nginx 配置。为了获得更好的安全性,建议使用 Let's Encrypt 设置 HTTPS。
结论
在本指南中,我们使用 Supervisor 部署了一个简单的 Go API 来管理流程,确保自动重启和高效的请求处理,同时使用 Nginx 作为反向代理。感谢您的阅读,祝您部署顺利!