我需要在我的 ubuntu 服务器中运行使用 gin 框架和 mongodb 作为服务的 golang restful 服务器。该怎么做?(每次我运行 go 脚本时,我也需要这个 gvm 使用 go1.4)
答案1
您可以构建 go 二进制文件并创建 systemd 服务以将其作为服务运行。
sudo nano /lib/systemd/system/go_app.service
使用以下示例作为 .service 配置。
[Unit]
Description=My example go application
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/opt/go_app
[Install]
WantedBy=multi-user.target
来源:https://www.atpeaz.com/running-go-app-as-a-service-on-ubuntu/
答案2
您可以通过运行(或为您的应用程序运行类似的命令)为应用程序创建二进制文件
go build
。构建应该针对 Linux(export GOOS=Linux
)。然后,您将构建版本(二进制文件)复制到服务器的适当位置(例如,
/var/www/webapp
或/opt/webapp
),并确保您拥有root
二进制文件的所有者(或者您可以webappuser
为应用程序设置专用用户)并为二进制文件提供可执行权限(chmod +x /var/www/webapp
)然后你有两个选择 - 使用进程管理器(例如
supervisor
)或使用 Ubuntu 的原生程序systemd
来编写服务申请文件
- 在 ubuntu 上安装 Supervisor 很简单,只需按 即可
apt-get install supervisor
。安装完成后,你可以为你的应用编写一个管理脚本,如下所示:
[program:webapp]
command=/var/www/webapp
autostart=true
autorestart=true
stderr_logfile=/var/log/webapp.err.log
stdout_logfile=/var/log/webapp.out.log
您需要按照webapp.conf
中的方式编写此文件。 写入此文件后,您需要通过运行和 来/etc/supervisor/conf.d/webapp.conf
重新加载主管。 然后您的应用程序将通过 Supervisor 开始作为服务运行。supervisorctl reread
supervisorctl update
- 另一个选项是使用 的
systemd
本机功能。您可以简单地在以下位置写入文件/lib/systemd/system/webapp.service
:
[Unit]
Description=Golang Web application
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/var/www/webapp
[Install]
WantedBy=multi-user.target
写好之后,运行systemctl daemon-reload
;systemctl start webapp.service
和systemctl enable webapp.service
。然后您的应用程序将通过 Systemd 开始作为服务运行。
我通常选择通过主管编写服务文件,因为它允许您仅控制您部署的应用程序。此外,您可能已经注意到我在示例配置中写了一些关于日志文件的内容。这基本上允许我控制日志位置以及应用程序日志的写入方式(即错误在哪里以及应用程序日志在哪里)。这也有助于将特定文件流式传输到外部日志管理服务(例如 AWS Cloudwatch)