развернуть приложение Golang (api) с помощью файла config.toml

#go

#Вперед

Вопрос:

Я создал небольшой golang API (nrfapi), который включает файл config.toml. Я хотел бы развернуть API на другой виртуальной машине Ubuntu, поэтому я создаю API, используя «GOOS = linux GOARCH = amd64 go build», а затем отправляю файл сборки в директорию виртуальной машины / var / www / go. Я также создаю модульный файл (nrf.service), заканчивающийся на .service, в каталоге /etc/ systemd / system. В файле .service у меня есть следующая конфигурация

 [Unit]
Description= instance to serve nrf api
After=network.target

[Service]
User=root
Group=www-data

ExecStart=/var/www/go/nrfapi)

[Install]
WantedBy=multi-user.target

  

ОШИБКА

 Error

● nrf.service - instance to serve nrf api
   Loaded: loaded (/etc/systemd/system/nrf.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-03-30 16:44:51 EET; 11s ago
 Main PID: 4066 (code=exited, status=1/FAILURE)

Mar 30 16:44:51 ubuntu systemd[1]: Started instance to serve nrf api.
Mar 30 16:44:51 ubuntu nrfapi[4066]: 2019/03/30 16:44:51 open config.toml: no such file or directory
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Main process exited, code=exited, status=1/FAILURE
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Unit entered failed state.
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Failed with result 'exit-code'.

  

Однако после запуска API с помощью следующих команд

sudo systemctl запустить nrfapi sudo systemctl включить nrfapi

API не запущен. Из приведенного выше сообщения об ошибке я понимаю, что API нужны конфигурации файла config.toml.

Моя проблема сейчас в том, что я не знаю, в какой каталог поместить файл config.toml, чтобы golang api мог считывать параметры конфигурации оттуда. Кто-нибудь может помочь мне решить эту проблему? Как мне это сделать?

Комментарии:

1. Вы пытались изменить WorkingDirectory сервер?

2. Привет, да, я сделал, и это работает. Спасибо!!

Ответ №1:

Если вы используете относительные пути к файлам в ваших сценариях Go, то исполняемый файл будет искать их относительно текущего рабочего каталога. Чтобы изменить рабочий каталог в, systemd просто добавьте WorkingDirectory параметр в Service раздел:

 [Service]
WorkingDirectory=/var/www/go
  

И поместить config.toml файл в /var/www/go каталог.

Вы также можете встраивать статические файлы в двоичный файл Go, используя эту библиотеку:https://github.com/gobuffalo/packr