Как запустить giang restful api в качестве службы на сервере Ubuntu

Мне нужно запустить golang restful server, который собирает с использованием gin Framework и mongodb в качестве службы на моем сервере Ubuntu. Как это сделать? (каждый раз, когда я запускаю скрипт go, мне нужно это также использовать gvm go1.4)

0 ответов

Вы можете собрать двоичный файл 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/

  • Вы можете создать двоичный файл для приложения, запустив go build(или аналогичная команда для вашего приложения). Сборка должна быть для Linux (export GOOS=Linux).

  • Затем вы копируете сборку на сервер (двоичный файл) в соответствующее место (скажем, /var/www/webapp или /opt/webapp) и убедитесь, что у вас есть root как владелец двоичного файла (или вы можете настроить специальный webappuser пользователь для вашего приложения), а также предоставить исполняемое разрешение для двоичного файла (chmod +x /var/www/webapp)

  • Затем у вас есть 2 варианта: либо использовать диспетчер процессов (например, supervisor) или используйте собственный Ubuntu systemdдля написания служебного файла для вашего приложения

  1. Supervisor можно просто установить для ubuntu как 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. После записи этого файла вам необходимо перезагрузить супервизор, запустивsupervisorctl reread а также supervisorctl update. Затем ваше приложение запустится как служба через Supervisor.

  1. Другой вариант - использовать 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).

Другие вопросы по тегам