Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

PowerDNS 部署備忘:MariaDB 後端 + Poweradmin Web 管理 + RPM 打包自動化

編輯:Linux 系統常見問題解答

架構總覽

元件版本/路徑說明
PowerDNS Authoritative Server3.3.1DNS 解析核心,支援 MySQL/MariaDB/PostgreSQL 後端
Poweradmin2.1.6PHP Web 管理介面,管理域名、記錄、用戶權限
資料庫MariaDB 5.5+儲存區域資料、記錄、超級主機設定
Web 伺服器Nginx + PHP-FPMlnmp 架構,/apps/dat/web/pdns

編譯安裝關鍵參數 (spec 檔片段)

%configure \
  --enable-pdns_server \
  --enable-tools \
  --with-lua \
  --with-boost=/usr \
  --with-dynmodules="gmysql" \
  --with-mysql=/apps/svr/mysql

# 關鍵:修正 libtool rpath 問題
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

目錄佈局 (/apps 架構)

/apps/
├── svr/
│   ├── pdns-3.3.1/          # PowerDNS 程式碼
│   │   ├── bin/
│   │   ├── sbin/pdns_server
│   │   └── lib/
│   └── mysql/               # MariaDB 安裝目錄
├── lib/
│   └── pdns-3.3.1/          # 庫檔、配置
├── dat/
│   └── web/
│       └── pdns/            # Poweradmin 程式碼
├── conf/
│   └── pdns/
│       ├── pdns.conf        # 主配置
│       └── pdns.sql         # 資料庫結構
├── sh/
│   └── pdns                 # 啟動腳本 (SysV init)
└── run/
    └── pdns/                # Unix socket 目錄

核心配置 /apps/conf/pdns/pdns.conf

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-password=strong_password
gmysql-dbname=pdns
gmysql-socket=/apps/run/mysql/mysql.sock

local-address=0.0.0.0
local-port=53
query-logging=yes
loglevel=4
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
api-key=changeme_strong_api_key

資料庫初始化

# 1. 建立資料庫與用戶
mysql -u root -p <

Poweradmin 部署 (Nginx + PHP-FPM)

# 1. 解壓至 Web 根目錄
cd /apps/dat/web
tar xf poweradmin-2.1.6.tgz
mv poweradmin-2.1.6 pdns

# 2. Nginx 虛擬主機片段
server {
    listen 80;
    server_name pdnsadmin.example.com;
    root /apps/dat/web/pdns;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/apps/run/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

# 3. 瀏覽器訪問安裝嚮導,填入資料庫資訊、建立管理員帳號

Systemd 服務檔 (/etc/systemd/system/pdns.service)

[Unit]
Description=PowerDNS Authoritative Server
After=network.target mariadb.service

[Service]
Type=forking
ExecStart=/apps/svr/pdns-3.3.1/sbin/pdns_server --daemon --guardian=yes --config-dir=/apps/conf/pdns
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/apps/run/pdns/pdns.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

RPM 打包自動化 (pdns-3.3.1.spec 關鍵段)

%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

# 佈署額外檔案
mkdir -p %{buildroot}/apps/dat/web/pdns
mkdir -p %{buildroot}/apps/sh
mkdir -p %{buildroot}/apps/conf/pdns
cp -rp $RPM_BUILD_DIR/pdns-3.3.1/padmin/* %{buildroot}/apps/dat/web/pdns/
cp -rp $RPM_BUILD_DIR/pdns-3.3.1/conf/pdns.conf %{buildroot}/apps/conf/pdns/
cp -rp $RPM_BUILD_DIR/pdns-3.3.1/sh/pdns %{buildroot}/apps/sh/pdns
cp -rp $RPM_BUILD_DIR/pdns-3.3.1/conf/pdns.sql %{buildroot}/apps/conf/pdns/

%files
%config /apps/conf/pdns/pdns.conf
%config /apps/sh/pdns
%config /apps/conf/pdns/pdns.sql
%{_sbindir}/pdns_server
%{_bindir}/pdns_control
%{_libdir}/pdns/*

驗證與測試

# 1. 檢查服務狀態
systemctl status pdns

# 2. 測試解析
dig @127.0.0.1 example.com A
dig @127.0.0.1 -x 192.168.1.100

# 3. Poweradmin Web 介面
# https://pdnsadmin.example.com

# 4. API 測試 (需 api-key)
curl -H "X-API-Key: changeme_strong_api_key" https://127.0.0.1:8081/api/v1/servers/localhost/zones

常見問題

  • gmysql 模組載入失敗:確認 libgmysqlbackend.so 存在於 /apps/lib/pdns-3.3.1/,且 ldconfig 已更新
  • 資料庫連線失敗:檢查 pdns.conf socket 路徑、用戶權限、防火牆
  • Web 介面 500 錯誤:查看 Nginx/PHP-FPM 錯誤日誌,常見 session.save_path 權限、open_basedir 限制
  • 區域不生效:Poweradmin 修改後需 pdns_control reload 或等待自動輪詢
Copyright © Windows教程網 All Rights Reserved