diff --git a/Makefile b/Makefile index f7c985e..9771188 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ SQLITE_DB_FILE ?= sqlite/nutrition-tracker.db IT_SQLITE_DB_FILE ?= it/nutrition-tracker-test.db SQLITE_MIGRATIONS_DIR ?= sqlite/migrations GOCOVERDIR ?= coverage -CGO_ENABLED=1 # Required for sqlite3 driver SQLC_VERSION ?= v1.27.0 GOLANG_MIGRATE_VERSION ?= v4.18.1 @@ -12,9 +11,16 @@ HTMX_VERSION ?= 2.0.3 BOOTSTRAP_VERSION ?= 5.3.3 BOOTSTRAP_ICONS_VERSION ?= 1.11.3 +install: install-go-deps init-db build + mv -u prod/nutrition-tracker.service /etc/systemd/system/nutrition-tracker.service + systemctl enable nutrition-tracker.service + +start: + systemctl start nutrition-tracker.service + install-go-deps: go install -v github.com/sqlc-dev/sqlc/cmd/sqlc@$(SQLC_VERSION) - go install -v -tags 'sqlite3' github.com/golang-migrate/migrate/v4/cmd/migrate@$(GOLANG_MIGRATE_VERSION) + CGO_ENABLED=1 go install -v -tags 'sqlite3' github.com/golang-migrate/migrate/v4/cmd/migrate@$(GOLANG_MIGRATE_VERSION) go install -v golang.org/x/tools/cmd/stringer@$(STRINGER_VERSION) init-db: migrate-up diff --git a/prod/nutrition-tracker.service b/prod/nutrition-tracker.service new file mode 100644 index 0000000..07b5752 --- /dev/null +++ b/prod/nutrition-tracker.service @@ -0,0 +1,19 @@ +[Unit] +Description=Nutrition Tracker server +ConditionFileNotEmpty=/root/nutrition-tracker/.env +ConditionPathExists=/root/nutrition-tracker/sqlite/nutrition-tracker.db +After=multi-user.target +Wants=multi-user.target +StartLimitIntervalSec=600 +StartLimitBurst=5 + +[Service] +Type=simple +ExecStartPre=/bin/bash -c 'echo "$(date +"%%F-%%T") starting" >> /var/log/nutrition-tracker-starts.log' +ExecStart=/bin/bash -c '/root/nutriton-tracker/out/nutrition-tracker /root/nutrition-tracker/.env 2>&1 | tee /var/log/nutrition-tracker.log && exit ${PIPESTATUS[0]}' +ExecStartPost=/bin/bash -c 'echo "$(date +"%%F-%%T") started" >> /var/log/nutrition-tracker-starts.log' +Restart=on-failure +TimeoutSec=30 + +[Install] +WantedBy=multi-user.target diff --git a/prod/user-data.sh b/prod/user-data.sh new file mode 100644 index 0000000..1464fa5 --- /dev/null +++ b/prod/user-data.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# logging +exec >> /var/log/user-data.log +exec 2>&1 + +set -ex -o pipefail + +export HOME=/root + +install_go() { + curl -LO https://go.dev/dl/go1.23.1.linux-amd64.tar.gz + rm -rf /usr/local/go + tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz + echo "export PATH=$PATH:/usr/local/go/bin:/root/go/bin" >> /etc/profile + echo "export GOPATH=/root/go" >> /etc/profile + source /etc/profile + go version +} + +main() { + apt-get update + + if ! which make || ! which gcc; then + apt-get install -y build-essential + which make + which gcc + fi + + if ! which go; then + install_go + fi + + if ! which sqlite3; then + apt-get install -y sqlite3 + which sqlite3 + fi + + if [[ ! -d ~/nutrition-tracker ]]; then + cd ~ + git clone https://github.com/szabolcs-horvath/nutrition-tracker.git + cd nutrition-tracker + make install + else + echo "Nutrition Tracker already installed." + fi +} + +main "$@"