# 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 ~~~