mirror of
https://github.com/cwinfo/powerdns-admin.git
synced 2025-01-07 10:55:40 +00:00
Merge pull request #29 from ProviderNL/DockerImage
Docker image thx for your work @JeroenBo !
This commit is contained in:
commit
e8673131b3
29
docker/DOCKER.md
Normal file
29
docker/DOCKER.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Docker support
|
||||||
|
This is a updated version of the current docker support.
|
||||||
|
Container support is only for development purposes and should not be used in production without your own modificatins.
|
||||||
|
|
||||||
|
It's not needed to reload the container after you make changes in your current branch.
|
||||||
|
|
||||||
|
Images are currently not available in docker hub or other repository, so you have to build them yourself.
|
||||||
|
|
||||||
|
After a successful launch PowerDNS-Admin is reachable at http://localhost:9393
|
||||||
|
|
||||||
|
PowerDNS runs op port localhost udp/5353
|
||||||
|
|
||||||
|
|
||||||
|
## Basic commands:
|
||||||
|
### Build images
|
||||||
|
cd to this directory
|
||||||
|
|
||||||
|
```# ./build-images.sh```
|
||||||
|
|
||||||
|
### Run containers
|
||||||
|
Build the images before you run this command.
|
||||||
|
|
||||||
|
```# docker-compose up```
|
||||||
|
|
||||||
|
### Stop containers
|
||||||
|
```# docker-compose stop```
|
||||||
|
|
||||||
|
### Remove containers
|
||||||
|
```# docker-compose rm```
|
42
docker/PowerDNS-Admin/Dockerfile
Normal file
42
docker/PowerDNS-Admin/Dockerfile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# PowerDNS-Admin
|
||||||
|
# Original from:
|
||||||
|
# https://github.com/ngoduykhanh/PowerDNS-Admin
|
||||||
|
#
|
||||||
|
# Initial image by winggundamth(/powerdns-mysql:trusty)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
FROM alpine
|
||||||
|
MAINTAINER Jeroen Boonstra <jeroen [at] provider.nl>
|
||||||
|
|
||||||
|
ENV APP_USER=web APP_NAME=powerdns-admin
|
||||||
|
ENV APP_PATH=/home/$APP_USER/$APP_NAME
|
||||||
|
|
||||||
|
|
||||||
|
RUN apk add --update \
|
||||||
|
sudo \
|
||||||
|
python \
|
||||||
|
libxml2 \
|
||||||
|
xmlsec \
|
||||||
|
git \
|
||||||
|
python-dev \
|
||||||
|
py-pip \
|
||||||
|
build-base \
|
||||||
|
libxml2-dev \
|
||||||
|
xmlsec-dev \
|
||||||
|
libffi-dev \
|
||||||
|
openldap-dev \
|
||||||
|
&& adduser -S web
|
||||||
|
|
||||||
|
RUN sudo -u $APP_USER -H git clone --depth=1 \
|
||||||
|
https://github.com/thomasDOTde/PowerDNS-Admin $APP_PATH
|
||||||
|
|
||||||
|
RUN pip install -r $APP_PATH/requirements.txt
|
||||||
|
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||||
|
|
||||||
|
|
||||||
|
USER $APP_USER
|
||||||
|
WORKDIR $APP_PATH
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||||
|
CMD ["python", "run.py"]
|
||||||
|
EXPOSE 9393
|
||||||
|
VOLUME ["/var/log"]
|
12
docker/PowerDNS-Admin/docker-entrypoint.sh
Executable file
12
docker/PowerDNS-Admin/docker-entrypoint.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$WAITFOR_DB" -a ! -f "$APP_PATH/config.py" ]; then
|
||||||
|
cp "$APP_PATH/config_template_docker.py" "$APP_PATH/config.py"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $APP_PATH && python create_db.py
|
||||||
|
|
||||||
|
# Start PowerDNS Admin
|
||||||
|
exec "$@"
|
40
docker/PowerDNS-MySQL/Dockerfile
Normal file
40
docker/PowerDNS-MySQL/Dockerfile
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# PowerDNS Authoritative Server with MySQL backend
|
||||||
|
# https://www.powerdns.com
|
||||||
|
#
|
||||||
|
# The PowerDNS Authoritative Server is the only solution that enables
|
||||||
|
# authoritative DNS service from all major databases, including but not limited
|
||||||
|
# to MySQL, PostgreSQL, SQLite3, Oracle, Sybase, Microsoft SQL Server, LDAP and
|
||||||
|
# plain text files.
|
||||||
|
|
||||||
|
FROM winggundamth/ubuntu-base:trusty
|
||||||
|
MAINTAINER Jirayut Nimsaeng <w [at] winginfotech.net>
|
||||||
|
ENV FROM_BASE=trusty-20160503.1
|
||||||
|
|
||||||
|
# 1) Add PowerDNS repository https://repo.powerdns.com
|
||||||
|
# 2) Install PowerDNS server
|
||||||
|
# 3) Clean to reduce Docker image size
|
||||||
|
ARG APT_CACHER_NG
|
||||||
|
COPY build-files /build-files
|
||||||
|
RUN [ -n "$APT_CACHER_NG" ] && \
|
||||||
|
echo "Acquire::http::Proxy \"$APT_CACHER_NG\";" \
|
||||||
|
> /etc/apt/apt.conf.d/11proxy || true; \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y curl && \
|
||||||
|
curl https://repo.powerdns.com/FD380FBB-pub.asc | apt-key add - && \
|
||||||
|
echo 'deb [arch=amd64] http://repo.powerdns.com/ubuntu trusty-auth-40 main' \
|
||||||
|
> /etc/apt/sources.list.d/pdns-$(lsb_release -cs).list && \
|
||||||
|
mv /build-files/pdns-pin /etc/apt/preferences.d/pdns && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y pdns-server pdns-backend-mysql mysql-client && \
|
||||||
|
mv /build-files/pdns.mysql.conf /etc/powerdns/pdns.d/pdns.mysql.conf && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/* /etc/apt/apt.conf.d/11proxy /build-files \
|
||||||
|
/etc/powerdns/pdns.d/pdns.simplebind.conf
|
||||||
|
|
||||||
|
# 1) Copy Docker entrypoint script
|
||||||
|
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||||
|
|
||||||
|
EXPOSE 53/udp 53 8081
|
||||||
|
VOLUME ["/var/log", "/etc/powerdns"]
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||||
|
CMD ["/usr/sbin/pdns_server", "--guardian=yes"]
|
3
docker/PowerDNS-MySQL/build-files/pdns-pin
Normal file
3
docker/PowerDNS-MySQL/build-files/pdns-pin
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Package: pdns-*
|
||||||
|
Pin: origin repo.powerdns.com
|
||||||
|
Pin-Priority: 600
|
6
docker/PowerDNS-MySQL/build-files/pdns.mysql.conf
Normal file
6
docker/PowerDNS-MySQL/build-files/pdns.mysql.conf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
launch+=gmysql
|
||||||
|
gmysql-port=3306
|
||||||
|
gmysql-host=172.17.0.1
|
||||||
|
gmysql-password=CHANGEME
|
||||||
|
gmysql-user=powerdns
|
||||||
|
gmysql-dbname=powerdns
|
89
docker/PowerDNS-MySQL/docker-entrypoint.sh
Executable file
89
docker/PowerDNS-MySQL/docker-entrypoint.sh
Executable file
@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Author: Jirayut 'Dear' Nimsaeng
|
||||||
|
#
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PDNS_CONF_PATH="/etc/powerdns/pdns.conf"
|
||||||
|
PDNS_MYSQL_CONF_PATH="/etc/powerdns/pdns.d/pdns.mysql.conf"
|
||||||
|
PDNS_MYSQL_HOST="localhost"
|
||||||
|
PDNS_MYSQL_PORT="3306"
|
||||||
|
PDNS_MYSQL_USERNAME="powerdns"
|
||||||
|
PDNS_MYSQL_PASSWORD="$PDNS_DB_PASSWORD"
|
||||||
|
PDNS_MYSQL_DBNAME="powerdns"
|
||||||
|
|
||||||
|
if [ -z "$PDNS_DB_PASSWORD" ]; then
|
||||||
|
echo 'ERROR: PDNS_DB_PASSWORD environment variable not found'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure variables
|
||||||
|
if [ "$PDNS_DB_HOST" ]; then
|
||||||
|
PDNS_MYSQL_HOST="$PDNS_DB_HOST"
|
||||||
|
fi
|
||||||
|
if [ "$PDNS_DB_PORT" ]; then
|
||||||
|
PDNS_MYSQL_PORT="$PDNS_DB_PORT"
|
||||||
|
fi
|
||||||
|
if [ "$PDNS_DB_USERNAME" ]; then
|
||||||
|
PDNS_MYSQL_USERNAME="$PDNS_DB_USERNAME"
|
||||||
|
fi
|
||||||
|
if [ "$PDNS_DB_NAME" ]; then
|
||||||
|
PDNS_MYSQL_DBNAME="$PDNS_DB_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure mysql backend
|
||||||
|
sed -i \
|
||||||
|
-e "s/^gmysql-host=.*/gmysql-host=$PDNS_MYSQL_HOST/g" \
|
||||||
|
-e "s/^gmysql-port=.*/gmysql-port=$PDNS_MYSQL_PORT/g" \
|
||||||
|
-e "s/^gmysql-user=.*/gmysql-user=$PDNS_MYSQL_USERNAME/g" \
|
||||||
|
-e "s/^gmysql-password=.*/gmysql-password=$PDNS_MYSQL_PASSWORD/g" \
|
||||||
|
-e "s/^gmysql-dbname=.*/gmysql-dbname=$PDNS_MYSQL_DBNAME/g" \
|
||||||
|
$PDNS_MYSQL_CONF_PATH
|
||||||
|
|
||||||
|
if [ "$PDNS_SLAVE" != "1" ]; then
|
||||||
|
# Configure to be master
|
||||||
|
sed -i \
|
||||||
|
-e "s/^#\?\smaster=.*/master=yes/g" \
|
||||||
|
-e "s/^#\?\sslave=.*/slave=no/g" \
|
||||||
|
$PDNS_CONF_PATH
|
||||||
|
else
|
||||||
|
# Configure to be slave
|
||||||
|
sed -i \
|
||||||
|
-e "s/^#\?\smaster=.*/master=no/g" \
|
||||||
|
-e "s/^#\?\sslave=.*/slave=yes/g" \
|
||||||
|
$PDNS_CONF_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$PDNS_API_KEY" ]; then
|
||||||
|
# Enable API
|
||||||
|
sed -i \
|
||||||
|
-e "s/^#\?\sapi=.*/api=yes/g" \
|
||||||
|
-e "s!^#\?\sapi-logfile=.*!api-logfile=/dev/stdout!g" \
|
||||||
|
-e "s/^#\?\sapi-key=.*/api-key=$PDNS_API_KEY/g" \
|
||||||
|
-e "s/^#\?\swebserver=.*/webserver=yes/g" \
|
||||||
|
-e "s/^#\?\swebserver-address=.*/webserver-address=0.0.0.0/g" \
|
||||||
|
$PDNS_CONF_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$PDNS_WEBSERVER_ALLOW_FROM" ]; then
|
||||||
|
sed -i \
|
||||||
|
"s/^#\?\swebserver-allow-from=.*/webserver-allow-from=$PDNS_WEBSERVER_ALLOW_FROM/g" \
|
||||||
|
$PDNS_CONF_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
MYSQL_COMMAND="mysql -h $PDNS_MYSQL_HOST -P $PDNS_MYSQL_PORT -u $PDNS_MYSQL_USERNAME -p$PDNS_MYSQL_PASSWORD"
|
||||||
|
|
||||||
|
until $MYSQL_COMMAND -e ";" ; do
|
||||||
|
>&2 echo "MySQL is unavailable - sleeping"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
>&2 echo "MySQL is up - initial database if not exists"
|
||||||
|
MYSQL_CHECK_IF_HAS_TABLE="SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '$PDNS_MYSQL_DBNAME';"
|
||||||
|
MYSQL_NUM_TABLE=$($MYSQL_COMMAND --batch --skip-column-names -e "$MYSQL_CHECK_IF_HAS_TABLE")
|
||||||
|
if [ "$MYSQL_NUM_TABLE" -eq 0 ]; then
|
||||||
|
$MYSQL_COMMAND -D $PDNS_MYSQL_DBNAME < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start PowerDNS
|
||||||
|
exec "$@"
|
10
docker/build-images.sh
Executable file
10
docker/build-images.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
IMAGES=(PowerDNS-MySQL PowerDNS-Admin)
|
||||||
|
for IMAGE in "${IMAGES[@]}"
|
||||||
|
do
|
||||||
|
echo building $(basename $IMAGE | tr '[A-Z]' '[a-z]')
|
||||||
|
cd $IMAGE
|
||||||
|
docker build -t $(basename $IMAGE | tr '[A-Z]' '[a-z]') .
|
||||||
|
cd ..
|
||||||
|
done
|
@ -3,14 +3,14 @@ version: '2'
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
powerdns-authoritative:
|
powerdns-authoritative:
|
||||||
image: winggundamth/powerdns-mysql:trusty
|
image: powerdns-mysql
|
||||||
hostname: powerdns-authoritative
|
hostname: powerdns-authoritative
|
||||||
depends_on:
|
depends_on:
|
||||||
- powerdns-authoritative-mariadb
|
- powerdns-authoritative-mariadb
|
||||||
links:
|
links:
|
||||||
- powerdns-authoritative-mariadb:mysqldb
|
- powerdns-authoritative-mariadb:mysqldb
|
||||||
ports:
|
ports:
|
||||||
- 172.17.0.1:53:53/udp
|
- 5553:53/udp
|
||||||
- 8081:8081
|
- 8081:8081
|
||||||
environment:
|
environment:
|
||||||
- PDNS_DB_HOST=mysqldb
|
- PDNS_DB_HOST=mysqldb
|
||||||
@ -27,7 +27,7 @@ services:
|
|||||||
- MYSQL_ROOT_PASSWORD=PowerDNSPassword
|
- MYSQL_ROOT_PASSWORD=PowerDNSPassword
|
||||||
|
|
||||||
powerdns-admin:
|
powerdns-admin:
|
||||||
image: winggundamth/powerdns-admin:trusty
|
image: powerdns-admin
|
||||||
hostname: powerdns-admin
|
hostname: powerdns-admin
|
||||||
depends_on:
|
depends_on:
|
||||||
- powerdns-admin-mariadb
|
- powerdns-admin-mariadb
|
||||||
@ -36,7 +36,7 @@ services:
|
|||||||
- powerdns-admin-mariadb:mysqldb
|
- powerdns-admin-mariadb:mysqldb
|
||||||
- powerdns-authoritative:powerdns-server
|
- powerdns-authoritative:powerdns-server
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/home/web/powerdns-admin
|
- ../:/home/web/powerdns-admin
|
||||||
ports:
|
ports:
|
||||||
- 9393:9393
|
- 9393:9393
|
||||||
environment:
|
environment:
|
Loading…
Reference in New Issue
Block a user