mirror of
https://github.com/RunLit/Bambu-Run.git
synced 2026-10-21 15:37:38 +01:00
capability to point to local postgres db
:
This commit is contained in:
40
README.md
40
README.md
@@ -153,6 +153,46 @@ cd Bambu-Run
|
|||||||
bash setup.sh
|
bash setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Pointing at an External Postgres Database (Read-Only)
|
||||||
|
|
||||||
|
If you already have printer data in a Postgres database (e.g. shared with
|
||||||
|
another Django project using the same `infrastructure_*` tables) and want this
|
||||||
|
install to act as a read-only viewer instead of collecting its own data:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/Bambu-Run
|
||||||
|
|
||||||
|
# 1. Stop and disable the collector — it's the only thing that writes to the
|
||||||
|
# database (PrinterMetrics, FilamentSnapshot, PrintJob). A read-only DB
|
||||||
|
# user will make it crash-loop, so turn it off.
|
||||||
|
systemctl --user stop bambu-run-collector.service
|
||||||
|
systemctl --user disable bambu-run-collector.service
|
||||||
|
|
||||||
|
# 2. Install the Postgres driver
|
||||||
|
.venv/bin/pip install ".[postgres]"
|
||||||
|
|
||||||
|
# 3. Edit .env — point at Postgres with a read-only user, and switch sessions
|
||||||
|
# to signed cookies so login doesn't need to write to django_session
|
||||||
|
cat >> .env <<'EOF'
|
||||||
|
DB_ENGINE=postgresql
|
||||||
|
DB_NAME=your_db_name
|
||||||
|
DB_USER=your_readonly_user
|
||||||
|
DB_PASSWORD=your_readonly_password
|
||||||
|
DB_HOST=your_db_host
|
||||||
|
DB_PORT=5432
|
||||||
|
SESSION_ENGINE=signed_cookies
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 4. Restart the web service (do NOT run `manage.py migrate` — the schema
|
||||||
|
# already exists in that database, and a read-only user can't apply
|
||||||
|
# migrations anyway)
|
||||||
|
systemctl --user restart bambu-run-web.service
|
||||||
|
```
|
||||||
|
|
||||||
|
You'll need a login that already exists in that database's `auth_user`
|
||||||
|
table — this install can't create one itself without write access. If MCP is
|
||||||
|
enabled, it becomes read-only too, since its tools only ever `SELECT`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Docker Setup
|
## Docker Setup
|
||||||
|
|||||||
@@ -87,6 +87,15 @@ else:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Session storage — DB-backed by default. Set SESSION_ENGINE=signed_cookies when
|
||||||
|
# pointing DB_ENGINE at a database whose user has read-only access, since the
|
||||||
|
# default engine writes a row to django_session on every login.
|
||||||
|
SESSION_ENGINE = (
|
||||||
|
"django.contrib.sessions.backends.signed_cookies"
|
||||||
|
if os.environ.get("SESSION_ENGINE") == "signed_cookies"
|
||||||
|
else "django.contrib.sessions.backends.db"
|
||||||
|
)
|
||||||
|
|
||||||
# Password validation
|
# Password validation
|
||||||
AUTH_PASSWORD_VALIDATORS = [
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
|
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
|
||||||
|
|||||||
@@ -7,3 +7,15 @@ from django.core.wsgi import get_wsgi_application
|
|||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.settings")
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "standalone.settings")
|
||||||
|
|
||||||
application = get_wsgi_application()
|
application = get_wsgi_application()
|
||||||
|
|
||||||
|
# Read-only deployments (SESSION_ENGINE=signed_cookies) point at a database
|
||||||
|
# whose user has no write access. Django writes to auth_user.last_login on
|
||||||
|
# every successful login by default, which would error out against such a
|
||||||
|
# user and break login entirely — so skip that write here.
|
||||||
|
from django.conf import settings # noqa: E402
|
||||||
|
|
||||||
|
if settings.SESSION_ENGINE == "django.contrib.sessions.backends.signed_cookies":
|
||||||
|
from django.contrib.auth.models import update_last_login
|
||||||
|
from django.contrib.auth.signals import user_logged_in
|
||||||
|
|
||||||
|
user_logged_in.disconnect(update_last_login, dispatch_uid="update_last_login")
|
||||||
|
|||||||
Reference in New Issue
Block a user