pddnsc/README.md

82 lines
3.0 KiB
Markdown
Raw Normal View History

2024-02-20 09:09:43 +00:00
# pddnsc
2024-02-20 13:09:39 +00:00
Возможно `DDNS` клиент
2024-02-20 09:09:43 +00:00
2024-02-25 20:00:34 +00:00
## Запуск
2024-02-20 09:09:43 +00:00
~~~sh
python -m pddnsc.cli
~~~
2024-02-20 13:09:39 +00:00
2024-02-25 20:00:34 +00:00
либо в [docker](https://www.docker.com)/[podman](https://podman.io) (для запуска по расписанию в `cron`):
~~~bash
docker build -t my/pddnsc .
docker run -v .state:/app/state:rw \
-v .settings:/app/settings:ro \
-e SCHEDULE=@hourly \
my/pddnsc
~~~
## Конфигурация
2024-02-20 13:09:39 +00:00
Конфигурация находится в файле `settings/config.toml`.
Пример конфигурации:
~~~toml
[sources]
# сервис https://www.ipify.org
[sources.ipfy]
provider = "IPIFYSource" # имя python класса
[filters]
# этот фильтр означает, что если ip адреса не изменились (по хешу)
# то не нужно никуда отсылать ничего
[filters.state-hash]
provider = "StateHashFilter"
filepath = "state/hash.txt"
[outputs]
2024-02-25 20:00:34 +00:00
# сохранение хеша всех ip адресов в файл,
2024-02-20 13:09:39 +00:00
# чтобы потом проверить изменились ли они
[outputs.hash-file]
provider = "StateHashFile"
filepath = "state/hash.txt"
# сервис доменов на vscale (vds.selectel.ru)
# токен в переменной окружения VSCALE_API_TOKEN
[outputs.vscale]
2024-02-25 20:00:34 +00:00
provider = "VscaleDomains"
2024-02-20 13:09:39 +00:00
domain = "example.com"
target = "www" # изменяем www.example.com
ttl = 3600
ipv4 = true # менять A запись
ipv6 = false # НЕ менять AAAA запись
~~~
Конфигурация состоит из секций:
- `sources` - источники ip адресов (выбирается результат от первого по времени сработавшего источника, который вернул хотябы один ipv4 или ipv6 адрес)
- `filters` - фильтры, если хоть один вернет ложь то программа ничего никуда не запишет и не отправит, например проверка, что ip адрес не изменился
2024-02-20 13:12:13 +00:00
- `outputs` - модули вывода, например вывод в консоль, запись в файл или создание dns записей на сервере
2024-02-20 13:09:39 +00:00
2024-02-20 13:11:32 +00:00
Все модули источников/фильтров/вывода работают конкурентно через `asyncio`.
2024-02-20 13:09:39 +00:00
2024-02-25 20:00:34 +00:00
### Подробная документация
Её необходимо собрать с помошью [mkdocs](https://www.mkdocs.org). Для этого нужно установить зависимости:
2024-02-20 13:09:39 +00:00
2024-02-25 20:00:34 +00:00
~~~bash
pip install -r requirements.txt
pip install -r requirements.docs.txt
~~~
После этого либо собрать документацию в каталог `site/`, либо запустить тестовый сервер.
~~~bash
# сборка
mkdocs build
# тестовый сервер
mkdocs serve
~~~