Dockerfile.seaweedfs.split bakes SeaweedFS master, volume, filer, S3 gateway and admin UI into the all-in-one as five more supervisord programs, with the weed binary copied from the official image and pinned by SEAWEED_VERSION. The readiness chain the compose split expressed with depends_on and healthchecks becomes until-wget loops: master, volume, filer, then the gateway, which seeds the bucket and PocketBase's identity and refuses to serve if the grep gate fails. The volume server sits on 8081 because 8080 is the API Server; every role except the gateway and the admin UI binds loopback. docker-compose.prod.seaweedfs.split.yml goes from six services to one, with build: and image: both set so the same file builds, pushes and pulls, under a registry name of its own since this image expects three volumes. The env example and README follow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
137 lines
7.0 KiB
Bash
137 lines
7.0 KiB
Bash
# DriverVault all-in-one — production config, SeaweedFS split into its roles and
|
|
# built into the same image (Dockerfile.seaweedfs.split). Copy to .env and fill
|
|
# in, then:
|
|
# docker compose -f docker-compose.prod.seaweedfs.split.yml build
|
|
# docker compose -f docker-compose.prod.seaweedfs.split.yml up -d
|
|
# The build needs the repo checkout; to deploy elsewhere, `push` after building
|
|
# and `pull` on the deploy host.
|
|
|
|
# --- Image -------------------------------------------------------------------
|
|
# The tag the build produces and `push`/`pull` use. Its own name, not
|
|
# drivervault-aio: this image carries SeaweedFS and expects three volumes.
|
|
AIO_IMAGE=10.2.1.10:5500/admin/drivervault-aio-seaweedfs-split:latest
|
|
# Build args, both pinned in the Dockerfile. Set to override at build time.
|
|
# PB_VERSION=0.39.11
|
|
# SEAWEED_VERSION=4.45
|
|
|
|
# --- PocketBase superuser (required) -----------------------------------------
|
|
# Created/updated on first boot. The API Server uses these to manage the database.
|
|
PB_ADMIN_EMAIL=admin@example.com
|
|
PB_ADMIN_PASSWORD=change-me-long-password
|
|
|
|
# --- DriverVault super-admin (app login) -------------------------------------
|
|
# The first application user, created by the API Server on boot with role
|
|
# "superadmin" if no user with this email exists yet. Leave blank to skip.
|
|
DRIVERVAULT_SUPERADMIN_EMAIL=owner@example.com
|
|
DRIVERVAULT_SUPERADMIN_PASSWORD=change-me-long-password
|
|
DRIVERVAULT_SUPERADMIN_NAME=Administrator
|
|
|
|
# Schema creation/reconcile on boot. Leave this true: a release can add
|
|
# collections or fields the server needs, and a stack that skips the bootstrap
|
|
# never gets them. (The API Server creates app_settings, which holds the plugin
|
|
# settings, on demand — but only that one.) Set false only for a database you
|
|
# know already matches the release.
|
|
PB_BOOTSTRAP=true
|
|
|
|
# Allowed CORS origin(s) — match your public web URL / WEB_PORT.
|
|
CORS_ALLOW_ORIGINS=http://localhost:8090
|
|
|
|
# --- EV charging control (Anker Solix, OCPP) ---------------------------------
|
|
# Only relevant when a charger is set to own/proxy control mode. The charger
|
|
# dials in to /ocpp/{serial} on the API Server port, carrying its control token
|
|
# in an OCPP Basic-auth header — which a plaintext ws:// would expose, so
|
|
# non-TLS connections are rejected by default. This image serves plain HTTP, so
|
|
# terminate TLS in a reverse proxy in front of it and set OCPP_PUBLIC_URL to the
|
|
# public wss:// base the charger should be pointed at. Turning the check off is
|
|
# for trusted networks only.
|
|
OCPP_REQUIRE_TLS=true
|
|
OCPP_PUBLIC_URL=
|
|
|
|
# --- Host port mappings (optional; defaults shown) --------------------------
|
|
WEB_PORT=8090
|
|
PB_PORT=8070
|
|
API_PORT=8080
|
|
|
|
# --- Settings the API Server panel can also change ---------------------------
|
|
# The panel's Settings screens apply these immediately, but only for the life of
|
|
# the container — the value below is re-applied on every restart and wins. Set it
|
|
# here to make a change permanent. (POCKETBASE_URL is fixed to this container's
|
|
# own PocketBase and is not meant to be repointed.)
|
|
# WEBAPP_URL the Web App address the panel status page probes; nginx
|
|
# serves it on port 80 inside this container.
|
|
# CORS_ALLOW_ORIGINS browser origins allowed to call the API Server directly.
|
|
# WEBAPP_URL=http://127.0.0.1:80
|
|
|
|
# --- Storage -----------------------------------------------------------------
|
|
# One Docker-managed named volume by default. Set it to an absolute host path
|
|
# for a bind mount, e.g. PB_DATA=/srv/drivervault/pb_data.
|
|
# PB_DATA — the PocketBase database and its backups. The API Server keeps no
|
|
# state on disk, so everything it owns (plugin settings included) is backed up
|
|
# by backing up this one path — together with SEAWEED_DATA below.
|
|
PB_DATA=pb_data
|
|
|
|
# --- File storage: SeaweedFS -------------------------------------------------
|
|
# PocketBase keeps its record files — document scans, service and refill
|
|
# receipts, workshop invoices, part photos — in the bucket below instead of on
|
|
# PB_DATA. The database and PocketBase's own backups stay where they are.
|
|
#
|
|
# The credentials do double duty: the S3 gateway's program writes them into the
|
|
# filer's IAM store as the identity named "drivervault" *and* they are what
|
|
# PocketBase authenticates with. There are no safe defaults, and the container
|
|
# refuses to start without them. Change them here and restart to rotate: the
|
|
# seed updates the identity in place rather than adding a second one.
|
|
PB_S3_ACCESS_KEY=
|
|
PB_S3_SECRET=
|
|
# The bucket. Created on first boot by the S3 gateway's program.
|
|
PB_S3_BUCKET=drivervault
|
|
# The endpoint, region and path style are fixed by the image — the gateway is
|
|
# inside the container at a loopback address that cannot change.
|
|
|
|
# SEAWEED_DATA — where SeaweedFS keeps the files. A Docker-managed named volume
|
|
# by default; set an absolute host path for a bind mount, the same way PB_DATA
|
|
# works above. Back it up alongside PB_DATA: from here on the attachments live
|
|
# here, not in the database volume.
|
|
#
|
|
# Master, volume and filer share it (mounted at /seaweed/data), which is the
|
|
# layout `weed server -dir` writes — so this file and
|
|
# docker-compose.prod.seaweedfs.yml are interchangeable on the same volume, with
|
|
# nothing to migrate either way.
|
|
SEAWEED_DATA=seaweed_data
|
|
# The S3 port is published on loopback only — PocketBase reaches the gateway
|
|
# inside the container, and this is for tools like aws-cli. Set
|
|
# SEAWEED_S3_BIND=0.0.0.0 to expose it to other hosts, and mean it.
|
|
# SEAWEED_S3_BIND=127.0.0.1
|
|
# SEAWEED_S3_PORT=8333
|
|
#
|
|
# The master, volume and filer listen on the container's loopback and publish
|
|
# no host port at all. The admin UI below shows what they would: the volume
|
|
# server in particular serves file content by id with no authentication. Reach
|
|
# them with `docker compose exec drivervault wget -qO- http://127.0.0.1:9333/...`
|
|
# (volume 8081, filer 8888).
|
|
|
|
# --- SeaweedFS admin UI ------------------------------------------------------
|
|
# Cluster topology, volumes, buckets, maintenance tasks, and Object Store →
|
|
# Users, where further S3 identities are created and revoked. They land in the
|
|
# filer's IAM store, the same one seeded above, and the gateway picks them up
|
|
# without a restart.
|
|
#
|
|
# REQUIRED: weed disables authentication entirely when the password is empty,
|
|
# and this panel can mint credentials for the bucket — so the image refuses to
|
|
# start the panel at all without one, and the container stays unhealthy.
|
|
SEAWEED_ADMIN_USER=admin
|
|
SEAWEED_ADMIN_PASSWORD=
|
|
# Optional view-only login.
|
|
SEAWEED_ADMIN_READONLY_USER=
|
|
SEAWEED_ADMIN_READONLY_PASSWORD=
|
|
# Bound to localhost by default, the same call SEAWEED_S3_BIND makes: storage
|
|
# plumbing, not one of the app's own panels. On a remote host that means
|
|
# unreachable — set 0.0.0.0 and put it behind a reverse proxy.
|
|
SEAWEED_ADMIN_BIND=127.0.0.1
|
|
SEAWEED_ADMIN_PORT=23646
|
|
# Its own small volume: session key and maintenance-task state, no object data.
|
|
SEAWEED_ADMIN_DATA=seaweed_admin
|
|
|
|
# Existing uploads are NOT migrated when this is switched on: PocketBase copies
|
|
# nothing, so attachments made before the switch stop resolving. Read the file
|
|
# storage section of README.md first.
|