Install DatabasesEverywhere
Prepare a Linux node, install a versioned DatabasesEverywhere release, place the panel-generated configuration, and let setup create the hardened service and runtime directories.
Requirements
- A supported x86-64, ARM64, or RISC-V 64 Linux host.
- glibc 2.35 or newer for official release binaries.
- Docker, or Podman through its Docker-compatible API.
curl,sudo, and FUSE 3 when automatic disk detection selects FuseQuota.- cgroup v2 for rootless Podman resource limits.
- A dedicated host or VM is strongly recommended because container socket access is host-root-equivalent.
Install Docker dependencies
For the standard Docker setup on Debian or Ubuntu:
sudo apt update
sudo apt install -y docker.io sudo curl fuse3
sudo systemctl enable --now dockerConfirm Docker responds before installing the daemon:
sudo docker infoPodman options
Rootful Podman
Install Podman, select it in the configuration, and use its system socket:
daemon:
engine: podman
socket_path: /run/podman/podman.sockAn empty socket_path also selects the normal rootful socket. Setup validates the socket and enables the system service when possible.
Rootless Podman
Choose the existing Linux account that will own the containers and point to its standard user socket:
daemon:
engine: podman
socket_path: /run/user/1000/podman/podman.sockRunning sudo dbev --setup enables login lingering and that account's podman.socket, validates socket ownership and Podman identity, and prepares private bind-mount paths. Custom socket paths are accepted but must be supervised by the operator.
Do not switch an existing node between Docker and Podman while managed instances still exist. DatabasesEverywhere refuses mixed-runtime state instead of silently losing or recreating containers.
Install a release binary
Use a reviewed versioned release rather than the mutable latest URL. The following command selects the correct official artifact for the host architecture:
DBEV_VERSION=v0.4.0 # replace with the reviewed release
case "$(uname -m)" in
x86_64) DBEV_ARCH=x86_64 ;;
aarch64|arm64) DBEV_ARCH=arm64 ;;
riscv64) DBEV_ARCH=riscv64 ;;
*) echo "unsupported architecture: $(uname -m)" >&2; exit 1 ;;
esac
sudo curl --fail --location \
"https://github.com/Tomaxikz/DatabasesEverywhere/releases/download/${DBEV_VERSION}/dbev-${DBEV_ARCH}-linux" \
-o /usr/local/bin/dbev
sudo chmod +x /usr/local/bin/dbevRelease pages publish SHA-256 checksums. If the GitHub CLI is installed, you can also verify the binary's signed GitHub Actions attestation:
gh attestation verify /usr/local/bin/dbev \
--repo Tomaxikz/DatabasesEverywherePlace the configuration
Create the configuration directory before running setup:
sudo mkdir -p /etc/databases-everywhere
sudo nano /etc/databases-everywhere/config.ymlStart with the configuration generated by your panel. At minimum it needs the panel URL, node identity, two different secrets, and an API listener:
remote: https://panel.example.com
uuid: replace-with-panel-generated-node-uuid
token_id: replace-with-panel-generated-token-id
token: replace-with-at-least-32-random-bytes
jwt_signing_key: replace-with-a-different-32-byte-random-key
api:
host: 127.0.0.1
port: 8090
trusted_hosts: [node-api.example.com]Generate token and jwt_signing_key separately. Never reuse one value for both:
openssl rand -base64 32
openssl rand -base64 32See Configuration and security before exposing the API or database gateways outside a trusted network.
Run setup and start
Setup validates the runtime, writes the systemd unit, creates private directories, prepares the selected quota mechanism, and removes obsolete quota sudoers rules from older releases.
sudo dbev --setup
sudo systemctl enable --now databases-everywhere
sudo journalctl -u databases-everywhere -fFor the standard Docker configuration, setup creates a service equivalent to:
[Unit]
Description=DatabasesEverywhere
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
ExecStart=/usr/local/bin/dbev daemon
KillMode=process
Restart=on-failure
RestartSec=5s
TimeoutStopSec=21min
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.targetThe daemon runs as root by default so it can manage Docker or Podman, native quotas, FUSE mounts, Unix sockets, and database storage directly. It still applies a restrictive process umask and validates every managed path.
Files and directories
The normal installation uses:
/etc/databases-everywhere/config.yml
/usr/local/bin/dbev
/var/lib/dbev
/var/log/dbev
/run/dbevRuntime roots and their subdirectories are created automatically when missing. Every existing ancestor must be a real, non-symlink directory that is not writable by untrusted users.
To run with a different configuration file:
sudo dbev --config /path/to/config.yml daemonDocker Compose
Compose installations still require /etc/databases-everywhere/config.yml before startup. Select an immutable, reviewed image instead of a mutable tag:
export DBEV_IMAGE='ghcr.io/tomaxikz/databaseseverywhere:v0.4.0@sha256:REPLACE_ME'
docker compose up -dThe FuseQuota profile needs /dev/fuse, SYS_ADMIN, host networking, and write access to the Docker socket, but does not require blanket privileged mode. Ensure /etc/fuse.conf contains an uncommented user_allow_other before starting that profile.
If FuseQuota is not used, remove the FUSE device, SYS_ADMIN, and AppArmor override from the deployment.
Verify the node
Check the configuration before or after setup:
sudo dbev --config /etc/databases-everywhere/config.yml check-configThen confirm service health and authenticated API readiness:
sudo systemctl status databases-everywhere
curl -H "Authorization: Bearer YOUR_NODE_TOKEN" \
-H "Host: node-api.example.com" \
http://127.0.0.1:8090/api/systemapi_readiness: "ready" means the management API is ready. Check the separate gateways status and individual instance status before declaring database traffic ready.
Updating the daemon
Replace /usr/local/bin/dbev with a verified versioned release, then rerun setup and restart the service:
sudo dbev --setup
sudo systemctl restart databases-everywhereRerun setup after changing the engine, socket, configuration path, filesystem quota options, or installing a release with an updated unit definition.