sbrs — sing-box rules sync
A containerized Rust utility to synchronize and self-host remote rule sets for sing-box
.
Core Workflow
- Reads a source JSON configuration (
config/template.json
) containing remote URLs (e.g., from GitHub). - Downloads all rule files specified in the source config to a local directory (for example,
./rules
). - Cleans up stale rule files from the local directory that are no longer present in the source config.
- Generates a new, client-facing configuration (
config/default.json
) where all remote URLs are rewritten to point to a self-hosted domain.
The original template.json
is never modified by this application.
Upon container start, the utility performs an initial synchronization immediately and then sets up a cron job for subsequent, scheduled runs.
Prerequisites
- Docker
- Docker Compose
Usage via Docker
1. Example of possible directory structure
Create the following directory structure in your project root before the first run:
.
├── config/
│ └── template.json # Your input config with original URLs
├── rules/ # Empty directory for downloaded rule files
├── docker/
│ ├── Dockerfile
│ └── entrypoint.sh
└── docker-compose.yml
Note: config/default.json
will be generated by the application on the first run.
2. Configuration
Edit docker-compose.yml
to set the required environment variables:
PUID
/PGID
: Set to your host user's ID (id -u
) and group ID (id -g
) to prevent volume permission issues.DOMAIN
: The public domain that will serve the rule files (e.g.,rules.mydomain.com
).RULE_PATH
: The path on the domain where the files are located (e.g.,/
or/files
).TZ
: The timezone for container logs (e.g.,Etc/UTC
).CRON_SCHEDULE
: The schedule for the sync task.
3. Run the Service
# Build the image and start the service in detached mode
docker-compose up --build -d
The service will run the sync task immediately upon starting and then again on the schedule defined by CRON_SCHEDULE
.
Common Commands
# View live logs
docker-compose logs -f
# Trigger a manual sync immediately (without restarting)
docker-compose exec sbrs entrypoint.sh manual
# Stop and remove the container
docker-compose down
Local Development
Requires the Rust toolchain.
1. Build
cargo build --release
2. Run
All arguments are required.
./target/release/sbrs \
--input-config ./config/template.json \
--rules-dir ./rules \
--output-config ./config/default.json \
--domain my.server.com \
--rule-path rules