diff --git a/.gitattributes b/.gitattributes index 5e4c8497..f8eaf862 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16,7 +16,7 @@ *.toml text eol=lf Dockerfile* text eol=lf .dockerignore text eol=lf -docker-compose*.yml text eol=lf +compose*.yaml text eol=lf # Binary files *.png binary diff --git a/README.md b/README.md index 39d2887f..23d55551 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ It contains up-to-date setup guides, configuration reference, and usage document ## Installation -In order to run Zerobyte, you need to have Docker and Docker Compose installed on your server. Then, you can use the provided `docker-compose.yml` file to start the application. +In order to run Zerobyte, you need to have Docker and Docker Compose installed on your server. Then, you can use the provided `compose.yaml` file to start the application. ```yaml services: @@ -151,7 +151,7 @@ See `examples/provisioned-resources/README.md` for a full example. ### Simplified setup (no remote mounts) -If you only need to back up locally-mounted folders and don't require remote share mounting capabilities, you can remove the `SYS_ADMIN` capability and FUSE device from your `docker-compose.yml`: +If you only need to back up locally-mounted folders and don't require remote share mounting capabilities, you can remove the `SYS_ADMIN` capability and FUSE device from your `compose.yaml`: ```yaml services: @@ -190,7 +190,7 @@ Zerobyte supports multiple volume backends including NFS, SMB, WebDAV, SFTP, and To add your first volume, navigate to the "Volumes" section in the web interface and click on "Create volume". Fill in the required details such as volume name, type, and connection settings. -If you want to backup a local directory on the same host where Zerobyte is running, you'll first need to mount that directory into the Zerobyte container. You can do this by adding a volume mapping in your `docker-compose.yml` file. For example, to mount `/path/to/your/directory` from the host to `/mydata` in the container, you would add the following line under the `volumes` section: +If you want to backup a local directory on the same host where Zerobyte is running, you'll first need to mount that directory into the Zerobyte container. You can do this by adding a volume mapping in your `compose.yaml` file. For example, to mount `/path/to/your/directory` from the host to `/mydata` in the container, you would add the following line under the `volumes` section: ```diff services: @@ -214,7 +214,7 @@ services: + - /path/to/your/directory:/mydata ``` -After updating the `docker-compose.yml` file, restart the Zerobyte container to apply the changes: +After updating the `compose.yaml` file, restart the Zerobyte container to apply the changes: ```bash docker compose down @@ -265,7 +265,7 @@ Zerobyte can use [rclone](https://rclone.org/) to support 40+ cloud storage prov rclone listremotes ``` -4. **Mount the rclone config into the Zerobyte container** by updating your `docker-compose.yml`: +4. **Mount the rclone config into the Zerobyte container** by updating your `compose.yaml`: ```diff services: diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index e981e87c..bd9a2404 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -138,7 +138,7 @@ sudo aa-status docker inspect --format='{{.AppArmorProfile}}' zerobyte ``` -If AppArmor is enabled, you can disable it for the Zerobyte container by adding the following to your `docker-compose.yml`: +If AppArmor is enabled, you can disable it for the Zerobyte container by adding the following to your `compose.yaml`: ```yaml services: diff --git a/app/server/core/capabilities.ts b/app/server/core/capabilities.ts index 2ad65e23..70aeb3bf 100644 --- a/app/server/core/capabilities.ts +++ b/app/server/core/capabilities.ts @@ -45,7 +45,7 @@ async function detectRclone(): Promise { return true; } catch (_) { logger.warn( - `rclone capability: disabled. ` + `To enable: mount rclone config at ${RCLONE_CONFIG_DIR} in docker-compose.yml`, + `rclone capability: disabled. ` + `To enable: mount rclone config at ${RCLONE_CONFIG_DIR} in compose.yaml`, ); return false; } @@ -83,10 +83,10 @@ async function detectSysAdmin(): Promise { return true; } - logger.warn("sysAdmin capability: disabled. " + "To enable: add 'cap_add: SYS_ADMIN' in docker-compose.yml"); + logger.warn("sysAdmin capability: disabled. " + "To enable: add 'cap_add: SYS_ADMIN' in compose.yaml"); return false; } catch (_error) { - logger.warn("sysAdmin capability: disabled. " + "To enable: add 'cap_add: SYS_ADMIN' in docker-compose.yml"); + logger.warn("sysAdmin capability: disabled. " + "To enable: add 'cap_add: SYS_ADMIN' in compose.yaml"); return false; } } diff --git a/app/test/integration/infra/docker-compose.yml b/app/test/integration/infra/compose.yaml similarity index 100% rename from app/test/integration/infra/docker-compose.yml rename to app/test/integration/infra/compose.yaml diff --git a/app/test/integration/run.sh b/app/test/integration/run.sh index cf310aa8..589b1a72 100644 --- a/app/test/integration/run.sh +++ b/app/test/integration/run.sh @@ -7,7 +7,7 @@ base_image="zerobyte-integration-runtime-base:latest" compose_project="zerobyte-integration-$(basename "$repo_root" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9_-')" artifacts_dir="$script_dir/artifacts" sftp_artifacts_dir="$artifacts_dir/sftp" -compose_file="$script_dir/infra/docker-compose.yml" +compose_file="$script_dir/infra/compose.yaml" docker_output_log="$artifacts_dir/docker-output.log" compose=(docker compose -f "$compose_file" -p "$compose_project") diff --git a/apps/docs/content/docs/concepts/volumes.mdx b/apps/docs/content/docs/concepts/volumes.mdx index 4d360281..cfe7658e 100644 --- a/apps/docs/content/docs/concepts/volumes.mdx +++ b/apps/docs/content/docs/concepts/volumes.mdx @@ -23,7 +23,7 @@ Zerobyte supports six volume types. Each one is configured through the web UI wh ### Directory (local) - A local directory on the host machine, mounted into the Zerobyte container via your `docker-compose.yml` file. + A local directory on the host machine, mounted into the Zerobyte container via your `compose.yaml` file. **Use cases:** @@ -37,7 +37,7 @@ Zerobyte supports six volume types. Each one is configured through the web UI wh - **Path**, the path *inside the container* where the directory is mounted (e.g., `/data`) - You must first mount the host directory into the Zerobyte container by adding it to the `volumes` section of your `docker-compose.yml`. For example, to back up `/home/user/photos` on the host, add `- /home/user/photos:/photos:ro` to your compose file, restart the container, then create a Directory volume in the UI with the path `/photos`. + You must first mount the host directory into the Zerobyte container by adding it to the `volumes` section of your `compose.yaml`. For example, to back up `/home/user/photos` on the host, add `- /home/user/photos:/photos:ro` to your compose file, restart the container, then create a Directory volume in the UI with the path `/photos`. @@ -245,7 +245,7 @@ Sensitive fields, such as passwords, private keys, and other secrets, are encryp Provisioned volumes also support secret references: -- **`env://VARIABLE_NAME`**, resolves the value from an environment variable set in your `docker-compose.yml` during provisioning +- **`env://VARIABLE_NAME`**, resolves the value from an environment variable set in your `compose.yaml` during provisioning - **`file://secret_name`**, resolves the value from a Docker secrets file at `/run/secrets/secret_name` during provisioning During provisioning, Zerobyte resolves these references on startup and stores the resolved value encrypted in the database. diff --git a/apps/docs/content/docs/configuration.mdx b/apps/docs/content/docs/configuration.mdx index eaacdb0b..b39911ae 100644 --- a/apps/docs/content/docs/configuration.mdx +++ b/apps/docs/content/docs/configuration.mdx @@ -48,7 +48,7 @@ Zerobyte is configured through environment variables and Docker Compose settings If you prefer not to place the app secret directly in `environment:`, mount it as a file and point `APP_SECRET_FILE` at that path. -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: environment: @@ -184,7 +184,7 @@ This allows you to keep credentials in your deployment configuration rather than ### Example with Docker Secrets -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: environment: diff --git a/apps/docs/content/docs/guides/backup-webhooks.mdx b/apps/docs/content/docs/guides/backup-webhooks.mdx index 535b4202..805b7965 100644 --- a/apps/docs/content/docs/guides/backup-webhooks.mdx +++ b/apps/docs/content/docs/guides/backup-webhooks.mdx @@ -81,7 +81,7 @@ Header values are stored as plain text. Use a scoped webhook secret rather than For Docker Compose on Linux, `host.docker.internal` usually needs an explicit host gateway entry: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: extra_hosts: @@ -230,7 +230,7 @@ Once the test works, run `webhook` under your normal process manager. Add the webhook server origin to Zerobyte: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: extra_hosts: diff --git a/apps/docs/content/docs/guides/provisioning.mdx b/apps/docs/content/docs/guides/provisioning.mdx index 25fae7ae..d6bf81fa 100644 --- a/apps/docs/content/docs/guides/provisioning.mdx +++ b/apps/docs/content/docs/guides/provisioning.mdx @@ -96,7 +96,7 @@ Create a `provisioning.json` file: Mount the provisioning file and set `PROVISIONING_PATH`: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.38 diff --git a/apps/docs/content/docs/guides/rclone.mdx b/apps/docs/content/docs/guides/rclone.mdx index 1d3f805e..ee9331f3 100644 --- a/apps/docs/content/docs/guides/rclone.mdx +++ b/apps/docs/content/docs/guides/rclone.mdx @@ -72,9 +72,9 @@ Replace `myremote` with the name you chose during configuration. ## Mounting rclone config into the container -Zerobyte needs access to your rclone configuration file to discover and use your remotes. Mount it as a read-only volume in your `docker-compose.yml`: +Zerobyte needs access to your rclone configuration file to discover and use your remotes. Mount it as a read-only volume in your `compose.yaml`: -```yaml docker-compose.yml +```yaml compose.yaml volumes: - /etc/localtime:/etc/localtime:ro - /var/lib/zerobyte:/var/lib/zerobyte @@ -90,7 +90,7 @@ docker compose down && docker compose up -d For non-root container environments (e.g., TrueNAS), the config must be mounted to the correct user home directory. Set the `RCLONE_CONFIG_DIR` environment variable accordingly: -```yaml docker-compose.yml +```yaml compose.yaml environment: - RCLONE_CONFIG_DIR=/home/appuser/.config/rclone volumes: @@ -157,9 +157,9 @@ Rclone volumes mount cloud storage as a filesystem inside the container, allowin ### Ensure FUSE support -Your `docker-compose.yml` must include `SYS_ADMIN` and `/dev/fuse`: +Your `compose.yaml` must include `SYS_ADMIN` and `/dev/fuse`: -```yaml docker-compose.yml +```yaml compose.yaml cap_add: - SYS_ADMIN devices: @@ -214,7 +214,7 @@ If your rclone remote uses SFTP with `key_file` authentication, the path in the **Recommended.** Mount your SSH keys into the container so rclone can find them at the expected path: -```yaml docker-compose.yml +```yaml compose.yaml volumes: - ~/.ssh:/root/.ssh:ro ``` @@ -235,7 +235,7 @@ This avoids any file path issues since the key is stored directly in the rclone Forward your host's SSH agent socket into the container: -```yaml docker-compose.yml +```yaml compose.yaml environment: - SSH_AUTH_SOCK=/ssh-agent volumes: @@ -288,7 +288,7 @@ If you mount the rclone config as a read-only volume (`:ro`), the updated tokens If the rclone remote dropdown is empty when creating a repository or volume: - Verify the rclone config is mounted correctly. Check that `~/.config/rclone/rclone.conf` exists on the host. -- Confirm the mount path in `docker-compose.yml` matches the expected location inside the container (`/root/.config/rclone` by default, or the path set in `RCLONE_CONFIG_DIR`). +- Confirm the mount path in `compose.yaml` matches the expected location inside the container (`/root/.config/rclone` by default, or the path set in `RCLONE_CONFIG_DIR`). - Restart the container after updating the volume mount. ### Failed to create file system @@ -303,7 +303,7 @@ This usually means rclone cannot authenticate with the remote: If you see errors related to FUSE when creating rclone volumes: -- Ensure your `docker-compose.yml` includes `cap_add: [SYS_ADMIN]` and `devices: [/dev/fuse:/dev/fuse]`. +- Ensure your `compose.yaml` includes `cap_add: [SYS_ADMIN]` and `devices: [/dev/fuse:/dev/fuse]`. - Confirm you are running on a Linux host. FUSE mounts do not work with Docker on macOS or Windows. - Check that `/dev/fuse` exists on the host: `ls -la /dev/fuse`. diff --git a/apps/docs/content/docs/guides/reverse-proxy.mdx b/apps/docs/content/docs/guides/reverse-proxy.mdx index d7d40b47..004ffb53 100644 --- a/apps/docs/content/docs/guides/reverse-proxy.mdx +++ b/apps/docs/content/docs/guides/reverse-proxy.mdx @@ -7,9 +7,9 @@ When running Zerobyte behind a reverse proxy, you need to configure the `BASE_UR ## Prerequisites -Set the following environment variables in your `docker-compose.yml`: +Set the following environment variables in your `compose.yaml`: -```yaml docker-compose.yml +```yaml compose.yaml environment: - BASE_URL=https://zerobyte.example.com - TRUST_PROXY=true # Optional: trust X-Forwarded-For headers from your proxy @@ -95,9 +95,9 @@ Caddy automatically handles `X-Forwarded-For`, `X-Forwarded-Proto`, and TLS, wit ### Traefik -If you run Traefik as your reverse proxy, add labels to the Zerobyte service in your `docker-compose.yml`: +If you run Traefik as your reverse proxy, add labels to the Zerobyte service in your `compose.yaml`: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.38 @@ -126,7 +126,7 @@ Make sure your Traefik instance is configured with a `websecure` entrypoint and If you are using a reverse proxy on the same machine, bind the Zerobyte port to `127.0.0.1` so it is not directly accessible from the network: -```yaml docker-compose.yml +```yaml compose.yaml ports: - "127.0.0.1:4096:4096" ``` diff --git a/apps/docs/content/docs/guides/tailscale.mdx b/apps/docs/content/docs/guides/tailscale.mdx index 294ae398..14e438c0 100644 --- a/apps/docs/content/docs/guides/tailscale.mdx +++ b/apps/docs/content/docs/guides/tailscale.mdx @@ -27,9 +27,9 @@ This example uses a sidecar networking pattern where Zerobyte shares the Tailsca -### Create docker-compose.yml +### Create compose.yaml -```yaml docker-compose.yml +```yaml compose.yaml services: tailscale: image: tailscale/tailscale:stable diff --git a/apps/docs/content/docs/installation.mdx b/apps/docs/content/docs/installation.mdx index fe7a4649..d0ff14df 100644 --- a/apps/docs/content/docs/installation.mdx +++ b/apps/docs/content/docs/installation.mdx @@ -45,11 +45,11 @@ docker compose version The standard installation includes remote mount support (NFS, SMB, WebDAV, SFTP) and requires elevated container capabilities. -### 1. Create docker-compose.yml +### 1. Create compose.yaml -Create a `docker-compose.yml` file with the following configuration: +Create a `compose.yaml` file with the following configuration: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.38 @@ -78,7 +78,7 @@ Remote mounts are convenient, but they can expose translated ownership, permissi ### 2. Configure Environment Variables -Update the environment variables in your `docker-compose.yml`: +Update the environment variables in your `compose.yaml`: **Generate APP_SECRET:** @@ -179,7 +179,7 @@ On first access, you'll be prompted to create an admin account. This account wil If you only need to back up locally mounted directories and don't require remote share mounting (NFS, SMB, WebDAV, SFTP), you can use a reduced-privilege deployment: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.38 @@ -219,7 +219,7 @@ services: -If you need remote mount capabilities later, you can update your `docker-compose.yml` to add back the `cap_add: SYS_ADMIN` and `devices: /dev/fuse:/dev/fuse` directives. +If you need remote mount capabilities later, you can update your `compose.yaml` to add back the `cap_add: SYS_ADMIN` and `devices: /dev/fuse:/dev/fuse` directives. If your goal is the closest thing to true replication, prefer local bind-mounted directories whenever possible. See [Mounted Shares and Permissions](/docs/guides/mounted-shares-and-acls) for the practical tradeoffs. @@ -256,7 +256,7 @@ The mounted directories will be available inside the container at the specified If you use provisioning, Zerobyte can resolve secrets from environment variables or Docker secret files before storing the resolved value encrypted in the database: -```yaml docker-compose.yml +```yaml compose.yaml services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.38 @@ -316,7 +316,7 @@ rclone config ### Mount Config into Container -Update your `docker-compose.yml`: +Update your `compose.yaml`: ```yaml volumes: diff --git a/apps/docs/content/docs/quickstart.mdx b/apps/docs/content/docs/quickstart.mdx index 95767742..9fb5a2b1 100644 --- a/apps/docs/content/docs/quickstart.mdx +++ b/apps/docs/content/docs/quickstart.mdx @@ -106,7 +106,7 @@ For this quick start, we'll add a local directory. First, ensure the directory i #### Mount the Directory -Update your `docker-compose.yml` to mount the directory you want to backup: +Update your `compose.yaml` to mount the directory you want to backup: ```yaml services: @@ -757,7 +757,7 @@ Verify: Ensure: -- Directory is mounted in `docker-compose.yml` +- Directory is mounted in `compose.yaml` - Container was restarted after mounting: `docker compose restart` - Path matches the container path, not host path diff --git a/apps/docs/content/docs/troubleshooting.mdx b/apps/docs/content/docs/troubleshooting.mdx index edc8c25f..5101a037 100644 --- a/apps/docs/content/docs/troubleshooting.mdx +++ b/apps/docs/content/docs/troubleshooting.mdx @@ -65,7 +65,7 @@ sudo mount -t cifs //server/share /mnt/your-remote-share -o credentials=/path/to ``` ```yaml -# Then in docker-compose.yml +# Then in compose.yaml volumes: - /mnt/your-remote-share:/data ``` diff --git a/docker-compose.yml b/compose.yaml similarity index 100% rename from docker-compose.yml rename to compose.yaml diff --git a/examples/basic-docker-compose/docker-compose.yml b/examples/basic-docker-compose/compose.yaml similarity index 100% rename from examples/basic-docker-compose/docker-compose.yml rename to examples/basic-docker-compose/compose.yaml diff --git a/examples/directory-bind-mount/docker-compose.yml b/examples/directory-bind-mount/compose.yaml similarity index 100% rename from examples/directory-bind-mount/docker-compose.yml rename to examples/directory-bind-mount/compose.yaml diff --git a/examples/provisioned-resources/README.md b/examples/provisioned-resources/README.md index 5713fe0b..8f921f15 100644 --- a/examples/provisioned-resources/README.md +++ b/examples/provisioned-resources/README.md @@ -12,7 +12,7 @@ At startup, Zerobyte reads the provisioning file, resolves any `env://...` or `f ## What this example includes -- `docker-compose.yml` mounts a provisioning file and a Docker secret. +- `compose.yaml` mounts a provisioning file and a Docker secret. - `.env.example` provides the environment variables used by `env://...` references. - `provisioning.example.json` provisions one S3 repository and one WebDAV volume. - `secrets/aws_secret_access_key.example` shows the file consumed by `file://aws_secret_access_key`. diff --git a/examples/provisioned-resources/docker-compose.yml b/examples/provisioned-resources/compose.yaml similarity index 100% rename from examples/provisioned-resources/docker-compose.yml rename to examples/provisioned-resources/compose.yaml diff --git a/examples/rclone-config-mount/docker-compose.yml b/examples/rclone-config-mount/compose.yaml similarity index 100% rename from examples/rclone-config-mount/docker-compose.yml rename to examples/rclone-config-mount/compose.yaml diff --git a/examples/simplified-docker-compose/docker-compose.yml b/examples/simplified-docker-compose/compose.yaml similarity index 100% rename from examples/simplified-docker-compose/docker-compose.yml rename to examples/simplified-docker-compose/compose.yaml diff --git a/examples/tailscale-sidecar/.env.example b/examples/tailscale-sidecar/.env.example index 5d831079..25802da2 100644 --- a/examples/tailscale-sidecar/.env.example +++ b/examples/tailscale-sidecar/.env.example @@ -12,7 +12,7 @@ TS_HOSTNAME=zerobyte # Kernel-mode (false) vs userspace-mode (true). # - false: requires /dev/net/tun on the host # - true: works on Docker Desktop / hosts without TUN, but you must also remove -# the /dev/net/tun device mapping from docker-compose.yml +# the /dev/net/tun device mapping from compose.yaml TS_USERSPACE=false # Optional extra args passed to `tailscale up`. diff --git a/examples/tailscale-sidecar/README.md b/examples/tailscale-sidecar/README.md index 2d128cb4..47f9f24e 100644 --- a/examples/tailscale-sidecar/README.md +++ b/examples/tailscale-sidecar/README.md @@ -54,7 +54,7 @@ This example supports two Tailscale modes: - Over Tailscale: `http://:4096` or `http://:4096` (if MagicDNS is enabled) - Locally (optional): the example publishes `4096:4096` on the host -If you want Zerobyte to be reachable only via Tailscale, remove the `ports:` section from the `tailscale` service in [docker-compose.yml](docker-compose.yml). Zerobyte will still be able to access the internet and other resources outside the tailnet, but UI will only be accessible over Tailscale with possibility to further restrict access to it with ACLs/tags. +If you want Zerobyte to be reachable only via Tailscale, remove the `ports:` section from the `tailscale` service in [compose.yaml](compose.yaml). Zerobyte will still be able to access the internet and other resources outside the tailnet, but UI will only be accessible over Tailscale with possibility to further restrict access to it with ACLs/tags. ## Notes @@ -76,7 +76,7 @@ The example uses these environment variables (see [.env.example](.env.example)): - If the `tailscale` container can’t start due to missing TUN support, ensure your host has `/dev/net/tun` available and that Docker is allowed to use it. - If your tailnet uses ACLs/tags, set `TS_EXTRA_ARGS` accordingly (for example `--advertise-tags=tag:backup`). -- If the `tailscale` container fails due to Docker Desktop / missing TUN support: set `TS_USERSPACE=true` in your `.env`, remove the `/dev/net/tun:/dev/net/tun` device mapping in [docker-compose.yml](docker-compose.yml), and keep `SYS_MODULE` disabled (commented out). +- If the `tailscale` container fails due to Docker Desktop / missing TUN support: set `TS_USERSPACE=true` in your `.env`, remove the `/dev/net/tun:/dev/net/tun` device mapping in [compose.yaml](compose.yaml), and keep `SYS_MODULE` disabled (commented out). To confirm the tailnet address of the container: diff --git a/examples/tailscale-sidecar/docker-compose.yml b/examples/tailscale-sidecar/compose.yaml similarity index 100% rename from examples/tailscale-sidecar/docker-compose.yml rename to examples/tailscale-sidecar/compose.yaml