mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-10 04:25:20 +02: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