pddnsc/README.md
Dmitry 440c33b8e5
All checks were successful
Docker Image CI / test (push) Successful in 36s
Docker Image CI / push (push) Successful in 40s
upd README
2024-02-29 15:56:53 +03:00

81 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# pddnsc
Возможно `DDNS` клиент
## Запуск
~~~sh
python -m pddnsc.cli
~~~
либо в [docker](https://www.docker.com)/[podman](https://podman.io) (для запуска по расписанию в `cron`):
~~~bash
docker run -v .state:/app/state:rw \
-v .settings:/app/settings:ro \
-e SCHEDULE=@hourly \
gitea.b4tman.ru/b4tman/pddnsc
~~~
## Конфигурация
Конфигурация находится в файле `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]
# сохранение хеша всех ip адресов в файл,
# чтобы потом проверить изменились ли они
[outputs.hash-file]
provider = "StateHashFile"
filepath = "state/hash.txt"
# сервис доменов на vscale (vds.selectel.ru)
# токен в переменной окружения VSCALE_API_TOKEN
[outputs.vscale]
provider = "VscaleDomains"
domain = "example.com"
target = "www" # изменяем www.example.com
ttl = 3600
ipv4 = true # менять A запись
ipv6 = false # НЕ менять AAAA запись
~~~
Конфигурация состоит из секций:
- `sources` - источники ip адресов (выбирается результат от первого по времени сработавшего источника, который вернул хотябы один ipv4 или ipv6 адрес)
- `filters` - фильтры, если хоть один вернет ложь то программа ничего никуда не запишет и не отправит, например проверка, что ip адрес не изменился
- `outputs` - модули вывода, например вывод в консоль, запись в файл или создание dns записей на сервере
Все модули источников/фильтров/вывода работают конкурентно через [asyncio](https://docs.python.org/3/library/asyncio.html#module-asyncio) и [httpx](https://www.python-httpx.org).
### Подробная документация
Её необходимо собрать с помошью [mkdocs](https://www.mkdocs.org). Для этого нужно установить зависимости:
~~~bash
pip install -r requirements.txt
pip install -r requirements.docs.txt
~~~
После этого либо собрать документацию в каталог `site/`, либо запустить тестовый сервер.
~~~bash
# сборка
mkdocs build
# тестовый сервер
mkdocs serve
~~~