GuidesDatabasesEverywhere4 min read

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:

bash
sudo apt update
sudo apt install -y docker.io sudo curl fuse3
sudo systemctl enable --now docker

Confirm Docker responds before installing the daemon:

bash
sudo docker info

Podman options

Rootful Podman

Install Podman, select it in the configuration, and use its system socket:

yaml
daemon:
  engine: podman
  socket_path: /run/podman/podman.sock

An 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:

yaml
daemon:
  engine: podman
  socket_path: /run/user/1000/podman/podman.sock

Running 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:

bash
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/dbev

Release pages publish SHA-256 checksums. If the GitHub CLI is installed, you can also verify the binary's signed GitHub Actions attestation:

bash
gh attestation verify /usr/local/bin/dbev \
  --repo Tomaxikz/DatabasesEverywhere

Place the configuration

Create the configuration directory before running setup:

bash
sudo mkdir -p /etc/databases-everywhere
sudo nano /etc/databases-everywhere/config.yml

Start with the configuration generated by your panel. At minimum it needs the panel URL, node identity, two different secrets, and an API listener:

yaml
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:

bash
openssl rand -base64 32
openssl rand -base64 32

See 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.

bash
sudo dbev --setup
sudo systemctl enable --now databases-everywhere
sudo journalctl -u databases-everywhere -f

For the standard Docker configuration, setup creates a service equivalent to:

ini
[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.target

The 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:

text
/etc/databases-everywhere/config.yml
/usr/local/bin/dbev
/var/lib/dbev
/var/log/dbev
/run/dbev

Runtime 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:

bash
sudo dbev --config /path/to/config.yml daemon

Docker Compose

Compose installations still require /etc/databases-everywhere/config.yml before startup. Select an immutable, reviewed image instead of a mutable tag:

bash
export DBEV_IMAGE='ghcr.io/tomaxikz/databaseseverywhere:v0.4.0@sha256:REPLACE_ME'
docker compose up -d

The 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:

bash
sudo dbev --config /etc/databases-everywhere/config.yml check-config

Then confirm service health and authenticated API readiness:

bash
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/system

api_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:

bash
sudo dbev --setup
sudo systemctl restart databases-everywhere

Rerun setup after changing the engine, socket, configuration path, filesystem quota options, or installing a release with an updated unit definition.