Initial commit

Signed-off-by: Jacob Kiers <code@kiers.eu>
This commit is contained in:
Jacob Kiers 2023-12-06 22:23:52 +01:00
commit 9d162b257a
16 changed files with 241 additions and 0 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
.dockerignore
.git
.gitignore
docker-compose.yml
node_modules
helpers/*
runner/*

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.env
runner/.env
secrets.txt
.tags
.vscode/*

36
CloudronManifest.json Normal file
View File

@ -0,0 +1,36 @@
{
"version": "0.0.1",
"id": "com.powerdns.authoritative.cloudronapp",
"icon": "file://logo.png",
"healthCheckPath": "/",
"httpPort": 3000,
"tcpPorts": {
"DNS_TCP_PORT": {
"title": "TCP DNS Port",
"description": "TCP Port over which DNS requests are made",
"containerPort": 53,
"defaultValue": 53
}
},
"udpPorts": {
"DNS_UDP_PORT": {
"title": "UDP DNS Port",
"description": "UDP Port over which DNS requests are made",
"containerPort": 53,
"defaultValue": 53
}
},
"addons": {
"localstorage": {}
},
"minBoxVersion": "7.1.2",
"manifestVersion": 2,
"website": "https://doc.powerdns.com/authoritative/",
"title": "PowerDNS Authoritative DNS",
"author": "PowerDNS developers",
"tagline": "Independent hosting of DNS domains",
"tags": [
"dns"
],
"documentationUrl": "https://doc.powerdns.com/authoritative/"
}

18
Dockerfile Normal file
View File

@ -0,0 +1,18 @@
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
EXPOSE 8080 53
RUN apt-get install pdns-server pdns-backend-sqlite3 && \
mkdir -p /app/pkg/dist && \
curl --proto '=https' --tlsv1.2 -sSfL \https://github.com/james-stevens/powerdns-webui/raw/2d1a8c5a305f0534d49bf2c8be9a329458ae2fd6/htdocs/index.html \
-o /app/pkg/static/index.html
RUN sed -e 's,^logfile=.*$,logfile=/run/supervisord.log,' -i /etc/supervisor/supervisord.conf
ADD setup/config/ /etc
COPY start.sh /app/pkg/
COPY setup/data /app/pkg/data
WORKDIR /app/data
CMD [ "/app/pkg/start.sh" ]

45
Makefile Normal file
View File

@ -0,0 +1,45 @@
CLOUDRON_APP ?= powerdns
CLOUDRON_ID := $(shell jq -r .id CloudronManifest.json)
CLOUDRON_SERVER ?= my.kiers.eu
#CLOUDRON_TOKEN ?=123
DOCKER_REPO ?= jacobkiers
CLOUDRON ?= cloudron
.PHONY: default
default: build update
.PHONY: init
init:
${CLOUDRON} init
.PHONY: build
build:
${CLOUDRON} build --set-repository $(DOCKER_REPO)/$(CLOUDRON_ID)
.PHONY: update
update: build
${CLOUDRON} update --server ${CLOUDRON_SERVER} --app ${CLOUDRON_APP}
.PHONY: update-ci
update-ci:
${CLOUDRON} update --server ${CLOUDRON_SERVER} --app ${CLOUDRON_APP}
.PHONY: install
install: build
${CLOUDRON} install --location ${CLOUDRON_APP}
.PHONY: uninstall
uninstall:
${CLOUDRON} uninstall --app ${CLOUDRON_APP}
.PHONY: install-debug
install-debug:
${CLOUDRON} install --location ${CLOUDRON_APP} --debug
.PHONY: exec
exec:
${CLOUDRON} exec --app ${CLOUDRON_APP}
.PHONY: logs
logs:
${CLOUDRON} logs -f --app ${CLOUDRON_APP}

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# Cloudron PowerDNS
This is the repository to create a PowerDNS server on Cloudron.

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,19 @@
client_body_temp_path /run/client_body;
proxy_temp_path /run/proxy_temp;
fastcgi_temp_path /run/fastcgi_temp;
scgi_temp_path /run/scgi_temp;
uwsgi_temp_path /run/uwsgi_temp;
server {
listen 3000;
root /app/code/static;
location /api/ {
proxy_pass http://127.0.0.1:8082;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}

View File

@ -0,0 +1,10 @@
[program:nginx]
directory=/tmp
command=/usr/sbin/nginx -g "daemon off;"
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

View File

@ -0,0 +1,10 @@
[program:powerdns-server]
command=/usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no --config-dir=/app/data/config/pdns.conf
directory=/app/data
user=cloudron
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

17
setup/data/README.md Normal file
View File

@ -0,0 +1,17 @@
# PowerDNS Authoritative Server
Hey there!
This app contains a [PowerDNS Authoritative DNS server](https://doc.powerdns.com/authoritative/).
With this, you have the full power of PowerDNS at your fingertips.
By default, it is configured as a primary server. The configuration is stored
in the file called `/app/data/config/pdns.conf` and the `pdns.d` subdirectory.
After you have made changes to it you can restart just powerdns-server by running
`supervisorctl restart powerdns-server`.
It uses the sqlite3 backend, and has an administrative web interface. For
security purposes this is disabled by default. In order to use the admin
interface, you must change the webserver and api settings in the
`01-api.conf` file.

View File

@ -0,0 +1,11 @@
#################################
# include-dir Include *.conf files from this directory
#
# include-dir=
include-dir=/app/data/config/pdns.d
#################################
# launch Which backends to launch and order to query them in
#
# launch=
launch=

View File

@ -0,0 +1,16 @@
local-address=::1,0.0.0.0
primary=yes
version-string=anonymous
allow-axfr-ips=127.0.0.0/8,::1,2a02:a470:2cda::/48,2a01:4f8:c17:7865::/64,2607:7c80:54:6::53,204.87.183.53
allow-dnsupdate-from=127.0.0.0/8,::1,fe80::/10,2a02:a470:2cda::/48
default-soa-content=dns.home.kie.rs hostmaster.@ 0 10800 3600 604800 3600
default-soa-edit=INCEPTION-INCREMENT
launch+=gsqlite3
gsqlite3-database=/app/data/db/pdns.sqlite3
gsqlite3-dnssec=yes

View File

@ -0,0 +1,27 @@
# Webserver and API configuration
# In order to enable the administrative interface, make sure that the
# following three keys are updated.
#
# Generate a secure API key with the following command:
# `LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c32`
#
# This API key is also the password for the web interface.
webserver=no
api=no
api-key=HereYourSuperSecureApiKeyWhichIsAlsoThePasswordForTheAdminInterface
# Listen address for the webserver. Defaults to everywhere, so the API can reach it.
webserver-address=0.0.0.0
# The webserver port to listen on. Do not change this.
webserver-port=8082
# Where to allow requests from. Basic firewall.
# Update this to allow the API to work.
webserver-allow-from=127.0.0.0/8,::1,fe80::/10,0.0.0.0/0,::/0
# Controls the verbosity of webserver logging
# Accepted values: none, normal, detailed
webserver-loglevel=normal

View File

@ -0,0 +1,5 @@
loglevel=5
log-dns-details=yes
log-dns-queries=yes
log-timestamp=yes

12
start.sh Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
set -x
if [ ! -e /app/data/README.md ]; then
cp -dvpR /app/pkg/data/ /app/data
fi
echo "=> Ensure permissions"
chown -R cloudron:cloudron /run /app/data
exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon