PowerDNS va PostgreSQL Docker da: noldan prodakshengacha
PostgreSQL da zonalarni saqlab, PowerDNS da to'liq DNS server o'rnatamiz. Docker Compose, avtomatik migratsiyalar va PowerDNS-Admin bilan birga.
Nima uchun PowerDNS + PostgreSQL
BIND yaxshi, lekin 2025 yilda matn fayllari orqali zonalarni boshqarish — azob. PowerDNS SQL backend bilan beradi:
- Zonalarni boshqarish uchun API
- PowerDNS-Admin orqali veb-interfeys
- Qulay zaxira nusxa (shunchaki MB dump)
- Fayllarni qo’lda sinxronlashsiz klasterlash
Loyiha tuzilmasi
powerdns/
├── docker-compose.yml
├── pdns.conf
└── init/
└── schema.sql
docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: pdns
POSTGRES_USER: pdns
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
- ./init/schema.sql:/docker-entrypoint-initdb.d/schema.sql
restart: unless-stopped
pdns:
image: powerdns/pdns-auth-48:latest
depends_on:
- postgres
ports:
- "53:53/tcp"
- "53:53/udp"
- "8081:8081"
volumes:
- ./pdns.conf:/etc/powerdns/pdns.conf
restart: unless-stopped
pdns-admin:
image: ngoduykhanh/powerdns-admin:latest
depends_on:
- pdns
ports:
- "9191:80"
environment:
- SQLALCHEMY_DATABASE_URI=postgresql://pdns:${POSTGRES_PASSWORD}@postgres/pdnsadmin
restart: unless-stopped
volumes:
pgdata:
Konfiguratsiya pdns.conf
# Backend
launch=gpgsql
gpgsql-host=postgres
gpgsql-dbname=pdns
gpgsql-user=pdns
gpgsql-password=${POSTGRES_PASSWORD}
# API
api=yes
api-key=${PDNS_API_KEY}
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
webserver-allow-from=0.0.0.0/0
Ishga tushirish
cp .env.example .env
# .env ni tahrirlashimiz kerak — POSTGRES_PASSWORD va PDNS_API_KEY ni o'rnatamiz
docker compose up -d
30 soniyadan so’ng PowerDNS-Admin http://localhost:9191 da mavjud bo’ladi.
API orqali birinchi zonani yaratamiz
curl -X POST http://localhost:8081/api/v1/servers/localhost/zones \
-H "X-API-Key: ${PDNS_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "example.com.",
"kind": "Native",
"nameservers": ["ns1.example.com.", "ns2.example.com."]
}'
Zona yaratildi. A yozuvini xuddi shunday API yoki veb-interfeys orqali qo’shamiz.
Natija
Veb-interfeys bilan to’liq DNS server 10 daqiqada o’rnatiladi. Zaxira nusxa — shunchaki pg_dump, tiklash — yangi serverda pg_restore va docker compose up.