Compare commits
6 Commits
22c0627298
...
70c95f7976
Author | SHA1 | Date | |
---|---|---|---|
![]() |
70c95f7976 | ||
d95c4344c3 | |||
5aa9f26470 | |||
7ef1df2304 | |||
1f7d4daeed | |||
![]() |
8165f70d64 |
12
README.md
12
README.md
@@ -61,10 +61,15 @@ services:
|
||||
environment:
|
||||
# Django
|
||||
- DJANGO_DEBUG=true
|
||||
- USE_X_FORWARDED_HOST=true
|
||||
- DJANGO_SECURE_PROXY_SSL_HEADER=true
|
||||
- DJANGO_CSRF_COOKIE_SECURE=true
|
||||
- DJANGO_SESSION_COOKIE_SECURE=true
|
||||
- DJANGO_ALLOWED_HOSTS=*
|
||||
- DJANGO_SECRET_KEY=change-me
|
||||
- DB_PATH=/app/data/db.sqlite3
|
||||
- NOTIFICATIONS_ALLOW_DUPLICATES=false
|
||||
- DJANGO_CSRF_TRUSTED_ORIGINS="https://subscribarr.local.js-devop.de"
|
||||
# App Settings (optional, otherwise use first-run setup)
|
||||
#- JELLYFIN_URL=
|
||||
#- JELLYFIN_API_KEY=
|
||||
@@ -85,11 +90,8 @@ services:
|
||||
# Cron schedule (default every 30min)
|
||||
- CRON_SCHEDULE=*/30 * * * *
|
||||
volumes:
|
||||
- subscribarr-data:/app/data
|
||||
- ./data:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
subscribarr-data:
|
||||
```
|
||||
|
||||
---
|
||||
@@ -115,7 +117,7 @@ volumes:
|
||||
|
||||
## First Run
|
||||
|
||||
1. Start the container (or dev server) and open `http://<host>:8000`.
|
||||
1. Start the container (or dev server) and open `http://<host>:8081`.
|
||||
2. Complete the **first-time setup**: Jellyfin URL/API key (required), optional Sonarr/Radarr, SMTP.
|
||||
3. **Sign in** with Jellyfin credentials (admin users in Jellyfin become admins in Subscribarr).
|
||||
4. Adjust settings later at `/settings/`.
|
||||
|
@@ -8,11 +8,15 @@ services:
|
||||
environment:
|
||||
# Django
|
||||
- DJANGO_DEBUG=true
|
||||
- USE_X_FORWARDED_HOST=true
|
||||
- DJANGO_SECURE_PROXY_SSL_HEADER=true
|
||||
- DJANGO_CSRF_COOKIE_SECURE=true
|
||||
- DJANGO_SESSION_COOKIE_SECURE=true
|
||||
- DJANGO_ALLOWED_HOSTS=*
|
||||
- DJANGO_SECRET_KEY=change-me
|
||||
- DB_PATH=/app/data/db.sqlite3
|
||||
- NOTIFICATIONS_ALLOW_DUPLICATES=false
|
||||
- DJANGO_CSRF_TRUSTED_ORIGINS="https://subscribarr.example.com,https://app.example.org"
|
||||
- DJANGO_CSRF_TRUSTED_ORIGINS="https://subscribarr.local.js-devop.de"
|
||||
# App Settings (optional, otherwise use first-run setup)
|
||||
#- JELLYFIN_URL=
|
||||
#- JELLYFIN_API_KEY=
|
||||
@@ -33,8 +37,5 @@ services:
|
||||
# Cron schedule (default every 30min)
|
||||
- CRON_SCHEDULE=*/30 * * * *
|
||||
volumes:
|
||||
- subscribarr-data:/app/data
|
||||
- ./data:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
subscribarr-data:
|
||||
|
@@ -2,6 +2,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
# Apply migrations
|
||||
python manage.py makemigrations
|
||||
python manage.py migrate --noinput
|
||||
|
||||
# Create admin user if provided
|
||||
@@ -66,11 +67,20 @@ print("AppSettings seeded from environment (if provided)")
|
||||
PY
|
||||
|
||||
# Setup cron if schedule provided
|
||||
if [[ -n "${CRON_SCHEDULE:-}" ]]; then
|
||||
echo "Configuring cron: ${CRON_SCHEDULE}"
|
||||
echo "${CRON_SCHEDULE} cd /app && /usr/local/bin/python manage.py check_new_media >> /app/cron.log 2>&1" > /etc/cron.d/subscribarr
|
||||
if [ -n "${CRON_SCHEDULE:-}" ]; then
|
||||
cat >/etc/cron.d/subscribarr <<EOF
|
||||
SHELL=/bin/sh
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
|
||||
# gleiche DB wie die App:
|
||||
DB_PATH=${DB_PATH:-/app/data/db.sqlite3}
|
||||
PYTHON=/usr/local/bin/python
|
||||
|
||||
# <m h dom mon dow> <user> <cmd>
|
||||
${CRON_SCHEDULE} root cd /app && \$PYTHON manage.py migrate --noinput && \$PYTHON manage.py check_new_media >> /app/cron.log 2>&1
|
||||
EOF
|
||||
|
||||
chmod 0644 /etc/cron.d/subscribarr
|
||||
crontab /etc/cron.d/subscribarr
|
||||
/usr/sbin/cron
|
||||
fi
|
||||
|
||||
|
@@ -116,6 +116,21 @@ if not CSRF_TRUSTED_ORIGINS:
|
||||
CSRF_TRUSTED_ORIGINS = ['https://subscribarr.local.js-devop.de']
|
||||
|
||||
|
||||
USE_X_FORWARDED_HOST = os.getenv('USE_X_FORWARDED_HOST', 'False').lower() == 'true'
|
||||
if os.getenv('DJANGO_SECURE_PROXY_SSL_HEADER', '').lower() in ('1', 'true', 'yes'):
|
||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
||||
|
||||
# Secure cookies when served over HTTPS (optional)
|
||||
CSRF_COOKIE_SECURE = os.getenv('DJANGO_CSRF_COOKIE_SECURE', 'False').lower() == 'true'
|
||||
SESSION_COOKIE_SECURE = os.getenv('DJANGO_SESSION_COOKIE_SECURE', 'False').lower() == 'true'
|
||||
|
||||
# Optional cookie domain override (for subdomain setups)
|
||||
_cookie_domain = os.getenv('DJANGO_COOKIE_DOMAIN', '').strip()
|
||||
if _cookie_domain:
|
||||
CSRF_COOKIE_DOMAIN = _cookie_domain
|
||||
SESSION_COOKIE_DOMAIN = _cookie_domain
|
||||
|
||||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/5.2/topics/i18n/
|
||||
|
Reference in New Issue
Block a user