mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 18:29:21 +00:00 
			
		
		
		
	Refactor BookWyrm role: switch to source-built Dockerfile, update README/meta for usability, add env improvements (ALLOWED_HOSTS, Redis vars, Celery broker), and pin version v0.7.5. See https://chatgpt.com/share/68b6d273-abc4-800f-ad3f-e1a5b9f8dad0
This commit is contained in:
		| @@ -1,7 +1,39 @@ | ||||
| FROM "{{ BOOKWYRM_IMAGE }}:{{ BOOKWYRM_VERSION }}" | ||||
| # Build BookWyrm from source (no upstream image available) | ||||
| ARG BOOKWYRM_VERSION={{ BOOKWYRM_VERSION | default('v0.7.5') }} | ||||
| FROM python:3.11-bookworm AS builder | ||||
|  | ||||
| # Place for optional plugins/patches | ||||
| # COPY ./patches/ /app/patches/ | ||||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | ||||
|     git build-essential libpq-dev \ | ||||
|     libjpeg-dev zlib1g-dev libxml2-dev libxslt1-dev libffi-dev libmagic-dev \ | ||||
|   && rm -rf /var/lib/apt/lists/* | ||||
|  | ||||
| # Ensure media/data exist (UID/GID depend on upstream; keep generic) | ||||
| RUN mkdir -p /app/data /app/media && chown -R 1000:1000 /app/data /app/media | ||||
| WORKDIR /src | ||||
| # Shallow clone the chosen tag/branch | ||||
| RUN git clone --depth=1 --branch "${BOOKWYRM_VERSION}" https://github.com/bookwyrm-social/bookwyrm.git . | ||||
|  | ||||
| # Pre-install Python deps to a wheelhouse for faster final image | ||||
| RUN pip install --upgrade pip \ | ||||
|  && pip wheel --wheel-dir /wheels -r requirements.txt | ||||
|  | ||||
| FROM python:3.11-bookworm | ||||
| ENV PYTHONUNBUFFERED=1 | ||||
| WORKDIR /app | ||||
|  | ||||
| # Copy app source and wheels | ||||
| COPY --from=builder /src /app | ||||
| COPY --from=builder /wheels /wheels | ||||
|  | ||||
| # System deps for runtime | ||||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | ||||
|     libpq5 curl \ | ||||
|     libjpeg62-turbo zlib1g libxml2 libxslt1.1 libffi8 libmagic1 \ | ||||
|   && rm -rf /var/lib/apt/lists/* \ | ||||
|   && pip install --no-cache-dir --no-index --find-links=/wheels -r /app/requirements.txt \ | ||||
|   && adduser --disabled-password --gecos '' bookwyrm \ | ||||
|   && mkdir -p /app/data /app/media \ | ||||
|   && chown -R bookwyrm:bookwyrm /app | ||||
|  | ||||
| USER bookwyrm | ||||
|  | ||||
| # Gunicorn/Celery are configured by upstream files in repo | ||||
| # Ports/healthcheck handled by compose template | ||||
|   | ||||
| @@ -1,6 +1,13 @@ | ||||
| {% include 'roles/docker-compose/templates/base.yml.j2' %} | ||||
|  | ||||
|   application: | ||||
| {% include 'roles/docker-container/templates/base.yml.j2' %} | ||||
|     command: >- | ||||
|       bash -lc ' | ||||
|         python manage.py migrate --noinput && | ||||
|         python manage.py collectstatic --noinput && | ||||
|         gunicorn bookwyrm.wsgi:application --bind 0.0.0.0:{{ container_port }} | ||||
|       ' | ||||
|     build: | ||||
|       context: . | ||||
|       dockerfile: Dockerfile | ||||
| @@ -9,22 +16,18 @@ | ||||
|     hostname: "{{ BOOKWYRM_HOSTNAME }}" | ||||
|     ports: | ||||
|       - "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}" | ||||
|     environment: | ||||
| {% include 'roles/web-app-bookwyrm/templates/env.j2' %} | ||||
|     volumes: | ||||
|       - 'data:/app/data' | ||||
|       - 'media:/app/media' | ||||
| {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %} | ||||
| {% include 'roles/docker-container/templates/base.yml.j2' %} | ||||
| {% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %} | ||||
| {% include 'roles/docker-container/templates/networks.yml.j2' %} | ||||
|  | ||||
|   worker: | ||||
| {% include 'roles/docker-container/templates/base.yml.j2' %} | ||||
|     image: "{{ BOOKWYRM_CUSTOM_IMAGE }}" | ||||
|     container_name: "{{ BOOKWYRM_CONTAINER }}-worker" | ||||
|     container_name: "{{ BOOKWYRM_WORKER_CONTAINER }}" | ||||
|     command: "bash -lc 'celery -A celerywyrm worker -l INFO'" | ||||
|     environment: | ||||
| {% include 'roles/web-app-bookwyrm/templates/env.j2' %} | ||||
|     volumes: | ||||
|       - 'data:/app/data' | ||||
|       - 'media:/app/media' | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| # Core | ||||
| BOOKWYRM_URL="{{ BOOKWYRM_URL }}" | ||||
| DOMAIN="{{ BOOKWYRM_HOSTNAME }}" | ||||
| ALLOWED_HOSTS="{{ BOOKWYRM_HOSTNAME }},127.0.0.1,localhost" | ||||
| PORT="{{ WEB_PORT }}" | ||||
| WEB_PROTOCOL="{{ WEB_PROTOCOL }}" | ||||
| MEDIA_ROOT="/app/media" | ||||
| @@ -16,8 +17,9 @@ EMAIL="{{ users['no-reply'].email }}" | ||||
| DATABASE_URL="postgres://{{ database_username }}:{{ database_password }}@{{ database_host }}:{{ database_port }}/{{ database_name }}" | ||||
|  | ||||
| # Redis / Celery | ||||
| REDIS_BROKER_URL="redis://{{ BOOKWYRM_REDIS_HOST }}:{{ BOOKWYRM_REDIS_PORT }}/0" | ||||
| REDIS_CACHE_URL="redis://{{ BOOKWYRM_REDIS_HOST }}:{{ BOOKWYRM_REDIS_PORT }}/1" | ||||
| REDIS_BROKER_URL="{{ BOOKWYRM_REDIS_BROKER_URL }}" | ||||
| REDIS_CACHE_URL="{{ BOOKWYRM_REDIS_BASE_URL }}/1" | ||||
| CELERY_BROKER_URL="{{ BOOKWYRM_REDIS_BROKER_URL }}" | ||||
|  | ||||
| # Proxy (if BookWyrm sits behind reverse proxy) | ||||
| FORWARDED_ALLOW_IPS="*" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user