Как запустить 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
) или используйте собственный Ubuntusystemd
для написания служебного файла для вашего приложения
- 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.
- Другой вариант - использовать
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).