From a9d91593bd408ef988dfaca4002f788b2387aac9 Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Fri, 28 Feb 2025 23:13:26 +0100 Subject: Add deployment files --- Makefile | 10 ++++++++-- deployment/solo-tool.service | 12 ++++++++++++ deployment/start-solo-tool.sh | 16 ++++++++++++++++ web-project/src/solo_tool_web.py | 8 +++++--- 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 deployment/solo-tool.service create mode 100644 deployment/start-solo-tool.sh diff --git a/Makefile b/Makefile index d9ee657..c4fc7e7 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,12 @@ clean: touch .venv/touchfile gui: .venv/touchfile - ./.venv/bin/python web-project/src/solo_tool_web.py + ./.venv/bin/python web-project/src/solo_tool_web.py 8080 -.PHONY: all test clean gui +install: deployment/solo-tool.service deployment/start-solo-tool.sh + sudo install -o root -g root -m 644 deployment/solo-tool.service /etc/systemd/system + sudo install -o root -g root -m 700 deployment/start-solo-tool.sh /var/lib/solo-tool + sudo systemctl daemon-reload + sudo systemctl enable --now solo-tool.service + +.PHONY: all test clean gui install diff --git a/deployment/solo-tool.service b/deployment/solo-tool.service new file mode 100644 index 0000000..78b3bcb --- /dev/null +++ b/deployment/solo-tool.service @@ -0,0 +1,12 @@ +[Unit] +Description=Solo tool web frontend service +After=network.target + +[Service] +Environment="SERVICE_DIR=/var/lib/solo-tool" +Environment="SESSION_DIR=${SERVICE_DIR}/sessions" +Environment="SONG_POOL=${SERVICE_DIR}/songs" +ExecStart=/var/lib/solo-tool/start-solo-tool.sh + +[Install] +WantedBy=multi-user.target diff --git a/deployment/start-solo-tool.sh b/deployment/start-solo-tool.sh new file mode 100644 index 0000000..7b96b22 --- /dev/null +++ b/deployment/start-solo-tool.sh @@ -0,0 +1,16 @@ +#!/usr/bin/bash + +# Ensure that necessary directories exist +mkdir -p "${SESSION_DIR}" "${SONG_POOL}" + +# Get latest revision +cd "${SERVICE_DIR}" +rm -rf repo +git clone --depth 1 https://git.0xf7.com/solo-tool.git repo + +# Bootstrap venv +cd repo +make + +# Run web UI +./.venv/bin/python web-project/src/solo_tool_web.py 80 diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py index 8ae36b5..6dfc787 100644 --- a/web-project/src/solo_tool_web.py +++ b/web-project/src/solo_tool_web.py @@ -1,4 +1,6 @@ from glob import glob +import sys +from os import getenv from os.path import basename, splitext from nicegui import ui from starlette.formparsers import MultiPartParser @@ -7,8 +9,8 @@ from solo_tool import SoloTool from solo_tool.session_manager import loadSession, saveSession from solo_tool import handlers -SESSION_DIR = "/home/eddy/music/sessions" -SONG_POOL = "/home/eddy/music" +SESSION_DIR = getenv("SESSION_DIR", "/home/eddy/music/sessions") +SONG_POOL = getenv("SONG_POOL", "/home/eddy/music") def fileName(path: str) -> str: return basename(splitext(path)[0]) @@ -124,4 +126,4 @@ def landingPage(): for name, soloTool in sessions.items(): ui.button(name, on_click=lambda: ui.navigate.to(f"/{name}")) -ui.run(binding_refresh_interval=0.2) +ui.run(binding_refresh_interval=0.5, port=int(sys.argv[1])) -- cgit v1.2.3