Reputation: 63
I have created a small golang API (nrfapi) which include a config.toml file. I would like to deploy the api on other ubuntu VM therefore i build the API using the "GOOS=linux GOARCH=amd64 go build" and then scp the build file to the VM /var/www/go diretory. I also create a unit file (nrf.service) ending in .service within the /etc/systemd/system directory. In the .service file i have the following configuration
[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
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'.
However, after starting the API using the following commands
sudo systemctl start nrfapi sudo systemctl enable nrfapi
the API is not running. I realize from the error message above that the API need the config.toml file configurations.
My problem now is that i dont know which directory to place the config.toml file so that the golang api can read the configuration parameters from there. Can anyone help me solve this? How do i go about this?
Upvotes: 0
Views: 940
Reputation: 10136
If you use relative paths to files in your Go scrips then executable will look for them relative to the current working directory. To change working directory in systemd
just add WorkingDirectory
parameter to the Service
section:
[Service]
WorkingDirectory=/var/www/go
And place config.toml
file inside /var/www/go
dir.
You can also embed static files into Go binary using this library: https://github.com/gobuffalo/packr
Upvotes: 3