HestiaCP nyayogikeun palaksanaan otomatis skrip Adminer sakali klik (kalebet auténtikasi Nginx + panyalindungan ganda Fail2Ban).

Eureunkeun masang Adminer sacara manual! Hiji skrip tiasa nanganan sadaya konfigurasi kaamanan.

Sababaraha dinten kapengker, aya babaturan kuring, anu ogé damel di administrasi sistem, ngawadul ka kuring yén anjeunna peryogi ampir sadinten kanggo masang Adminer dina serverna. Sanés hartosna Adminer hésé dipasang; éta ngan ukur file PHP, anjeun tiasa mukakeunana sareng éta bakal tiasa dianggo. Tapi masalahna, anjeun teu tiasa mukakeun file PHP sareng eureun waé.

Anjeun kedah ngonpigurasikeun subdomain, ngamuat plugin, nyetél auténtikasi Nginx, sareng ngonpigurasikeun Fail2Ban pikeun nyegah serangan brute-force. Unggal léngkah henteu rumit, tapi babarengan éta ngahasilkeun sakumpulan paréntah sareng file konfigurasi anu terfragmentasi.

Anu langkung ngaganggu nyaéta konfigurasi anu aya hubunganana sareng kaamanan sapertos auténtikasi sareng firewall rentan pisan kana kasalahan. Kasalahan sakedik tiasa ngalaan antarmuka manajemén database ka internét umum, janten tiasa diaksés ku saha waé.

Kuring seuri harita sabab kuring geus ngalakukeun hal anu sarua samemehna. Engkéna, kuring geus teu kuat deui, jadi kuring nulis skrip deployment hiji-klik pikeun ngotomatisasi sadaya léngkah ieu.

HestiaCP nyayogikeun palaksanaan otomatis skrip Adminer sakali klik (kalebet auténtikasi Nginx + panyalindungan ganda Fail2Ban).

Naha teu dianggophpMyAdmin

Anjeun panginten naros, kunaon henteu nganggo phpMyAdmin, anu langkung umum?

Memang, phpMyAdmin gaduh langkung seueur pangguna sareng komunitas anu langkung ageung. Tapi kuring pikir Adminer ngalakukeun padamelan anu langkung saé dina sababaraha widang.

Kahiji, éta hampang; Adminer ngan ukur hiji file PHP, sedengkeun phpMyAdmin nyaéta sakumpulan file. Kadua, éta aman; Filosofi desain Adminer "teu dipercaya sacara standar," anu hartosna anjeun kedah ngonpigurasikeun inpormasi konéksi sacara éksplisit pikeun ngoperasikeun database.

Aspék séjénna nyaéta kinerja; Adminer sacara signifikan langkung gancang tibatan phpMyAdmin nalika ngatur database ageung.

Tangtosna, ieu sanés hal anu paling penting. Anu paling penting nyaéta skrip ieu hartosna kuring henteu kedah ngonpigurasikeun hal-hal anu aya hubunganana sareng kaamanan sacara manual.

Naon sabenerna anu dilakukeun ku naskah éta?

Ideu di balik skrip ieu sabenerna cukup saderhana: pikeun ngotomatisasi sadaya léngkah anu biasana anjeun laksanakeun sacara manual.

Pikeun input interaktif, skrip bakal naroskeun sababaraha patarosan ka anjeun: nami pangguna HestiaCP , nami domain, nami pangguna auténtikasi, sareng kecap akses. Anjeun ngan ukur kedah ngalebetkeun ieu, sareng skrip bakal ngurus sésana.

Skrip sacara otomatis nyieun diréktori root wéb, mariksa naha apache2-utils (anu dianggo pikeun ngahasilkeun file kecap akses) sareng lingkungan PHP parantos dipasang, sareng ngatur nyieun diréktori sareng pamasangan dependensi.

Nalika ngaunduh Adminer, skrip mimitina nyobian ngaunduh vérsi pangénggalna tina gudang resmi. Upami gudang resmi henteu sayogi, éta sacara otomatis ngalih ka gudang GitHub Release anu stabil. Numutkeun kuring ieu penting pisan, sabab gudang resmi sakapeung teu stabil; kuring parantos ngalaman waktos sambungan kaluar sateuacanna.

Ngeunaan unduhan plugin, skrip ieu bakal ngaunduh tilu plugin inti: plugin.php nyaéta pangmuat plugin, fc-sqlite-connection-without-credentials.php dianggo pikeun ngatur sambungan tanpa kecap akses, sareng login-password-less.php ngadukung login hash kecap akses.

Ngeunaan generasi hash kecap akses sareng index.php, aya detil leutik: skrip nganggo getenv() pikeun kéngingkeun kecap akses tinimbang langsung nganggo $_ENV. Ieu nyingkahan masalah konfigurasi php.ini anu nyababkeun itungan hash kosong. Kuring sorangan mendakan jebakan ieu sareng nyéépkeun waktos anu lami pikeun mendakan yén ruang lingkup 'E' henteu diaktipkeun dina php.ini.

Pikeun ngonpigurasikeun auténtikasi Nginx, skrip ieu nganggo mékanisme include asli HestiaCP tinimbang ngarobih langsung file konfigurasi utama Nginx. Kauntungan tina pendekatan ieu nyaéta auténtikasi moal gagal sanajan anjeun ngawangun deui konfigurasi domain.

Dina konfigurasi Fail2Ban, skrip nyiptakeun aturan panyaring pikeun ngawas kasalahan 401. Upami IP gagal lebet 3 kali dina 10 menit, éta bakal diblokir salami 1 jam.

Ngeunaan perbaikan idin sareng ngamuat ulang layanan, skrip bakal otomatis nyetel idin file anu leres sareng ngamuat ulang PHP-FPM, Nginx, sareng Fail2Ban.

Abdi serius ngeunaan kaamanan.

Jujur, kaamanan alat manajemen database mangrupikeun hal anu paling kuring padulikeun.

Coba pikirkeun, Admin tiasa langsung ngamanipulasi sadaya database dina server anjeun. Upami éta kakeunaan internét umum teras aya anu nyeken, akibatna moal tiasa dibayangkeun.

Skrip ieu ngagaduhan rangkep tilu panyalindungan.

Lapisan kahiji nyaéta HTTP Basic Auth Nginx. Nalika anjeun ngaksés Adminer, panyungsi anjeun bakal muka kotak dialog anu naroskeun anjeun pikeun ngalebetkeun nami pangguna sareng kecap akses anjeun. Saatos ngalebetkeun inpormasi anu leres, anjeun tiasa ningali halaman login Adminer.

Lapisan kadua nyaéta login hash kecap akses Admin sorangan. Kuring ngonpigurasikeun hashing kecap akses dina index.php, janten sanaos aya anu ngalangkungan auténtikasi Nginx, aranjeunna moal terang kecap akses login Admin.

Lapisan katilu nyaéta panyalindungan brute-force Fail2Ban. Upami aya anu nyobian brute-force kecap akses anjeun, Fail2Ban bakal otomatis meungpeuk alamat IP na.

Ku ayana tilu lapisan panyalindungan ieu digabungkeun, anjeun sacara dasarna tiasa nempatkeun Administrator dina internét umum kalayan tenang.

Operasi sakali klik, éta téh leres-leres sakali klik.

Prosés palaksanaanna saderhana pisan.

#!/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 "=================================================="

Kumaha ngajalankeun skrip: Bere idin pikeun ngajalankeun skrip:

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

Jalankeun skrip nganggo sudo:

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

Lebetkeun inpormasi konfigurasi sakumaha anu dipenta:

  • Lebetkeun nami pangguna HestiaCP anjeun (contona, admin).
  • Lebetkeun subdomain lengkep anu parantos disiapkeun (contona, adminer.example.com).
  • Lebetkeun kecap akses kaamanan anjeun (contona, MySuperPassword123)

Skrip bakal otomatis ngalengkepan sakabéh prosés konfigurasi tanpa ngantunkeun nanaon.

Sakabéh prosésna peryogi waktos sakitar hiji atanapi dua menit. Skrip bakal ngatur sadayana sacara otomatis, sareng anjeun teu kedah ngajalankeun paréntah naon waé sacara manual.

Saatos réngsé, anjeun tiasa ngaksés Admin via https://domainanjeun/index.php

Sababaraha patarosan anu anjeun panginten prihatin

Sababaraha babaturan meureun nanya, naha skrip ieu ngadukung sababaraha vérsi PHP?

Muhun, éta dirojong. Skrip bakal otomatis ngadeteksi sadaya layanan PHP-FPM anu dijalankeun dina sistem sareng ngamuat ulang hiji-hiji. Janten éta tiasa dianggo kalayan saé naha anjeun nganggo PHP 7.4 atanapi PHP 8.2.

Sababaraha babaturan meureun nanya, kumaha lamun kuring hayang ngarobah kecap akses kuring?

Gampang pisan; tinggal jalankeun deui skripna. Skrip bakal ngahasilkeun deui hash kecap akses, ngonpigurasikeun deui auténtikasi Nginx, sareng ngonpigurasikeun deui Fail2Ban. Konfigurasi anu lami bakal ditimpa.

Kumaha upami abdi hoyong nga-uninstallna?

Anjeun tiasa ngahapus diréktori root wéb, file kecap akses, sareng konfigurasi Fail2Ban sacara manual. Skrip moal ninggalkeun tapak sanés dina sistem.

nulis dina tungtungna

Kuring salawasna ngarasa yén operasi sareng pangropéa henteu kedah rumit teuing.

Seueur tugas manual anu sabenerna tiasa diotomatisasi nganggo skrip. Ieu ngamungkinkeun anjeun pikeun ngagunakeun waktos anjeun pikeun hal-hal anu langkung penting, sapertos ngaoptimalkeun kinerja server, ngawas status aplikasi, sareng nalungtik téknologi énggal.

Ieu ngingetkeun kuring kana carita sajarah. Dina taun 1880-an, listrik mimiti nyebar di Amérika Serikat. Seueur nu boga pabrik méakkeun seueur artos kanggo mésér generator sareng motor listrik teras masangna di pabrikna. Nanging, saatos dipasang, seueur anu mendakan yén efisiensi produksi henteu ningkat sacara signifikan. Ieu kusabab aranjeunna ngan ukur ngagentos mesin uap ku motor listrik, tapi tata letak, prosés, sareng metode manajemen pabrik sacara umum tetep teu robih.

Jalma-jalma anu leres-leres nguntungkeun tina booming listrik nyaéta anu mimiti ngartos naon hartosna listrik. Aranjeunna ngarancang ulang jalur produksi, nyusun ulang bengkel, sareng ngatur ulang cara pagawé beroperasi.

Hal anu sami lumaku pikeun otomatisasi operasi sareng pangropéa. Seueur jalmi anu terang yén skrip tiasa dianggo, tapi aranjeunna tetep langkung resep operasi manual, sapertos pamilik pabrik di jaman baheula anu terang ngeunaan motor listrik tapi tetep nganggo pola pikir mesin uap pikeun ngagunakeunana. Skrip henteu dimaksudkeun pikeun ngagentos penilaian anjeun, tapi pikeun ngotomatisasi tugas anu repetitif, mékanis, sareng rawan kasalahan, ngamungkinkeun anjeun museurkeun énergi anjeun kana naon anu leres-leres meryogikeun pamikiran.

Kieu carana skrip ieu dijieun. Éta ngarengsekeun masalah kuring, sareng kuring miharep éta tiasa ngabantosan anjeun ogé.

Upami anjeun nganggo HestiaCP sareng Adminer, anjeun panginten hoyong nyobian skrip ieu. Éta tiasa ngahémat seueur waktos anjeun.

Kusabab anjeun parantos maca dugi ka dieu, upami anjeun mendakan ieu mangpaat, punten like sareng share. Upami anjeun hoyong nampi apdet heula, anjeun ogé tiasa ngiringan kuring!

Hatur nuhun parantos maca tulisan abdi. Tepang deui engké.

koméntar

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

Ngagulung ka luhur