diff options
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | deployment/solo-tool.service | 12 | ||||
-rw-r--r-- | deployment/start-solo-tool.sh | 16 | ||||
-rw-r--r-- | web-project/src/solo_tool_web.py | 8 |
4 files changed, 41 insertions, 5 deletions
@@ -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])) |