adguardhome-sync/README.md

343 lines
9.8 KiB
Markdown
Raw Normal View History

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)
2024-01-15 03:50:29 +08:00
[![e2e tests](https://github.com/bakito/adguardhome-sync/actions/workflows/e2e.yaml/badge.svg)](https://github.com/bakito/adguardhome-sync/actions/workflows/e2e.yaml)
2021-04-07 03:27:33 +08:00
[![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
2024-01-15 15:12:38 +08:00
## FAQ & Deprecations
2024-01-15 15:12:38 +08:00
Please check the wiki
for [FAQ](https://github.com/bakito/adguardhome-sync/wiki/FAQ)
and [Deprecations](https://github.com/bakito/adguardhome-sync/wiki/Deprecations).
2024-01-11 03:12:08 +08:00
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.
### 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.
To skip automatic setup
2021-03-28 16:30:00 +08:00
## Install
Get from [releases](https://github.com/bakito/adguardhome-sync/releases) or install from source
2021-03-28 16:30:00 +08:00
```bash
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
Both the origin instance must be initially setup via the AdguardHome installation wizard.
2021-04-05 19:33: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
# export ORIGIN_COOKIE=Origin-Cookie-Name=CCCOOOKKKIIIEEE
export REPLICA1_URL=http://192.168.1.3
export REPLICA1_USERNAME=username
export REPLICA1_PASSWORD=password
# 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
2024-05-03 07:14:13 +08:00
adguardhome-sync run --cron "0 */2 * * *"
2021-03-28 23:04:41 +08:00
```
### Run as Linux Service via Systemd
> Verified on Ubuntu Linux 24.04
Assume you have downloaded the the `adguardhome-sync` binary to `/opt/adguardhome-sync`.
Create systemd service file `/opt/adguardhome-sync/adguardhome-sync.service`:
```
[Unit]
Description = AdGuardHome Sync
After = network.target
[Service]
ExecStart = /opt/adguardhome-sync/adguardhome-sync --config /opt/adguardhome-sync/adguardhome-sync.yaml run
[Install]
WantedBy = multi-user.target
```
Create a configuration file `/opt/adguardhome-sync/adguardhome-sync.yaml`, please follow [Config file](#config-file-1)
section below for details.
Install and enable service:
```bash
sudo cp /opt/adguardhome-sync/adguardhome-sync.service /etc/systemd/system/
sudo systemctl enable adguardhome-sync.service
sudo systemctl start adguardhome-sync.service
```
Then you can check the status:
```bash
sudo systemctl status adguardhome-sync.service
```
If web UI has been enabled in configuration (default port is 8080), can also check the status via
`http://<server-IP>:8080`
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
set ORIGIN_URL=http://192.168.1.2:3000
set ORIGIN_USERNAME=username
set ORIGIN_PASSWORD=password
# set ORIGIN_COOKIE=Origin-Cookie-Name=CCCOOOKKKIIIEEE
2022-10-17 04:03:02 +08:00
set REPLICA1_URL=http://192.168.2.2:3000
set REPLICA1_USERNAME=username
set REPLICA1_PASSWORD=password
# set REPLICA1_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
2024-05-03 07:14:13 +08:00
adguardhome-sync run --cron "0 */2 * * *"
2022-10-17 04:03:02 +08:00
```
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
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:
LOG_LEVEL: "info"
ORIGIN_URL: "https://192.168.1.2:3000"
# ORIGIN_WEB_URL: "https://some-other.url" # used in the web interface (default: <origin-url>
2024-01-07 16:55:21 +08:00
ORIGIN_USERNAME: "username"
ORIGIN_PASSWORD: "password"
REPLICA1_URL: "http://192.168.1.3"
REPLICA1_USERNAME: "username"
REPLICA1_PASSWORD: "password"
REPLICA2_URL: "http://192.168.1.4"
REPLICA2_USERNAME: "username"
REPLICA2_PASSWORD: "password"
REPLICA2_API_PATH: "/some/path/control"
# REPLICA2_WEB_URL: "https://some-other.url" # used in the web interface (default: <replica-url>
# REPLICA2_AUTO_SETUP: true # if true, AdGuardHome is automatically initialized.
# REPLICA2_INTERFACE_NAME: 'ens18' # use custom dhcp interface name
# REPLICA2_DHCP_SERVER_ENABLED: true/false (optional) enables/disables the dhcp server on the replica
CRON: "0 */2 * * *" # run every 2 hours
2024-06-13 13:38:06 +08:00
RUN_ON_START: "true"
2024-01-08 05:44:32 +08:00
# CONTINUE_ON_ERROR: false # If enabled, the synchronisation task will not fail on single errors, but will log the errors and continue
2023-03-16 00:04:53 +08:00
# Configure the sync API server, disabled if api port is 0
API_PORT: 8080
2024-06-13 13:16:28 +08:00
# API_DARK_MODE: "true"
# API_USERNAME: admin
# API_PASSWORD: secret
# the directory of the provided tls certs
# API_TLS_CERT_DIR: /path/to/certs
# the name of the cert file (default: tls.crt)
# API_TLS_CERT_NAME: foo.crt
# the name of the key file (default: tls.key)
# API_TLS_KEY_NAME: bar.key
2023-03-16 00:04:53 +08:00
2021-11-01 15:56:12 +08:00
# Configure sync features; by default all features are enabled.
2024-06-13 13:16:28 +08:00
# FEATURES_GENERAL_SETTINGS: "true"
# FEATURES_QUERY_LOG_CONFIG: "true"
# FEATURES_STATS_CONFIG: "true"
# FEATURES_CLIENT_SETTINGS: "true"
# FEATURES_SERVICES: "true"
# FEATURES_FILTERS: "true"
# FEATURES_DHCP_SERVER_CONFIG: "true"
# FEATURES_DHCP_STATIC_LEASES: "true"
# FEATURES_DNS_SERVER_CONFIG: "true"
# FEATURES_DNS_ACCESS_LISTS: "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)
2024-05-03 07:14:13 +08:00
cron: "0 */2 * * *"
2021-03-28 23:04:41 +08:00
2021-04-19 04:20:08 +08:00
# runs the synchronisation on startup
runOnStart: true
# If enabled, the synchronisation task will not fail on single errors, but will log the errors and continue
continueOnError: false
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
# cookie: Origin-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 23:04:41 +08:00
# replicas instances
2021-03-28 23:04:41 +08:00
replicas:
# url of the replica instance
- url: http://192.168.1.3
username: username
password: password
# cookie: Replica1-Cookie-Name=CCCOOOKKKIIIEEE
2021-03-28 23:04:41 +08:00
- url: http://192.168.1.4
username: username
password: password
# cookie: Replica2-Cookie-Name=CCCOOOKKKIIIEEE
# autoSetup: true # if true, AdGuardHome is automatically initialized.
2024-01-07 16:55:21 +08:00
# webURL: "https://some-other.url" # used in the web interface (default: <replica-url>
# Configure the sync API server, disabled if api port is 0
api:
# Port, default 8080
port: 8080
# if username and password are defined, basic auth is applied to the sync API
username: username
password: password
2024-01-07 16:55:21 +08:00
# enable api dark mode
darkMode: true
# enable metrics on path '/metrics' (api port must be != 0)
# metrics:
# enabled: true
# scrapeInterval: 30s
# queryLogLimit: 10000
# enable tls for the api server
# tls:
# # the directory of the provided tls certs
# certDir: /path/to/certs
# # the name of the cert file (default: tls.crt)
# certName: foo.crt
# # the name of the key file (default: tls.key)
# keyName: bar.key
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`
2021-04-19 00:28:35 +08:00
The following log levels are supported (default: info)
- debug
- info
- warn
- error
## Log Format
Default log format is `console`.
It can be changed to `json`by setting the environment variable: `LOG_FORMAT=json`
## Video Tutorials
- [Como replicar la configuración de tu servidor DNS Adguard automáticamente - Tu servidor Part #12](https://www.youtube.com/watch?v=1LPeu_JG064) (
Spanish) by [Jonatan Castro](https://github.com/jcastro)