#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