HestiaCP bied outomatiese ontplooiing van die Adminer-skrip met een klik (insluitend Nginx-verifikasie + Fail2Ban dubbele beskerming).

Hou op om Adminer handmatig te installeer! Een skrip kan die hele sekuriteitskonfigurasie hanteer.

'n Paar dae gelede het 'n vriend van my, wat ook in stelseladministrasie werk, by my gekla dat dit hom die meeste van die dag neem om Adminer op sy bediener te installeer. Dis nie dat Adminer self moeilik is om te installeer nie; dis net 'n PHP-lêer, jy kan dit net opgooi en dit sal werk. Maar die probleem is, jy kan nie net 'n PHP-lêer opgooi en daarmee klaar wees nie.

Jy moet subdomeine konfigureer, inproppe laai, Nginx-verifikasie opstel en Fail2Ban konfigureer om brute-force-aanvalle te voorkom. Elke stap is nie ingewikkeld nie, maar saam vorm hulle 'n klomp gefragmenteerde opdragte en konfigurasielêers.

Wat nog meer irriterend is, is dat sekuriteitsverwante konfigurasies soos verifikasie en brandmure besonder geneig is tot foute. 'n Klein oorsig kan die databasisbestuurskoppelvlak aan die publieke internet blootstel, wat dit vir enigiemand toeganklik maak.

Ek het destyds gelag, want ek het dieselfde ding voorheen gedoen. Later kon ek dit nie meer verdra nie, so ek het 'n een-klik-ontplooiingskrip geskryf om al hierdie stappe te outomatiseer.

HestiaCP bied outomatiese ontplooiing van die Adminer-skrip met een klik (insluitend Nginx-verifikasie + Fail2Ban dubbele beskerming).

Hoekom nie gebruik niephpMyAdmin

Jy mag dalk vra, hoekom nie phpMyAdmin gebruik nie, wat meer hoofstroom is?

Inderdaad, phpMyAdmin het meer gebruikers en 'n groter gemeenskap. Maar ek dink Adminer doen 'n beter werk in 'n paar areas.

Eerstens, dit is liggewig; Adminer is net 'n enkele PHP-lêer, terwyl phpMyAdmin 'n hele klomp lêers is. Tweedens, dit is veilig; Adminer se ontwerpfilosofie is "standaard nie vertrou nie", wat beteken dat jy verbindingsinligting eksplisiet moet konfigureer om die databasis te bedryf.

Nog 'n aspek is werkverrigting; Adminer is aansienlik vinniger as phpMyAdmin wanneer groot databasisse hanteer word.

Natuurlik is geeneen hiervan die belangrikste dinge nie. Die belangrikste ding is dat hierdie skrip beteken dat ek nie meer daardie sekuriteitsverwante dinge handmatig hoef te konfigureer nie.

Wat presies het die draaiboek gedoen?

Die idee agter hierdie skrip is eintlik redelik eenvoudig: om al die stappe wat jy normaalweg handmatig doen, te outomatiseer.

Vir interaktiewe invoer sal die skrip jou 'n paar vrae vra: HestiaCP gebruikersnaam, domeinnaam, verifikasie gebruikersnaam en wagwoord. Jy hoef slegs hierdie vrae in te voer, en die skrip sal die res hanteer.

Die skrip skep outomaties die webwortelgids, kontroleer of apache2-utils (wat gebruik word om wagwoordlêers te genereer) en die PHP-omgewing geïnstalleer is, en hanteer gidsskepping en afhanklikheidsinstallasie.

Wanneer Adminer afgelaai word, probeer die skrip eers om die nuutste weergawe van die amptelike bewaarplek af te laai. Indien die amptelike bewaarplek nie beskikbaar is nie, skakel dit outomaties oor na die stabiele GitHub Releases-bewaarplek. Ek dink dit is nogal belangrik, aangesien die amptelike bewaarplek soms onstabiel kan wees; ek het al voorheen verbindingstyd-uitval teëgekom.

Wat inprop-aflaaie betref, sal die skrip drie kern-inproppe aflaai: plugin.php is die inprop-laaier, fc-sqlite-connection-without-credentials.php word gebruik om wagwoordlose verbindings te hanteer, en login-password-less.php ondersteun wagwoord-hash-aanmelding.

Wat die wagwoord-hash-generering en index.php betref, is daar 'n klein detail: die skrip gebruik getenv() om die wagwoord te herwin in plaas daarvan om $_ENV direk te gebruik. Dit vermy 'n php.ini-konfigurasieprobleem wat veroorsaak dat die hash-berekening leeg is. Ek het self hierdie valkuil teëgekom en lank uitgewerk dat die 'E'-omvang nie in php.ini geaktiveer was nie.

Vir die konfigurasie van Nginx-verifikasie gebruik die skrip HestiaCP se oorspronklike insluitingsmeganisme in plaas daarvan om die Nginx-hoofkonfigurasielêer direk te wysig. Die voordeel van hierdie benadering is dat verifikasie nie sal misluk nie, selfs al herbou jy die domeinkonfigurasie.

In die Fail2Ban-konfigurasie skep die skrip 'n filterreël om 401-foute te monitor. Indien 'n IP-adres nie 3 keer binne 10 minute aanmeld nie, sal dit vir 1 uur geblokkeer word.

Wat die herstel van toestemmings en diensherlaai betref, sal die skrip outomaties die korrekte lêertoestemmings stel en PHP-FPM, Nginx en Fail2Ban herlaai.

Ek is ernstig oor veiligheid.

Eerlikwaar, die sekuriteit van databasisbestuursinstrumente is die ding waaroor ek die meeste omgee.

Dink daaraan, die administrateur kan al die databasisse op jou bediener direk manipuleer. As dit aan die publieke internet blootgestel word en iemand dit skandeer, sal die gevolge ondenkbaar wees.

Hierdie skrip het drievoudige beskerming.

Die eerste laag is Nginx se HTTP Basic Auth. Wanneer jy toegang tot Adminer verkry, sal jou blaaier 'n dialoogkassie oopmaak wat jou vra om jou gebruikersnaam en wagwoord in te voer. Slegs nadat jy die korrekte inligting ingevoer het, kan jy die Admin-aanmeldbladsy sien.

Die tweede laag is die Admin se eie wagwoord-hash-aanmelding. Ek het wagwoord-hashing in index.php gekonfigureer, so selfs al omseil iemand Nginx-verifikasie, sal hulle nie die Admin se aanmeldwagwoord ken nie.

Die derde laag is Fail2Ban se brute-force-beskerming. As iemand probeer om jou wagwoord brute-force te gebruik, sal Fail2Ban outomaties hul IP-adres blokkeer.

Met hierdie drie lae beskerming gekombineer, kan jy basies Administrateur met gemoedsrus op die publieke internet plaas.

Een-klik-bewerking, dit is regtig een klik.

Die ontplooiingsproses is uiters eenvoudig.

#!/bin/bash
# ==============================================================================
# Adminer + 插件 + Nginx Auth + Fail2Ban 一键自动化部署脚本 (HestiaCP 完美版)
# ==============================================================================

set -e

# 必须以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "❌ 错误:请使用 root 或 sudo 运行此脚本!"
exit 1
fi

# ------------------------------------------------------------------------------
# 1. 交互式输入配置参数
# ------------------------------------------------------------------------------
read -p "请输入 HestiaCP 用户名 [默认: admin]: " HESTIA_USER
HESTIA_USER=${HESTIA_USER:-admin}

read -p "请输入 Adminer 部署域名 [例如: adminer.example.com]: " DOMAIN
if [ -z "$DOMAIN" ]; then
echo "❌ 错误:域名不能为空!"
exit 1
fi

read -p "请输入 Nginx 网页认证用户名 [默认: adminuser]: " AUTH_USER
AUTH_USER=${AUTH_USER:-adminuser}

read -sp "请输入防护密码 (用于 Nginx 认证与 Adminer 登录): " AUTH_PASS
echo ""
if [ -z "$AUTH_PASS" ]; then
echo "❌ 错误:密码不能为空!"
exit 1
fi

# 核心路径变量定义
WEBROOT="/home/$HESTIA_USER/web/$DOMAIN/public_html"
ADMINER_FILE="$WEBROOT/adminer.php"
PLUGIN_DIR="$WEBROOT/plugins"
HTPASSWD_FILE="/etc/nginx/.htpasswd-$DOMAIN"

echo -e "\n🚀 开始部署 Adminer 到域名: $DOMAIN ..."

# ------------------------------------------------------------------------------
# 2. 创建目录与安装基础依赖
# ------------------------------------------------------------------------------
if [ ! -d "$WEBROOT" ]; then
echo "📁 创建 Web 根目录: $WEBROOT"
mkdir -p "$WEBROOT"
fi
mkdir -p "$PLUGIN_DIR"

echo "🔍 检查基础依赖环境..."
if ! command -v htpasswd >/dev/null 2>&1; then
echo "📦 安装 apache2-utils 工具包..."
apt-get update -qq && apt-get install -y -qq apache2-utils
fi

if ! command -v php >/dev/null 2>&1; then
echo "❌ 错误:未检测到系统的 PHP 环境!"
exit 1
fi

# ------------------------------------------------------------------------------
# 3. 安全下载 Adminer 核心程序
# ------------------------------------------------------------------------------
echo "📥 正在下载最新版 Adminer..."
curl -sL -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
-o "$ADMINER_FILE" "https://www.adminer.org/latest.php"

# 校验下载有效性
if ! grep -q "<?php" "$ADMINER_FILE"; then
echo "⚠️ 官方源连接异常,正在切换至 GitHub Releases 稳定源..."
curl -sL -o "$ADMINER_FILE" \
"https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php"
fi

# ------------------------------------------------------------------------------
# 4. 下载官方核心插件与加载器
# ------------------------------------------------------------------------------
echo "🧩 正在下载插件组件..."
curl -sL -o "$PLUGIN_DIR/plugin.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/plugin.php

curl -sL -o "$PLUGIN_DIR/fc-sqlite-connection-without-credentials.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/fc-sqlite-connection-without-credentials.php

curl -sL -o "$PLUGIN_DIR/login-password-less.php" \
https://raw.githubusercontent.com/vrana/adminer/master/plugins/login-password-less.php

# ------------------------------------------------------------------------------
# 5. 安全生成密码 Hash 并构建入口文件 index.php
# ------------------------------------------------------------------------------
echo "⚙️ 生成密码 Hash 与 index.php 配置..."
# 使用 getenv() 替代 $_ENV,防止 php.ini 未开启 E 作用域导致 Hash 计算为空
HASHED_PASSWORD=$(AUTH_PASS="$AUTH_PASS" php -r 'echo password_hash(getenv("AUTH_PASS"), PASSWORD_DEFAULT);')

cat > "$WEBROOT/index.php" <<EOF
<?php
function adminer_object() {
include_once "./plugins/plugin.php";
include_once "./plugins/fc-sqlite-connection-without-credentials.php";
include_once "./plugins/login-password-less.php";

return new AdminerPlugin([
new AdminerFCSqliteConnectionWithoutCredentials(),
new AdminerLoginPasswordLess('$HASHED_PASSWORD'),
]);
}
include "./adminer.php";
EOF

# ------------------------------------------------------------------------------
# 6. 配置 Nginx 基础认证 (完全依赖 HestiaCP 原生 Include 机制)
# ------------------------------------------------------------------------------
echo "🔒 配置 Nginx HTTP Basic Auth..."
htpasswd -b -c "$HTPASSWD_FILE" "$AUTH_USER" "$AUTH_PASS"
chmod 644 "$HTPASSWD_FILE"

HESTIA_CONF_DIR="/home/$HESTIA_USER/conf/web/$DOMAIN"
if [ -d "$HESTIA_CONF_DIR" ]; then
# HestiaCP 原生包含文件名格式:nginx.conf_* 与 nginx.ssl.conf_*
# 这样无需 sed 修改主配置文件,重建域名配置时也不会失效
cat > "$HESTIA_CONF_DIR/nginx.conf_adminer" <<EOF
auth_basic "Restricted Adminer Access";
auth_basic_user_file $HTPASSWD_FILE;
EOF

cat > "$HESTIA_CONF_DIR/nginx.ssl.conf_adminer" <<EOF
auth_basic "Restricted Adminer Access";
auth_basic_user_file $HTPASSWD_FILE;
EOF
fi

# ------------------------------------------------------------------------------
# 7. 配置 Fail2Ban 防护规则
# ------------------------------------------------------------------------------
echo "🛡️ 配置 Fail2Ban 规则..."
cat > /etc/fail2ban/filter.d/nginx-adminer.conf <<'EOF'
[Definition]
failregex = ^<HOST> - .* "GET /.* HTTP/.*" 401
ignoreregex =
EOF

cat > /etc/fail2ban/jail.d/nginx-adminer.conf <<EOF
[nginx-adminer]
enabled = true
filter = nginx-adminer
port = http,https
logpath = /var/log/nginx/domains/$DOMAIN.log
maxretry = 3
findtime = 600
bantime = 3600
EOF

# ------------------------------------------------------------------------------
# 8. 修复权限、刷新缓存与重载服务
# ------------------------------------------------------------------------------
echo "🧹 修复权限并重载服务..."
chown -R $HESTIA_USER:$HESTIA_USER "$WEBROOT"
find "$WEBROOT" -type d -exec chmod 755 {} +
find "$WEBROOT" -type f -exec chmod 644 {} +

# 平滑重载 PHP-FPM(兼容多版本 PHP 环境)
for service in $(systemctl list-units --type=service --state=running --no-legend | awk '{print $1}' | grep -E 'php.*fpm'); do
systemctl reload "$service" || true
done

# 重载 Web 与防护服务
nginx -t && systemctl reload nginx
if systemctl is-active --quiet fail2ban; then
systemctl restart fail2ban
fi

echo -e "\n=================================================="
echo -e "✅ Adminer 一键部署成功!"
echo -e "--------------------------------------------------"
echo -e "🌐 访问地址 : https://$DOMAIN/index.php"
echo -e "👤 Nginx 认证账号 : $AUTH_USER"
echo -e "🔑 Nginx 认证密码 : [你输入的防护密码]"
echo -e "--------------------------------------------------"
echo -e "💡 Adminer 登录说明:"
echo -e " 数据库用户名填写:root(或你的数据库账号)"
echo -e " 数据库密码填写:[你输入的防护密码]"
echo -e "=================================================="

Hoe om die skrip uit te voer: Gee die skrip uitvoeringspermissies:

sudo chmod +x /usr/local/bin/deploy-adminer.sh 

Voer die skrip uit met behulp van sudo:

sudo /usr/local/bin/deploy-adminer.sh 

Voer die konfigurasie-inligting in soos gevra:

  • Voer jou HestiaCP-gebruikersnaam in (bv. admin).
  • Voer die voorbereide volledige subdomein in (bv. administrateur.voorbeeld.com).
  • Voer jou sekuriteitswagwoord in (bv. MySuperPassword123)

Die skrip sal outomaties die hele konfigurasieproses voltooi sonder om enigiets uit te laat.

Die hele proses neem ongeveer een of twee minute. Die skrip sal alles outomaties hanteer, en jy hoef geen opdragte handmatig uit te voer nie.

Nadat jy klaar is, kan jy toegang tot Admin verkry via https://yourdomain/index.php

Sommige vrae waaroor jy dalk bekommerd is

Sommige vriende mag vra, ondersteun hierdie skrip verskeie PHP-weergawes?

Ja, dit word ondersteun. Die skrip sal outomaties alle PHP-FPM-dienste wat op die stelsel loop, opspoor en een vir een herlaai. Dit werk dus goed, of jy nou PHP 7.4 of PHP 8.2 gebruik.

Sommige vriende vra dalk, wat as ek my wagwoord wil verander?

Dis baie eenvoudig; voer net die skrip weer uit. Die skrip sal die wagwoord-hash regenereer, Nginx-verifikasie herkonfigureer en Fail2Ban herkonfigureer. Die ou konfigurasie sal oorskryf word.

Wat as ek dit wil deïnstalleer?

Jy kan eenvoudig die webwortelgids, wagwoordlêer en Fail2Ban-konfigurasie handmatig verwyder. Die skrip sal geen ander spore op die stelsel laat nie.

Skryf aan die einde

Ek het nog altyd gevoel dat bedrywighede en instandhouding nie so ingewikkeld behoort te wees nie.

Baie handmatige take kan eintlik outomaties met behulp van skripte gedoen word. Dit laat jou toe om jou tyd aan belangriker dinge te bestee, soos om bedienerprestasie te optimaliseer, toepassingstatus te monitor en nuwe tegnologieë te ondersoek.

Dit herinner my aan 'n historiese verhaal. In die 1880's het elektrisiteit in die Verenigde State begin versprei. Baie fabriekseienaars het baie geld bestee om kragopwekkers en elektriese motors te koop en dit in hul fabrieke te installeer. Na die installasie het baie egter gevind dat produksiedoeltreffendheid nie noemenswaardig verbeter het nie. Dit was omdat hulle slegs stoomenjins met elektriese motors vervang het, maar die algehele uitleg, prosesse en bestuursmetodes van die fabriek het onveranderd gebly.

Diegene wat werklik voordeel getrek het uit die elektrisiteitsoplewing, was die eerstes wat verstaan ​​het wat elektrisiteit werklik beteken het. Hulle het produksielyne herontwerp, werkswinkels herstruktureer en die manier waarop werkers gewerk het, herorganiseer.

Dieselfde geld vir bedrywighede en instandhoudingsoutomatisering. Baie mense weet dat skrifte gebruik kan word, maar hulle verkies steeds handmatige werking, net soos daardie fabriekseienaars in die verlede wat van elektriese motors geweet het, maar steeds die denkwyse van stoomenjins gebruik het om hulle te gebruik. Skrifte is nie bedoel om jou oordeel te vervang nie, maar om herhalende, meganiese en foutgevoelige take te outomatiseer, sodat jy jou energie kan fokus op wat werklik denke vereis.

Só het hierdie draaiboek ontstaan. Dit het 'n pynpunt vir my opgelos, en ek hoop dit kan jou ook help.

As jy HestiaCP en Adminer gebruik, kan jy hierdie skrip probeer. Dit kan jou baie tyd bespaar.

Aangesien jy tot hier gelees het, as jy dit nuttig gevind het, like en deel dit asseblief. As jy eerste opdaterings wil ontvang, kan jy my ook volg!

Dankie dat jy my artikel gelees het. Sien jou volgende keer.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Scroll na bo