first commit

This commit is contained in:
SSVC Admin 2025-03-11 09:31:32 +01:00
commit 935e213f27
6 changed files with 181 additions and 0 deletions

14
.env.sample Normal file
View File

@ -0,0 +1,14 @@
# PowerDNS Server Konfiguration
PDNS_PORT=53
PDNS_DB_NAME=powerdns
PDNS_DB_PASSWORD=secure_pdns_password
PDNS_API_KEY=secure_api_key_change_me
PDNS_WEBSERVER_PORT=8081
PDNS_WEBSERVER_PASSWORD=secure_webserver_password
PDNS_DEFAULT_TTL=1500
# PowerDNS Admin Konfiguration
PDNS_ADMIN_PORT=8080
PDNS_ADMIN_DB_NAME=powerdnsadmin
PDNS_ADMIN_DB_PASSWORD=secure_pdns_admin_password
PDNS_ADMIN_SALT=$2b$12$DCzILDEfKfpieQRKd9U6Q. #python3 -c 'import bcrypt; print(bcrypt.gensalt().decode("utf-8"));'

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.env
pdns-admin-mysql-data
pdns-admin-upload
pdns-mysql-data

0
README.md Normal file
View File

4
Readme.md Normal file
View File

@ -0,0 +1,4 @@
# Readme
## Get verison
docker exec pdns pdns_server --version

97
docker-compose.yml Normal file
View File

@ -0,0 +1,97 @@
version: '3'
services:
# MariaDB-Datenbank für PowerDNS Server
mysql:
image: mariadb:11
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${PDNS_DB_PASSWORD}
MYSQL_DATABASE: ${PDNS_DB_NAME}
MYSQL_USER: pdns_user
MYSQL_PASSWORD: ${PDNS_DB_PASSWORD}
volumes:
- ./pdns-mysql-data:/var/lib/mysql
networks:
- pdns-network
healthcheck:
test: [ "CMD-SHELL", 'mysqladmin ping' ]
interval: 10s
timeout: 2s
retries: 10
# MariaDB-Datenbank für PowerDNS Admin
mysql-admin:
image: mariadb:11
container_name: mysql-admin
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${PDNS_ADMIN_DB_PASSWORD}
MYSQL_DATABASE: ${PDNS_ADMIN_DB_NAME}
MYSQL_USER: pdns_admin_user
MYSQL_PASSWORD: ${PDNS_ADMIN_DB_PASSWORD}
volumes:
- ./pdns-admin-mysql-data:/var/lib/mysql
networks:
- pdns-network
# PowerDNS Server mit MySQL Backend
pdns:
image: pschiffe/pdns-mysql:${PDNS_VERSION}
container_name: pdns
restart: unless-stopped
ports:
- "${PDNS_PORT}:53/tcp"
- "${PDNS_PORT}:53/udp"
environment:
PDNS_primary: "yes"
PDNS_api: "yes"
PDNS_api_key: ${PDNS_API_KEY}
PDNS_webserver: "yes"
PDNS_webserver_address: 0.0.0.0
PDNS_webserver_port: ${PDNS_WEBSERVER_PORT}
PDNS_webserver_password: ${PDNS_WEBSERVER_PASSWORD}
PDNS_webserver_allow_from: "0.0.0.0/0,::/0"
PDNS_version_string: anonymous
PDNS_default_ttl: ${PDNS_DEFAULT_TTL}
PDNS_gmysql_user: pdns_user
PDNS_gmysql_password: ${PDNS_DB_PASSWORD}
PDNS_gmysql_dbname: ${PDNS_DB_NAME}
PDNS_gmysql_host: mysql
links:
- mysql:mysql
depends_on:
- mysql
networks:
- pdns-network
# PowerDNS Admin Web-Interface
pdns-admin:
image: pschiffe/pdns-admin:latest
container_name: pdns-admin
restart: unless-stopped
ports:
- "${PDNS_ADMIN_PORT}:8080"
environment:
PDNS_ADMIN_SQLA_DB_HOST: mysql-admin
PDNS_ADMIN_SQLA_DB_NAME: ${PDNS_ADMIN_DB_NAME}
PDNS_ADMIN_SQLA_DB_USER: pdns_admin_user
PDNS_ADMIN_SQLA_DB_PASSWORD: ${PDNS_ADMIN_DB_PASSWORD}
PDNS_ADMIN_SALT: ${PDNS_ADMIN_SALT}
PDNS_VERSION: ${PDNS_VERSION}
PDNS_API_KEY: ${PDNS_API_KEY}
volumes:
- ./pdns-admin-upload:/opt/powerdns-admin/upload
links:
- mysql-admin:mysql
- pdns:pdns
depends_on:
- mysql-admin
- pdns
networks:
- pdns-network
networks:
pdns-network:
driver: bridge

62
set-dot-env.sh Executable file
View File

@ -0,0 +1,62 @@
#!/bin/bash
# Funktion zum Generieren zufälliger Passwörter
generate_password() {
local length=$1
# Verwende /dev/urandom für bessere Zufälligkeit, tr für die Auswahl der Zeichen
# Wir nutzen Buchstaben und Zahlen, um Probleme mit Sonderzeichen zu vermeiden
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c $length
}
# Funktion zum Generieren eines bcrypt Salt für PowerDNS Admin
generate_salt() {
# Prüfen, ob Python und bcrypt installiert sind
if command -v python3 >/dev/null 2>&1 && python3 -c "import bcrypt" >/dev/null 2>&1; then
python3 -c 'import bcrypt; print(bcrypt.gensalt().decode("utf-8"));'
else
echo "WARNUNG: Python3 oder bcrypt nicht gefunden. Verwende Standard-Salt."
echo '$2b$12$xZKJJFAMZ41EFJptSMbZv.'
fi
}
# Zielverzeichnis für die .env-Datei
ENV_FILE=".env"
# Generiere Passwörter (12 Zeichen)
PDNS_DB_PASSWORD=$(generate_password 12)
PDNS_API_KEY=$(generate_password 16)
PDNS_WEBSERVER_PASSWORD=$(generate_password 12)
PDNS_ADMIN_DB_PASSWORD=$(generate_password 12)
# Generiere Salt für PowerDNS Admin
PDNS_ADMIN_SALT=$(generate_salt)
# Erstelle oder überschreibe die .env-Datei
cat > $ENV_FILE << EOF
# PowerDNS Server Konfiguration
PDNS_PORT=53
PDNS_DB_NAME=powerdns
PDNS_DB_PASSWORD=${PDNS_DB_PASSWORD}
PDNS_API_KEY=${PDNS_API_KEY}
PDNS_WEBSERVER_PORT=8081
PDNS_WEBSERVER_PASSWORD=${PDNS_WEBSERVER_PASSWORD}
PDNS_DEFAULT_TTL=1500
# PowerDNS Admin Konfiguration
PDNS_ADMIN_PORT=8080
PDNS_ADMIN_DB_NAME=powerdnsadmin
PDNS_ADMIN_DB_PASSWORD=${PDNS_ADMIN_DB_PASSWORD}
PDNS_ADMIN_SALT=${PDNS_ADMIN_SALT}
PDNS_VERSION="4.9"
EOF
# Ausgabe mit generierten Werten
echo "Die .env-Datei wurde mit folgenden zufälligen Passwörtern erstellt:"
echo "PDNS_DB_PASSWORD: $PDNS_DB_PASSWORD"
echo "PDNS_API_KEY: $PDNS_API_KEY"
echo "PDNS_WEBSERVER_PASSWORD: $PDNS_WEBSERVER_PASSWORD"
echo "PDNS_ADMIN_DB_PASSWORD: $PDNS_ADMIN_DB_PASSWORD"
echo "PDNS_ADMIN_SALT: $PDNS_ADMIN_SALT"
echo "PDNS_VERSION":"4.9"
echo ""
echo "Die Datei wurde als $ENV_FILE gespeichert. Bitte bewahren Sie diese Passwörter sicher auf!"