Add docker support, fix config dir

This commit is contained in:
Deniz Şafak
2025-05-03 22:55:41 +03:00
parent 0863b25d82
commit 6bf189312a
3 changed files with 94 additions and 2 deletions
+50
View File
@@ -0,0 +1,50 @@
# Special thanks to @geo38 from Reddit, who provided this Dockerfile:
# https://www.reddit.com/r/selfhosted/comments/1k8x1yo/comment/mpe0bz8/
# Use a docker base image that runs a window manager that can be viewed
# outside the image with a web browser or VNC client.
# https://github.com/jlesage/docker-baseimage-gui
FROM jlesage/baseimage-gui:debian-12-v4
# Load stuff needed by abogen
RUN apt-get update \
&& apt-get install -y \
python3 \
python3-venv \
python3-pip \
python3-pyqt5 \
espeak-ng \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# The base image will run /startapp.sh on launch.
#
# The base image runs that script as user 'app' uid=1000. That user
# does not exist in the base image but is created at run time.
#
# We need to install abogen in python venv (requirement of newer python3).
#
# The python venv has to be writable by the 'app' user as abogen dynamically
# installs python packages, so create the venv as that user
#
# We intend to share the /shared directory with the host using a bind volume
# in order to access any source files and the created files.
RUN echo '#!/bin/bash\nsource /app/venv/bin/activate\nexec abogen' > /startapp.sh \
&& chmod 555 /startapp.sh \
&& mkdir /app /shared \
&& chown 1000:1000 /app /shared \
&& chmod 755 /app /shared
# Switch to user 1000 to create the virtual environment
USER 1000:1000
RUN python3 -m venv /app/venv
# Make /app the working dir, copy your project in, and install from “.”
COPY . /app/
WORKDIR /app
RUN /bin/bash -c "source venv/bin/activate && pip install ."
# Change back to root for the baseimage startup scripts
USER root
+12 -2
View File
@@ -67,8 +67,18 @@ def get_version():
# Define config path
def get_user_config_path():
from platformdirs import user_config_dir
# Use platformdirs to get the user configuration directory
config_dir = user_config_dir("abogen", appauthor=False, roaming=True)
# TODO Config directory is changed for Linux and MacOS. But if old config exists, it will be used.
# On nonWindows, prefer ~/.config/abogen if it already exists
if platform.system() != "Windows":
custom_dir = os.path.join(os.path.expanduser("~"), ".config", "abogen")
if os.path.exists(custom_dir):
config_dir = custom_dir
else:
config_dir = user_config_dir("abogen", appauthor=False, roaming=True)
else:
# Windows and fallback case
config_dir = user_config_dir("abogen", appauthor=False, roaming=True)
os.makedirs(config_dir, exist_ok=True)
return os.path.join(config_dir, "config.json")