Skip to content

Instantly share code, notes, and snippets.

@karl-gustav
Last active March 31, 2020 11:01
Show Gist options
  • Save karl-gustav/f83d984b5742095c6325287ed65a7ae3 to your computer and use it in GitHub Desktop.
Save karl-gustav/f83d984b5742095c6325287ed65a7ae3 to your computer and use it in GitHub Desktop.
Makefile for deploying a go executable as a service to an ssh machine
SSH_SERVER=34.32.31.30
SERVICE_NAME=flexit_web
test::
go test ./...
build::
GOOS=linux GOARCH=arm GOARM=6 go build -o $(SERVICE_NAME) main.go
deploy:: build
@tar czf - $(SERVICE_NAME) *.html *.css *.js *.service | ssh $(SSH_SERVER) 'echo ≫ Backing up old executable...\
&& test -f /srv/$(SERVICE_NAME)/$(SERVICE_NAME)\
&& mv /srv/$(SERVICE_NAME)/$(SERVICE_NAME){,.old}\
&& echo ≫ Extracting into /srv/$(SERVICE_NAME)/...\
; tar xzf - -C /srv/$(SERVICE_NAME)/\
&& echo ≫ Restarting service...\
&& sudo systemctl daemon-reload\
&& sudo service $(SERVICE_NAME) restart\
&& echo ≫ Checking status...\
&& sudo service $(SERVICE_NAME) status\
&& echo ≫ Done'
setup::
echo "Running command on $(SSH_SERVER): $$SETUP_CMD"
echo "$$SERVICE_FILE" | ssh $(SSH_SERVER) "$$SETUP_CMD"
define SETUP_CMD
echo Making directory \
&& sudo mkdir -p /srv/$(SERVICE_NAME)/ \
&& echo Creating service file \
&& sudo cat > /srv/$(SERVICE_NAME)/$(SERVICE_NAME).service \
&& echo Setting folder permissions \
&& sudo chown $$USER -R /srv/$(SERVICE_NAME)/ \
&& echo Enabling service \
&& sudo sudo systemctl enable /srv/$(SERVICE_NAME)/$(SERVICE_NAME).service \
&& sudo systemctl daemon-reload
endef
export SETUP_CMD
define SERVICE_FILE
[Unit]
Description=$(SERVICE_NAME)
[Service]
Type=simple
WorkingDirectory=/srv/$(SERVICE_NAME)/
ExecStart=/srv/$(SERVICE_NAME)/$(SERVICE_NAME) -s /dev/ttyUSB.RS485
Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
endef
export SERVICE_FILE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment