360e8f9eaf
Reviewed-on: #95 12 files changed (+149, -66) Key changes: 1. Monolithic container — Replaced the two-service compose setup (backend + frontend/caddy) with a single timetracker container. Caddy is now built into the image rather than running as a separate container. 2. Supervisord process manager — Added supervisor.conf and installed supervisor in the Dockerfile. entrypoint.sh now delegates to supervisord to manage three processes: Caddy, Gunicorn, and Qcluster — replacing manual trap/signaling logic. 3. Bundled Caddy — The Dockerfile now downloads and installs Caddy v2.9.1 directly into the image (/usr/local/bin/caddy). The Caddyfile was updated to use reverse_proxy localhost:8001 and serves static files from /home/timetracker/app/static. 4. Configurable deployment — Added .env.example with configurable environment variables: TZ, PUID/PGID, TIMETRACKER_EXTERNAL_PORT, DATA_DIR, CSRF_TRUSTED_ORIGINS. docker-compose.yml now references these with sensible defaults. 5. UID/GID flexibility — entrypoint.sh uses usermod/groupmod at startup to remap the timetracker user to the host-specified PUID/PGID, avoiding permission issues with mounted volumes. 6. Database & static files — settings.py now respects DATA_DIR env var for the SQLite database path. STATIC_ROOT changed to BASE_DIR / "static". 7. Dev improvements — New Caddyfile.dev (with browse enabled for static files) and updated Makefile dev-prod target runs Caddy alongside Django in development. 8. Tests — Re-enabled the test step in the Docker build GitHub Actions workflow.
83 lines
1.8 KiB
Makefile
83 lines
1.8 KiB
Makefile
all: css migrate
|
|
|
|
initialize: npm css migrate sethookdir loadplatforms
|
|
|
|
HTMLFILES := $(shell find games/templates -type f)
|
|
PYTHON_VERSION = 3.12
|
|
|
|
npm:
|
|
npm install
|
|
|
|
css: common/input.css
|
|
npx @tailwindcss/cli -i ./common/input.css -o ./games/static/base.css
|
|
|
|
makemigrations:
|
|
uv run python manage.py makemigrations
|
|
|
|
migrate: makemigrations
|
|
uv run python manage.py migrate
|
|
|
|
init:
|
|
uv install $(PYTHON_VERSION)
|
|
uv sync
|
|
npm install
|
|
$(MAKE) sethookdir
|
|
$(MAKE) loadplatforms
|
|
|
|
sethookdir:
|
|
git config core.hooksPath .githooks
|
|
chmod +x .githooks/*
|
|
|
|
dev:
|
|
@npx concurrently \
|
|
--names "Django,Tailwind" \
|
|
--prefix-colors "blue,green" \
|
|
"uv run python -Wa manage.py runserver" \
|
|
"npx @tailwindcss/cli -i ./common/input.css -o ./games/static/base.css --watch"
|
|
|
|
|
|
caddy:
|
|
caddy run --watch
|
|
|
|
dev-prod: migrate collectstatic
|
|
@npx concurrently \
|
|
--names "Caddy,Django,Django-Q" \
|
|
"caddy run --config Caddyfile.dev" \
|
|
"PROD=1 uv run python -m gunicorn --bind 0.0.0.0:8001 timetracker.asgi:application -k uvicorn.workers.UvicornWorker" \
|
|
"PROD=1 uv run manage.py qcluster"
|
|
|
|
dumpgames:
|
|
uv run python manage.py dumpdata --format yaml games --output tracker_fixture.yaml
|
|
|
|
loadplatforms:
|
|
uv run python manage.py loaddata platforms.yaml
|
|
|
|
loadall:
|
|
uv run python manage.py loaddata data.yaml
|
|
|
|
loadsample:
|
|
uv run python manage.py loaddata sample.yaml
|
|
|
|
createsuperuser:
|
|
uv run python manage.py createsuperuser
|
|
|
|
shell:
|
|
uv run python manage.py shell
|
|
|
|
collectstatic:
|
|
uv run python manage.py collectstatic --clear --no-input
|
|
|
|
uv.lock: pyproject.toml
|
|
uv sync
|
|
|
|
test: uv.lock
|
|
uv run --with pytest-django pytest
|
|
|
|
date:
|
|
uv run python -c 'import datetime; from zoneinfo import ZoneInfo; print(datetime.datetime.isoformat(datetime.datetime.now(ZoneInfo("Europe/Prague")), timespec="minutes", sep=" "))'
|
|
|
|
cleanstatic:
|
|
rm -r static/*
|
|
|
|
clean: cleanstatic
|