diff --git a/.gitignore b/.gitignore index 621dce7..00090a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ *.swp -pdns.conf -pdns_backend.py -ddns +/docker/docker-compose.override.yml +/ddns dump.rdb diff --git a/docker/ddns/Dockerfile b/docker/ddns/Dockerfile new file mode 100644 index 0000000..936e5fd --- /dev/null +++ b/docker/ddns/Dockerfile @@ -0,0 +1,3 @@ +FROM golang:1.7-onbuild + +CMD ["/bin/true"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..de8e4aa --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,43 @@ +version: '2' + +volumes: + ddns: + +services: + ddns: + restart: unless-stopped + build: + context: .. + dockerfile: docker/ddns/Dockerfile + volumes: + - ddns:/go/bin/ + + ddns-web: + restart: unless-stopped + build: + context: web/ + dockerfile: Dockerfile + depends_on: + - redis + volumes_from: + - ddns + environment: + DDNS_DOMAIN: d.example.net + + ddns-powerdns: + restart: unless-stopped + build: + context: powerdns/ + dockerfile: Dockerfile + depends_on: + - redis + volumes_from: + - ddns + environment: + DDNS_DOMAIN: d.example.net + DDNS_SOA_DOMAIN: soa.example.net + DDNS_VERBOSE: --verbose + + redis: + restart: unless-stopped + image: redis:latest \ No newline at end of file diff --git a/docker/powerdns/Dockerfile b/docker/powerdns/Dockerfile new file mode 100644 index 0000000..af138e5 --- /dev/null +++ b/docker/powerdns/Dockerfile @@ -0,0 +1,20 @@ +FROM buildpack-deps:jessie-scm +MAINTAINER Philipp Böhm + +# the setup procedure according to https://repo.powerdns.com/ (Debian 8 Jessie) +RUN echo "deb http://repo.powerdns.com/debian jessie-auth-40 main" > /etc/apt/sources.list.d/pdns.list \ + && echo "Package: pdns-*\nPin: origin repo.powerdns.com\nPin-Priority: 600\n" >> /etc/apt/preferences.d/pdns \ + && curl https://repo.powerdns.com/FD380FBB-pub.asc | apt-key add - \ + && apt-get -y update \ + && apt-get install -y pdns-server pdns-backend-pipe \ + && rm -rf /var/lib/apt/lists/* + +COPY pdns.conf /etc/powerdns/pdns.conf + +COPY entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] + +EXPOSE 53 + +CMD ["pdns_server", "--daemon=no"] \ No newline at end of file diff --git a/docker/powerdns/entrypoint.sh b/docker/powerdns/entrypoint.sh new file mode 100644 index 0000000..3070000 --- /dev/null +++ b/docker/powerdns/entrypoint.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +CONFIG_FILE=/etc/powerdns/pdns.conf + +sed -i 's/{{DDNS_DOMAIN}}/'"${DDNS_DOMAIN}"'/g' ${CONFIG_FILE} +sed -i 's/{{DDNS_SOA_DOMAIN}}/'"${DDNS_SOA_DOMAIN}"'/g' ${CONFIG_FILE} +sed -i 's/{{DDNS_VERBOSE}}/'"${DDNS_VERBOSE}"'/g' ${CONFIG_FILE} + +exec "$@" \ No newline at end of file diff --git a/docker/powerdns/pdns.conf b/docker/powerdns/pdns.conf new file mode 100644 index 0000000..5e209f9 --- /dev/null +++ b/docker/powerdns/pdns.conf @@ -0,0 +1,8 @@ +disable-tcp=yes +cache-ttl=0 +loglevel=7 +log-dns-details=yes +disable-axfr=yes + +launch=pipe +pipe-command=/go/bin/app --domain={{DDNS_DOMAIN}} --soa_fqdn={{DDNS_SOA_DOMAIN}} --redis=redis:6379 {{DDNS_VERBOSE}} backend \ No newline at end of file diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile new file mode 100644 index 0000000..8c4e53c --- /dev/null +++ b/docker/web/Dockerfile @@ -0,0 +1,6 @@ +FROM buildpack-deps:jessie-scm +MAINTAINER Philipp Böhm + +ENV GIN_MODE release + +CMD /go/bin/app --domain=${DDNS_DOMAIN} --redis=redis:6379 web diff --git a/web/web.go b/web/web.go index 66df140..a31bd0a 100644 --- a/web/web.go +++ b/web/web.go @@ -4,7 +4,7 @@ import ( "../config" "../hosts" "fmt" - "github.com/gin-gonic/gin" + "gopkg.in/gin-gonic/gin.v1" "html/template" "log" "net"