diff --git a/.gitignore b/.gitignore index 8af91a2..790a250 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ gitea .env pmb-pf stump +kavita venv zapp.db db/bu diff --git a/backend/Dockerfile b/backend/Dockerfile index fee2993..51ad67d 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.4 -FROM python:3.12-slim-bookworm AS builder +FROM python:3-slim-bookworm AS builder # Second line optional/debug/qol RUN apt update && apt install -y \ diff --git a/backend/requirements.txt b/backend/requirements.txt index 47f7d3e..4b4c5da 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,28 +1,28 @@ -alembic==1.13.2 -blinker==1.8.2 -click==8.1.7 -dnspython==2.6.1 -email_validator==2.2.0 -Flask==3.0.3 -Flask-Login==0.6.3 -Flask-Mail==0.10.0 -Flask-Migrate==4.0.7 -Flask-SQLAlchemy==3.1.1 -Flask-WTF==1.2.1 -greenlet==3.0.3 -idna==3.7 -itsdangerous==2.2.0 -Jinja2==3.1.4 -Mako==1.3.5 -mariadb==1.1.10 -MarkupSafe==2.1.5 -packaging==24.1 -pillow==10.4.0 -pydenticon==0.3.1 -PyJWT==2.9.0 -python-dotenv==1.0.1 -SQLAlchemy==2.0.31 -typing_extensions==4.12.2 -uWSGI==2.0.28 -Werkzeug==3.0.3 -WTForms==3.1.2 +alembic +blinker +click +dnspython +email_validator +Flask +Flask-Login +Flask-Mail +Flask-Migrate +Flask-SQLAlchemy +Flask-WTF +greenlet +idna +itsdangerous +Jinja2 +Mako +mariadb +MarkupSafe +packaging +pillow +pydenticon +PyJWT +python-dotenv +SQLAlchemy +typing_extensions +uWSGI +Werkzeug +WTForms diff --git a/backend/requirements.txt.old b/backend/requirements.txt.old new file mode 100644 index 0000000..47f7d3e --- /dev/null +++ b/backend/requirements.txt.old @@ -0,0 +1,28 @@ +alembic==1.13.2 +blinker==1.8.2 +click==8.1.7 +dnspython==2.6.1 +email_validator==2.2.0 +Flask==3.0.3 +Flask-Login==0.6.3 +Flask-Mail==0.10.0 +Flask-Migrate==4.0.7 +Flask-SQLAlchemy==3.1.1 +Flask-WTF==1.2.1 +greenlet==3.0.3 +idna==3.7 +itsdangerous==2.2.0 +Jinja2==3.1.4 +Mako==1.3.5 +mariadb==1.1.10 +MarkupSafe==2.1.5 +packaging==24.1 +pillow==10.4.0 +pydenticon==0.3.1 +PyJWT==2.9.0 +python-dotenv==1.0.1 +SQLAlchemy==2.0.31 +typing_extensions==4.12.2 +uWSGI==2.0.28 +Werkzeug==3.0.3 +WTForms==3.1.2 diff --git a/compose.yaml b/compose.yaml index ba06d3a..2fd65e7 100644 --- a/compose.yaml +++ b/compose.yaml @@ -31,7 +31,7 @@ services: #tty: true restart: always # Comment following line to use flask (1worker, dev), uncomment to use uwsgi (wsgi) - command: ["uwsgi", "--http", "0.0.0.0:8000", "--master", "-p", "4", "--buffer-size", "16384", "--limit-as", "2048", "-w", "microblog:app"] + #command: ["uwsgi", "--http", "0.0.0.0:8000", "--master", "-p", "4", "--buffer-size", "16384", "--limit-as", "2048", "-w", "microblog:app"] container_name: backend environment: - MYSQL_USER=flasku @@ -144,15 +144,44 @@ services: # Replace my paths (prior to the colons) with your own volumes: - ./stump:/config - - /mnt/hub:/data + - /mnt/hub/rocky-remote/st/rockybookshare/:/rocky-remote + - /mnt/hub/rocky-remote/st/briebookshare/:/rocky-redundant + - /mnt/hub/brie-remote/st/bookshare:/brie-remote #ports: # - 10801:10801 environment: - PUID=1000 - PGID=1000 + - STUMP_ENABLE_UPLOAD=true + - ENABLE_KOREADER_SYNC=true + - ENABLE_OPDS_PROGRESSION=true + - STUMP_MAX_SCANNER_CONCURRENCY=2 + - STUMP_MAX_THUMBNAIL_CONCURRENCY=1 restart: unless-stopped networks: - frontnet + - backnet + + kavita: + image: jvmilazz0/kavita:latest # Using the stable branch from the official dockerhub repo. + container_name: kavita + volumes: + #- /your/path/to/manga:/manga + #- /your/path/to/comics:/comics + - /mnt/hub/rocky-remote/st/rockybookshare/:/rocky-remote + - /mnt/hub/rocky-remote/st/briebookshare/:/rocky-redundant + - /mnt/hub/brie-remote/st/bookshare/:/brie-remote + - ./kavita:/kavita/config # /kavita/config must not be changed + environment: + - PUID=1000 + - PGID=1000 + - TZ=UTC + #ports: + # - "5000:5000" + restart: unless-stopped + networks: + - frontnet + - backnet sshtun: build: diff --git a/proxy/Caddyfile b/proxy/Caddyfile index dd55425..482c265 100644 --- a/proxy/Caddyfile +++ b/proxy/Caddyfile @@ -50,8 +50,11 @@ gut.oily.dad { } } -# Subdomain for Stump (comics/books) - book.oily.dad -book.oily.dad { +# Subdomain for Stump - stump.oily.dad +stump.oily.dad { + # kavita supports gzip + encode gzip + # Root directory (not strictly needed for reverse proxy) root * /var/www/html @@ -60,6 +63,7 @@ book.oily.dad { # Reverse proxy to Stump reverse_proxy http://stump:10801 { + #reverse_proxy http://kavita:5000 { # WebSocket support for Stump (if needed) header_up Connection {>Connection} header_up Upgrade {>Upgrade} @@ -71,3 +75,27 @@ book.oily.dad { } } +# Subdomain for Kavita - book.oily.dad +book.oily.dad { + # kavita supports gzip + encode gzip + + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Reverse proxy to Stump + #reverse_proxy http://stump:10801 { + reverse_proxy http://kavita:5000 { + # WebSocket support for Stump (if needed) + header_up Connection {>Connection} + header_up Upgrade {>Upgrade} + + # Preserve original headers + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} diff --git a/proxy/Caddyfile.maybeno b/proxy/Caddyfile.maybeno new file mode 100644 index 0000000..16025fe --- /dev/null +++ b/proxy/Caddyfile.maybeno @@ -0,0 +1,65 @@ +# Global options +{ + # Disable auto HTTPS since we're using existing certificates + auto_https off +} + +# HTTP to HTTPS redirect +:80 { + redir https://{host}{uri} permanent +} + +# Main domain - oily.dad and www.oily.dad +oily.dad, www.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Onion-Location header + header Onion-Location http://oilydada7ckiseinkbeathsefwgkvjrce743xy7x7iiybkuxh4vheead.onion{path} + + # Reverse proxy to backend + reverse_proxy http://backend:8000 { + # Preserve original host header + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} + +# Subdomain for Gitea - gut.oily.dad +gut.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Reverse proxy to Gitea + reverse_proxy http://gitea:3000 { + # WebSocket support for Gitea + header_up Connection {>Connection} + header_up Upgrade {>Upgrade} + + # Preserve original headers + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} + +# Subdomain for Stump (comics/books) - book.oily.dad +book.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Reverse proxy to Stump + #reverse_proxy http://stump:10801 { + reverse_proxy http://kavita:5000 +} + diff --git a/proxy/Caddyfile.old b/proxy/Caddyfile.old new file mode 100644 index 0000000..a6ed6ec --- /dev/null +++ b/proxy/Caddyfile.old @@ -0,0 +1,74 @@ +# Global options +{ + # Disable auto HTTPS since we're using existing certificates + auto_https off +} + +# HTTP to HTTPS redirect +:80 { + redir https://{host}{uri} permanent +} + +# Main domain - oily.dad and www.oily.dad +oily.dad, www.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Onion-Location header + header Onion-Location http://oilydada7ckiseinkbeathsefwgkvjrce743xy7x7iiybkuxh4vheead.onion{path} + + # Reverse proxy to backend + reverse_proxy http://backend:8000 { + # Preserve original host header + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} + +# Subdomain for Gitea - gut.oily.dad +gut.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Reverse proxy to Gitea + reverse_proxy http://gitea:3000 { + # WebSocket support for Gitea + header_up Connection {>Connection} + header_up Upgrade {>Upgrade} + + # Preserve original headers + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} + +# Subdomain for Stump (comics/books) - book.oily.dad +book.oily.dad { + # Root directory (not strictly needed for reverse proxy) + root * /var/www/html + + # Use existing SSL certificates + tls /etc/letsencrypt/live/oily.dad/fullchain.pem /etc/letsencrypt/live/oily.dad/privkey.pem + + # Reverse proxy to Stump + #reverse_proxy http://stump:10801 { + reverse_proxy http://kavita:5000 { + # WebSocket support for Stump (if needed) + header_up Connection {>Connection} + header_up Upgrade {>Upgrade} + + # Preserve original headers + header_up Host {host} + header_up X-Real-IP {remote} + # X-Forwarded-For and X-Forwarded-Proto are set automatically by Caddy + } +} +