Skip to content

Commit d9f94e8

Browse files
poweradmin ? entrypoint fix
1 parent 0a2e42c commit d9f94e8

File tree

4 files changed

+114
-63
lines changed

4 files changed

+114
-63
lines changed

Dockerfile

+14-16
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ RUN set -eux; \
109109
nginx \
110110
php81 \
111111
php81-fpm \
112-
#php-mcrypt \
113112
php81-intl \
114113
php81-iconv \
115114
php81-mysqlnd \
@@ -121,19 +120,11 @@ RUN set -eux; \
121120
php81-tokenizer \
122121
php81-mbstring \
123122
php81-xml \
124-
composer \
125-
musl musl-utils musl-locales tzdata \
126-
; \
127-
true "Setup user and group"; \
128-
addgroup -S powerdns 2>/dev/null; \
129-
adduser -S -D -h /var/lib/powerdns -s /sbin/nologin -G powerdns -g powerdns powerdns 2>/dev/null; \
130-
\
131-
true "Tools"; \
132-
apk add --no-cache \
133-
bind-tools \
134-
; \
135-
true "Cleanup"; \
136-
rm -f /var/cache/apk/*
123+
\
124+
composer musl musl-utils musl-locales tzdata \
125+
#bind-tools; \
126+
rm -f /var/cache/apk/*; \
127+
rm -rf /var/www/localhost
137128

138129
RUN set -eux; \
139130
mkdir -p /var/www/html; \
@@ -150,14 +141,21 @@ COPY entrypoint /usr/bin
150141
COPY nginx /etc/nginx
151142
COPY php81 /etc/php81
152143
COPY poweradmin /var/www/html/poweradmin/inc
144+
COPY sql /sql
145+
153146

154147
RUN set -eux; \
148+
addgroup -S powerdns 2>/dev/null; \
149+
adduser -S -D -h /var/lib/powerdns -s /sbin/nologin -G powerdns -g powerdns powerdns 2>/dev/null; \
150+
cp /usr/share/zoneinfo/${TZ} /etc/localtime; \
151+
chmod +x /usr/bin/entrypoint; \
152+
mkdir -p /run/powerdns; \
155153
chmod 0750 /etc/powerdns; \
156154
chmod 0640 /etc/powerdns/pdns.conf; \
155+
chmod 0755 /run/powerdns; \
157156
chown -R root:powerdns /etc/powerdns; \
158157
chown -R nginx:nginx /var/www/html; \
159-
chmod +x /usr/bin/entrypoint; \
160-
cp /usr/share/zoneinfo/${TZ} /etc/localtime
158+
chown -R powerdns:powerdns /run/powerdns
161159

162160
EXPOSE 53 8081 80
163161
EXPOSE 53/UDP

docker-compose.yml

+34-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
version: '3.9'
2+
3+
networks:
4+
powerdns:
5+
name: powerdns
6+
driver: bridge
7+
# driver_opts:
8+
# com.docker.network.enable_ipv6: "true"
9+
# ipam:
10+
# driver: default
11+
# config:
12+
# - subnet: 172.16.238.0/24
13+
# gateway: 172.16.238.1
14+
# - subnet: "2001:3984:3989::/64"
15+
# gateway: "2001:3984:3989::1"
16+
217
services:
318

419
mariadb:
520
image: mariadb
621
volumes:
722
- ./mysqldb:/var/lib/mysql
23+
networks:
24+
- powerdns
825
environment:
926
- MYSQL_ROOT_PASSWORD=root_pass
1027
- MYSQL_DATABASE=pdns_db
@@ -13,14 +30,27 @@ services:
1330

1431
powerdns:
1532
image: powerdns:latest
33+
networks:
34+
- powerdns
1635
environment:
17-
- POWERDNS_SERVER_ID=serverid
18-
- POWERDNS_WEBSERVER_ALLOW_FROM=0.0.0.0/0
1936
- MYSQL_HOST=mariadb
20-
- MYSQL_PORT=3306
37+
- MYSQL_DATABASE=pdns_db
2138
- MYSQL_USER=pdns_user
2239
- MYSQL_PASSWORD=pdns_pass
23-
- MYSQL_DATABASE=pdns_db
40+
41+
- PDNS_ALLOW_AXFR_IPS=127.0.0.1
42+
- PDNS_MASTER=yes
43+
- PDNS_SLAVE=no
44+
- PDNS_CACHE_TTL=20
45+
- PDNS_DISTRIBUTOR_THREADS=3
46+
- PDNS_RECURSIVE_CACHE_TTL=10
47+
- PDNS_ALLOW_RECURSION=127.0.0.1
48+
- PDNS_RECURSOR=no
49+
50+
51+
- POWERADMIN_IFACE_LANG=ru_RU
52+
- POWERADMIN_NS1=8.8.8.8
53+
- POWERADMIN_NS2=8.8.4.4
2454
depends_on:
2555
- mariadb
2656
ports:

entrypoint

+56-33
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
#!/bin/sh
22

3-
#Defaults
4-
# mysql
3+
TZ=${TZ:-Europe/Moscow}
4+
55
MYSQL_HOST=${MYSQL_HOST:-localhost}
66
MYSQL_PORT=${MYSQL_PORT:-3306}
77
MYSQL_DATABASE=${MYSQL_DATABASE:-pdns}
88
MYSQL_USER=${MYSQL_USER:-pdns}
99
MYSQL_PASSWORD=${MYSQL_PASSWORD:-pdns}
1010

11-
#php
12-
SESSION_KEY=`pwgen 32 1`
13-
11+
POWERADMIN_IFACE_LANG=${POWERADMIN_IFACE_LANG:-en_EN}
12+
POWERADMIN_HOSTMASTER=${POWERADMIN_HOSTMASTER:-}
13+
POWERADMIN_NS1=${POWERADMIN_NS1:-}
14+
POWERADMIN_NS2=${POWERADMIN_NS2:-}
15+
POWERADMIN_SESSION_KEY=${POWER_ADMIN:-`pwgen 32 1`}
1416

1517
PDNS_ALLOW_AXFR_IPS=${PDNS_ALLOW_AXFR_IPS:-127.0.0.1}
1618
PDNS_MASTER=${PDNS_MASTER:-yes}
@@ -20,41 +22,62 @@ PDNS_DISTRIBUTOR_THREADS=${PDNS_DISTRIBUTOR_THREADS:-3}
2022
PDNS_RECURSIVE_CACHE_TTL=${PDNS_RECURSIVE_CACHE_TTL:-10}
2123
PDNS_ALLOW_RECURSION=${PDNS_ALLOW_RECURSION:-127.0.0.1}
2224
PDNS_RECURSOR=${PDNS_RECURSOR:-no}
23-
POWERADMIN_HOSTMASTER=${POWERADMIN_HOSTMASTER:-}
24-
POWERADMIN_NS1=${POWERADMIN_NS1:-}
25-
POWERADMIN_NS2=${POWERADMIN_NS2:-}
2625

27-
# Setup run directory
28-
if [ ! -d /run/powerdns ]; then
29-
mkdir -p /run/powerdns
30-
fi
31-
chown -R powerdns:powerdns /run/powerdns
32-
chmod 0755 /run/powerdns
3326

34-
#Setup mysql env
27+
cp /usr/share/zoneinfo/${TZ} /etc/localtime; \
28+
ENV LANG ${POWERADMIN_IFACE_LANG}.UTF-8
29+
ENV LANGUAGE ${POWERADMIN_IFACE_LANG}.UTF-8
30+
ENV LC_ALL ${POWERADMIN_IFACE_LANG}.UTF-8
31+
ENV MUSL_LOCPATH /usr/share/i18n/locales/musl
3532

36-
if [ -n "$MYSQL_HOST" ]; then
37-
sed -i "s!MYSQL_HOST!${MYSQL_HOST}!" /etc/powerdns/conf.d/gmysql.conf
38-
sed -i "s!{{MYSQL_HOST}}!${MYSQL_HOST}!" /var/www/html/poweradmin/inc/config.inc.php
39-
fi
40-
if [ -n "$MYSQL_PORT" ]; then
41-
sed -i "s!MYSQL_PORT!${MYSQL_PORT}!" /etc/powerdns/conf.d/gmysql.conf
42-
sed -i "s!{{MYSQL_PORT}}!${MYSQL_PORT}!" /var/www/html/poweradmin/inc/config.inc.php
43-
fi
44-
if [ -n "$MYSQL_DATABASE" ]; then
45-
sed -i "s!MYSQL_DATABASE!${MYSQL_DATABASE}!" /etc/powerdns/conf.d/gmysql.conf
46-
sed -i "s!{{MYSQL_DB}}!${MYSQL_DATABASE}!" /var/www/html/poweradmin/inc/config.inc.php
33+
sed -i "s!MYSQL_HOST!${MYSQL_HOST}!" /etc/powerdns/conf.d/gmysql.conf
34+
sed -i "s!MYSQL_PORT!${MYSQL_PORT}!" /etc/powerdns/conf.d/gmysql.conf
35+
sed -i "s!MYSQL_DATABASE!${MYSQL_DATABASE}!" /etc/powerdns/conf.d/gmysql.conf
36+
sed -i "s!MYSQL_USER!${MYSQL_USER}!" /etc/powerdns/conf.d/gmysql.conf
37+
sed -i "s!MYSQL_PASSWORD!${MYSQL_PASSWORD}!" /etc/powerdns/conf.d/gmysql.conf
38+
39+
sed -i "s!MYSQL_HOST!${MYSQL_HOST}!" /var/www/html/poweradmin/inc/config.inc.php
40+
sed -i "s!MYSQL_PORT!${MYSQL_PORT}!" /var/www/html/poweradmin/inc/config.inc.php
41+
sed -i "s!MYSQL_DATABASE!${MYSQL_DATABASE}!" /var/www/html/poweradmin/inc/config.inc.php
42+
sed -i "s!MYSQL_USER!${MYSQL_USER}!" /var/www/html/poweradmin/inc/config.inc.php
43+
sed -i "s!MYSQL_PASSWORD!${MYSQL_PASSWORD}!" /var/www/html/poweradmin/inc/config.inc.php
44+
45+
sed -i "s!POWERADMIN_SESSION_KEY!${POWERADMIN_SESSION_KEY}!" /var/www/html/poweradmin/inc/config.inc.php
46+
sed -i "s!POWERADMIN_IFACE_LANG!${POWERADMIN_IFACE_LANG}!" /var/www/html/poweradmin/inc/config.inc.php
47+
sed -i "s!POWERADMIN_HOSTMASTER!${POWERADMIN_HOSTMASTER}!" /var/www/html/poweradmin/inc/config.inc.php
48+
sed -i "s!POWERADMIN_NS1!${POWERADMIN_NS1}!" /var/www/html/poweradmin/inc/config.inc.php
49+
sed -i "s!POWERADMIN_NS2!${POWERADMIN_NS2}!" /var/www/html/poweradmin/inc/config.inc.php
50+
sed -i "s!TZ!${TZ}!" /var/www/html/poweradmin/inc/config.inc.php
51+
52+
until nc -z ${MYSQL_HOST} ${MYSQL_PORT}; do
53+
echo "$(date) - waiting for a response from mysql"
54+
sleep 1
55+
done
56+
57+
if mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} "${MYSQL_DATABASE}" >/dev/null 2>&1 </dev/null
58+
then
59+
echo "Database ${MYSQL_DATABASE} already exists"
60+
else
61+
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e "CREATE DATABASE ${MYSQL_DATABASE}"
62+
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /sql/pdns_schema.sql
63+
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /sql/poweradmin.sql
4764
fi
48-
if [ -n "$MYSQL_USER" ]; then
49-
sed -i "s!MYSQL_USER!${MYSQL_USER}!" /etc/powerdns/conf.d/gmysql.conf
50-
sed -i "s!{{MYSQL_USER}}!${MYSQL_USER}!" /var/www/html/poweradmin/inc/config.inc.php
65+
66+
CHECK_TABLE=`mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} -e "CHECK TABLE domains;" | grep "doesn't exist" | awk {'print $3'}`
67+
if [ ${CHECK_TABLE} == "Error" ]; then
68+
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /sql/pdns_schema.sql
5169
fi
52-
if [ -n "$MYSQL_PASSWORD" ]; then
53-
sed -i "s!MYSQL_PASSWORD!${MYSQL_PASSWORD}!" /etc/powerdns/conf.d/gmysql.conf
54-
sed -i "s!{{MYSQL_PASSWORD}}!${MYSQL_PASSWORD}!" /var/www/html/poweradmin/inc/config.inc.php
70+
71+
CHECK_TABLE=`mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} -e "CHECK TABLE users;" | grep "doesn't exist" | awk {'print $3'}`
72+
if [ ${CHECK_TABLE} == "Error" ]; then
73+
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /sql/poweradmin.sql
5574
fi
75+
rm -rf /sql
76+
77+
# INSERT INTO users ( id, username, `password`, fullname, email, description, perm_templ, active, use_ldap )
78+
# VALUES ( 1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', '[email protected]', 'Administrator with full rights.', 1, 1, 0 );
79+
# INSERT INTO perm_templ ( id, name, descr ) VALUES ( 1, 'Administrator', 'Administrator template with full rights.' );
5680

57-
sed -i "s!{{SESSION_KEY}}!${SESSION_KEY}!" /var/www/html/poweradmin/inc/config.inc.php
5881

5982
# Setup web access
6083
if [ ! -f /etc/powerdns/conf.d/webserver.conf ] && [ -n "$POWERDNS_WEBSERVER_ALLOW_FROM" ]; then

poweradmin/config.inc.php

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<?php
2-
$db_host = '{{MYSQL_HOST}}';
3-
$db_name = '{{MYSQL_DB}}';
4-
$db_user = '{{MYSQL_USER}}';
5-
$db_pass = '{{MYSQL_PASSWORD}}';
2+
$db_host = 'MYSQL_HOST';
3+
$db_name = 'MYSQL_DATABASE';
4+
$db_user = 'MYSQL_USER';
5+
$db_pass = 'MYSQL_PASSWORD';
66
$db_type = 'mysql';
77

8-
$session_key = '{{SESSION_KEY}}';
8+
$session_key = 'POWERADMIN_SESSION_KEY';
99

10-
$iface_lang = 'en_EN';
10+
$iface_lang = 'POWERADMIN_IFACE_LANG';
1111
$iface_style = 'ignite';
1212

13-
$dns_hostmaster = 'guest';
14-
$dns_ns1 = '8.8.8.8';
15-
$dns_ns2 = '8.8.4.4';
13+
$dns_hostmaster = 'POWERADMIN_HOSTMASTER';
14+
$dns_ns1 = 'POWERADMIN_NS1';
15+
$dns_ns2 = 'POWERADMIN_NS2';
1616

17-
$timezone = 'Europe/Moscow';
17+
$timezone = 'TZ';
1818

1919
$pdnssec_use = true;
2020
$pdnssec_debug = false;

0 commit comments

Comments
 (0)