2021-04-07 03:27:33 +08:00
[![Go ](https://github.com/bakito/adguardhome-sync/actions/workflows/go.yml/badge.svg )](https://github.com/bakito/adguardhome-sync/actions/workflows/go.yml)
[![Go Report Card ](https://goreportcard.com/badge/github.com/bakito/adguardhome-sync )](https://goreportcard.com/report/github.com/bakito/adguardhome-sync)
2022-11-21 01:49:36 +08:00
[![Coverage Status ](https://coveralls.io/repos/github/bakito/adguardhome-sync/badge.svg?branch=main&service=github )](https://coveralls.io/github/bakito/adguardhome-sync?branch=main)
2021-04-19 00:28:35 +08:00
2021-03-28 06:44:48 +08:00
# AdGuardHome sync
2022-08-10 03:23:40 +08:00
Synchronize [AdGuardHome ](https://github.com/AdguardTeam/AdGuardHome ) config to replica instances.
2021-03-28 16:30:00 +08:00
## Current sync features
2021-03-31 08:28:18 +08:00
- General Settings
2021-03-28 16:30:00 +08:00
- Filters
- Rewrites
- Services
- Clients
2021-08-08 16:15:29 +08:00
- DNS Config
- DHCP Config
2021-03-28 16:30:00 +08:00
2021-11-01 15:56:12 +08:00
By default, all features are enabled. Single features can be disabled in the config.
2021-04-19 04:03:57 +08:00
### Setup of initial instances
2021-08-08 16:15:29 +08:00
New AdGuardHome replica instances can be automatically installed if enabled via the config autoSetup. During automatic
installation, the admin interface will be listening on port 3000 in runtime.
2021-04-19 04:03:57 +08:00
To skip automatic setup
2021-03-28 16:30:00 +08:00
## Install
2022-01-24 14:54:30 +08:00
Get from [releases ](https://github.com/bakito/adguardhome-sync/releases ) or install from source
2021-03-28 16:30:00 +08:00
```bash
2022-01-24 14:54:30 +08:00
go install github.com/bakito/adguardhome-sync@latest
2021-03-28 16:30:00 +08:00
```
2021-04-05 19:33:21 +08:00
## Prerequisites
2021-04-19 04:03:57 +08:00
Both the origin instance must be initially setup via the AdguardHome installation wizard.
2021-04-05 19:33:21 +08:00
2023-08-05 13:38:21 +08:00
## Username / Password vs. Cookie
Some instances of AdGuard Home do not support basic authentication. For instance, many routers with built-in Adguard Home support do not. If this is the case, a valid cookie may be provided instead. If the router protects the AdGuard instance behind its own authentication, the cookie from an authenticated request may allow the sync to succeed.
- This has been tested successfully against GL.Inet routers with AdGuard Home.
- Note: due to the short validity of cookies, this approach is likely only suitable for one-time syncs
2022-10-17 04:03:02 +08:00
## Run Linux/Mac
2021-03-28 16:30:00 +08:00
```bash
2021-03-28 22:29:18 +08:00
2023-03-21 18:14:44 +08:00
export LOG_LEVEL=info
2021-03-28 20:09:31 +08:00
export ORIGIN_URL=https://192.168.1.2:3000
2021-03-28 16:30:00 +08:00
export ORIGIN_USERNAME=username
export ORIGIN_PASSWORD=password
2023-08-05 13:38:21 +08:00
# export ORIGIN_COOKIE=Origin-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 20:09:31 +08:00
export REPLICA_URL=http://192.168.1.3
2021-03-28 16:30:00 +08:00
export REPLICA_USERNAME=username
export REPLICA_PASSWORD=password
2023-08-05 13:38:21 +08:00
# export REPLICA_COOKIE=Replica-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 16:30:00 +08:00
2021-03-28 22:29:18 +08:00
# run once
2021-03-28 20:09:31 +08:00
adguardhome-sync run
2021-03-28 22:29:18 +08:00
# run as daemon
adguardhome-sync run --cron "*/10 * * * * "
2021-03-28 23:04:41 +08:00
```
2022-10-17 04:03:02 +08:00
## Run Windows
```bash
@ECHO OFF
@TITLE AdGuardHome-Sync
REM set LOG_LEVEL=debug
set LOG_LEVEL=info
REM set LOG_LEVEL=warn
REM set LOG_LEVEL=error
2022-10-18 06:33:51 +08:00
set ORIGIN_URL=http://192.168.1.2:3000
set ORIGIN_USERNAME=username
set ORIGIN_PASSWORD=password
2023-08-05 13:38:21 +08:00
# set ORIGIN_COOKIE=Origin-Cookie-Name=CCCOOOKKKIIIEEE
2022-10-17 04:03:02 +08:00
2022-10-18 06:33:51 +08:00
set REPLICA_URL=http://192.168.2.2:3000
set REPLICA_USERNAME=username
set REPLICA_PASSWORD=password
2023-08-05 13:38:21 +08:00
# set REPLICA_COOKIE=Replica-Cookie-Name=CCCOOOKKKIIIEEE
2022-10-17 04:03:02 +08:00
set FEATURES_DHCP=false
set FEATURES_DHCP_SERVERCONFIG=false
set FEATURES_DHCP_STATICLEASES=false
# run once
adguardhome-sync run
# run as daemon
adguardhome-sync run --cron "*/10 * * * * "
```
2021-04-06 01:26:35 +08:00
## docker cli
```bash
docker run -d \
--name=adguardhome-sync \
-p 8080:8080 \
-v /path/to/appdata/config/adguardhome-sync.yaml:/config/adguardhome-sync.yaml \
--restart unless-stopped \
2022-01-25 03:23:04 +08:00
ghcr.io/bakito/adguardhome-sync:latest
2021-04-06 01:26:35 +08:00
```
## docker compose
2021-04-06 03:04:01 +08:00
### config file
2021-04-19 00:28:35 +08:00
2021-04-06 01:26:35 +08:00
```yaml
---
version: "2.1"
services:
adguardhome-sync:
2022-01-25 03:23:04 +08:00
image: ghcr.io/bakito/adguardhome-sync
2021-04-06 01:26:35 +08:00
container_name: adguardhome-sync
2022-05-06 02:25:20 +08:00
command: run --config /config/adguardhome-sync.yaml
2021-04-06 01:26:35 +08:00
volumes:
- /path/to/appdata/config/adguardhome-sync.yaml:/config/adguardhome-sync.yaml
ports:
- 8080:8080
restart: unless-stopped
2021-04-06 03:04:01 +08:00
```
### env
```yaml
---
version: "2.1"
services:
adguardhome-sync:
2022-01-25 03:23:04 +08:00
image: ghcr.io/bakito/adguardhome-sync
2021-04-06 03:04:01 +08:00
container_name: adguardhome-sync
2021-04-06 03:23:15 +08:00
command: run
2021-04-06 03:04:01 +08:00
environment:
2023-08-05 13:38:21 +08:00
LOG_LEVEL: "info"
ORIGIN_URL: "https://192.168.1.2:3000"
ORIGIN_USERNAME: "username"
ORIGIN_PASSWORD: "password"
REPLICA_URL: "http://192.168.1.3"
REPLICA_USERNAME: "username"
REPLICA_PASSWORD: "password"
REPLICA1_URL: "http://192.168.1.4"
REPLICA1_USERNAME: "username"
REPLICA1_PASSWORD: "password"
REPLICA1_APIPATH: "/some/path/control"
2022-07-08 04:20:19 +08:00
# REPLICA1_AUTOSETUP: true # if true, AdGuardHome is automatically initialized.
# REPLICA1_INTERFACENAME: 'ens18' # use custom dhcp interface name
2023-03-07 05:07:34 +08:00
# REPLICA1_DHCPSERVERENABLED: true/false (optional) enables/disables the dhcp server on the replica
2023-08-05 13:38:21 +08:00
CRON: "*/10 * * * * " # run every 10 minutes
2022-07-08 04:20:19 +08:00
RUNONSTART: true
2023-03-16 00:04:53 +08:00
# Configure the sync API server, disabled if api port is 0
API_PORT: 8080
2021-11-01 15:56:12 +08:00
# Configure sync features; by default all features are enabled.
2022-07-08 04:20:19 +08:00
# FEATURES_GENERALSETTINGS: true
# FEATURES_QUERYLOGCONFIG: true
# FEATURES_STATSCONFIG: true
# FEATURES_CLIENTSETTINGS: true
# FEATURES_SERVICES: true
# FEATURES_FILTERS: true
# FEATURES_DHCP_SERVERCONFIG: true
# FEATURES_DHCP_STATICLEASES: true
# FEATURES_DNS_SERVERCONFIG: true
# FEATURES_DNS_ACCESSLISTS: true
# FEATURES_DNS_REWRITES: true
2021-04-06 03:04:01 +08:00
ports:
- 8080:8080
restart: unless-stopped
2021-04-06 01:26:35 +08:00
```
2021-03-28 23:04:41 +08:00
### Config file
location: $HOME/.adguardhome-sync.yaml
```yaml
# cron expression to run in daemon mode. (default; "" = runs only once)
cron: "*/10 * * * * "
2021-04-19 04:20:08 +08:00
# runs the synchronisation on startup
runOnStart: true
2021-03-28 23:04:41 +08:00
origin:
# url of the origin instance
url: https://192.168.1.2:3000
# apiPath: define an api path if other than "/control"
# insecureSkipVerify: true # disable tls check
username: username
password: password
2023-08-05 13:38:21 +08:00
# cookie: Origin-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 23:04:41 +08:00
# replica instance (optional, if only one)
replica:
# url of the replica instance
url: http://192.168.1.3
username: username
password: password
2023-08-05 13:38:21 +08:00
# cookie: Replica-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 23:04:41 +08:00
# replicas instances (optional, if more than one)
replicas:
# url of the replica instance
- url: http://192.168.1.3
username: username
password: password
2023-08-05 13:38:21 +08:00
# cookie: Replica1-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 23:04:41 +08:00
- url: http://192.168.1.4
username: username
password: password
2023-08-05 13:38:21 +08:00
# cookie: Replica2-Cookie-Name=CCCOOOKKKIIIEEE
# autoSetup: true # if true, AdGuardHome is automatically initialized.
2021-03-29 02:39:19 +08:00
# Configure the sync API server, disabled if api port is 0
api:
# Port, default 8080
port: 8080
2023-08-05 13:38:21 +08:00
# if username and password are defined, basic auth is applied to the sync API
2021-03-29 02:39:19 +08:00
username: username
password: password
2021-11-01 15:56:12 +08:00
# Configure sync features; by default all features are enabled.
features:
2021-11-02 01:20:14 +08:00
generalSettings: true
queryLogConfig: true
statsConfig: true
clientSettings: true
services: true
filters: true
2021-11-01 15:56:12 +08:00
dhcp:
2021-11-02 01:20:14 +08:00
serverConfig: true
2021-11-01 15:56:12 +08:00
staticLeases: true
2021-11-02 01:20:14 +08:00
dns:
serverConfig: true
accessLists: true
rewrites: true
2021-03-28 23:04:41 +08:00
```
2021-04-19 00:28:35 +08:00
## Log Level
The log level can be set with the environment variable: LOG_LEVEL
The following log levels are supported (default: info)
- debug
- info
- warn
2022-05-06 02:25:20 +08:00
- error