81 lines
3.1 KiB
Markdown
81 lines
3.1 KiB
Markdown
# 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
|
||
~~~
|