مقالې لارښود
د اډمینر په لاسي ډول نصب کول ودروئ! یو سکریپټ کولی شي ټول امنیتي ترتیب اداره کړي.
څو ورځې وړاندې، زما یو ملګري، چې د سیسټم په اداره کې هم کار کوي، ماته شکایت وکړ چې هغه د ورځې ډیره برخه په خپل سرور کې د اډمینر نصبولو لپاره نیسي. دا داسې نه ده چې اډمینر پخپله نصب کول ستونزمن دي؛ دا یوازې د PHP فایل دی، تاسو کولی شئ دا پورته وغورځوئ او دا به کار وکړي. مګر ستونزه دا ده، تاسو نشئ کولی یوازې د PHP فایل پورته کړئ او یوه ورځ یې واچوئ.
تاسو اړتیا لرئ چې فرعي ډومینونه تنظیم کړئ، پلگ انونه پورته کړئ، د Nginx تصدیق تنظیم کړئ، او د Fail2Ban تنظیم کړئ ترڅو د وحشي ځواک بریدونو مخه ونیسئ. هر ګام پیچلی نه دی، مګر یوځای دوی د ټوټې ټوټې شوي قوماندې او ترتیب فایلونو یوه ډله جوړوي.
هغه څه چې تر دې هم ډیر ځورونکي دي دا دي چې د امنیت پورې اړوند تشکیلات لکه تصدیق او فایر والونه په ځانګړي ډول د غلطیو سره مخ دي. لږ څه څارنه کولی شي د ډیټابیس مدیریت انٹرفیس عامه انټرنیټ ته ښکاره کړي، چې دا د هرچا لپاره د لاسرسي وړ کوي.
ما هغه وخت وخندل ځکه چې ما مخکې هم همداسې کار کاوه. وروسته، زه نور دا برداشت نشم کولی، نو ما د دې ټولو مرحلو اتومات کولو لپاره د یو کلیک پلي کولو سکریپټ ولیکه.

ولې نه کارول کیږي؟phpMyAdmin
تاسو شاید پوښتنه وکړئ، ولې د phpMyAdmin نه کاروئ، کوم چې ډیر عام دی؟
په حقیقت کې، phpMyAdmin ډیر کاروونکي او لویه ټولنه لري. مګر زه فکر کوم چې اډمینر په څو برخو کې ښه دنده ترسره کوي.
لومړی، دا سپک دی؛ اډمینر یوازې یو واحد PHP فایل دی، پداسې حال کې چې phpMyAdmin د فایلونو ټوله ډله ده. دوهم، دا خوندي دی؛ د اډمینر ډیزاین فلسفه "په ډیفالټ ډول بې باوره" ده، پدې معنی چې تاسو اړتیا لرئ د ډیټابیس چلولو لپاره په واضح ډول د اتصال معلومات تنظیم کړئ.
بل اړخ یې فعالیت دی؛ کله چې لوی ډیټابیسونه اداره کیږي، اډمینر د phpMyAdmin په پرتله خورا ګړندی دی.
البته، له دې څخه هیڅ یو هم خورا مهم شیان ندي. ترټولو مهم شی دا دی چې دا سکریپټ پدې معنی دی چې زه نور اړتیا نلرم چې دا امنیت پورې اړوند شیان په لاسي ډول تنظیم کړم.
سکرېپټ په حقیقت کې څه وکړل؟
د دې سکریپټ تر شا مفکوره په حقیقت کې خورا ساده ده: د ټولو هغو ګامونو اتومات کول چې تاسو یې معمولا په لاسي ډول ترسره کوئ.
د متقابل ان پټ لپاره، سکریپټ به له تاسو څخه یو څو پوښتنې وکړي: د HestiaCP کارن نوم، د ډومین نوم، د تصدیق کارن نوم، او پټنوم. تاسو یوازې دا دننه کولو ته اړتیا لرئ، او سکریپټ به پاتې نور اداره کړي.
سکریپټ په اتوماتيک ډول د ویب روټ ډایرکټرۍ جوړوي، ګوري چې ایا apache2-utils (د پټنوم فایلونو د جوړولو لپاره کارول کیږي) او د PHP چاپیریال نصب شوي دي، او د ډایرکټرۍ جوړولو او انحصار نصبولو اداره کوي.
کله چې اډمینر ډاونلوډ کړئ، سکریپټ لومړی هڅه کوي چې د رسمي ذخیره څخه وروستۍ نسخه ډاونلوډ کړي. که رسمي ذخیره شتون ونلري، نو دا په اتوماتيک ډول د مستحکم GitHub Releases ذخیره ته ځي. زه فکر کوم چې دا خورا مهم دی، ځکه چې رسمي ذخیره ځینې وختونه بې ثباته کیدی شي؛ ما مخکې د اتصال وخت پای ته رسیدلی دی.
د پلگ ان ډاونلوډونو په اړه، سکریپټ به درې اصلي پلگ انونه ډاونلوډ کړي: plugin.php د پلگ ان لوډر دی، fc-sqlite-connection-without-credentials.php د بې پاسورډ اړیکو اداره کولو لپاره کارول کیږي، او login-password-less.php د پاسورډ هش ننوتلو ملاتړ کوي.
د پاسورډ هش نسل او index.php په اړه، یو کوچنی تفصیل شتون لري: سکریپټ د $_ENV مستقیم کارولو پرځای د پټنوم بیرته ترلاسه کولو لپاره getenv() کاروي. دا د php.ini ترتیب کولو ستونزې څخه مخنیوی کوي چې د هش محاسبه خالي کیدو لامل کیږي. زه پخپله له دې ستونزې سره مخ شوم او ډیر وخت مې تیر کړ چې معلومه کړم چې 'E' سکوپ په php.ini کې فعال شوی نه و.
د Nginx تصدیق تنظیمولو لپاره، سکریپټ د Nginx اصلي ترتیب فایل مستقیم تعدیل کولو پرځای د HestiaCP اصلي شامل میکانیزم کاروي. د دې طریقې ګټه دا ده چې تصدیق به ناکام نشي حتی که تاسو د ډومین ترتیب بیا جوړ کړئ.
په Fail2Ban ترتیب کې، سکریپټ د 401 غلطیو د څارنې لپاره د فلټر کولو قاعده جوړوي. که چیرې یو IP په 10 دقیقو کې 3 ځله ننوتل کې پاتې راشي، نو دا به د 1 ساعت لپاره بند شي.
د اجازې ترمیم او د خدماتو بیا بارولو په اړه، سکریپټ به په اتوماتيک ډول د فایل سم اجازې تنظیم کړي او د PHP-FPM، Nginx، او Fail2Ban بیا بار کړي.
زه د خوندیتوب په اړه جدي یم.
په ریښتیا سره، د ډیټابیس مدیریت وسیلو امنیت هغه څه دي چې زه یې ډیره پاملرنه کوم.
فکر وکړئ، اډمین کولی شي ستاسو په سرور کې ټول ډیټابیسونه په مستقیم ډول اداره کړي. که چیرې دا عامه انټرنیټ ته ښکاره شي او څوک یې سکین کړي، نو پایلې به یې د تصور وړ نه وي.
دا سکرېپټ درې ګونی خوندیتوب لري.
لومړۍ طبقه د Nginx د HTTP اساسي تصدیق دی. کله چې تاسو اډمینر ته لاسرسی ومومئ، ستاسو براوزر به یو ډیالوګ بکس پاپ اپ کړي چې له تاسو څخه به وغواړي چې خپل کارن نوم او پټنوم دننه کړئ. یوازې د سم معلوماتو داخلولو وروسته به تاسو د اډمینر ننوتل پاڼه وګورئ.
دوهمه طبقه د اډمین خپل پاسورډ هش لاګ ان دی. ما په index.php کې د پاسورډ هش کول تنظیم کړي، نو حتی که څوک د Nginx تصدیق له پامه وغورځوي، دوی به د اډمین د ننوتلو پټنوم ونه پیژني.
دریمه طبقه د Fail2Ban د وحشي ځواک محافظت دی. که څوک ستاسو د پټنوم د وحشي ځواک کارولو هڅه وکړي، Fail2Ban به په اتوماتيک ډول د دوی IP پته بنده کړي.
د دې دریو محافظتي طبقو سره یوځای کولو سره، تاسو کولی شئ په بنسټیز ډول مدیر په عامه انټرنیټ کې د ذهن په آرامۍ سره واچوئ.
د یو کلیک عملیات، دا واقعیا یو کلیک دی.
د پلي کولو پروسه خورا ساده ده.
#!/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 "=================================================="سکرېپټ څنګه چلول: سکرېپټ ته د اجرا کولو اجازه ورکړئ:
sudo chmod +x /usr/local/bin/deploy-adminer.sh
سکرېپټ د sudo په کارولو سره چل کړئ:
sudo /usr/local/bin/deploy-adminer.sh
د ترتیب معلومات دننه کړئ لکه څنګه چې غوښتل شوي وي:
- خپل د HestiaCP کارن نوم ولیکئ (د مثال په توګه، اډمین).
- چمتو شوی بشپړ فرعي ډومین داخل کړئ (د مثال په توګه، adminer.example.com).
- خپل امنیتي پټنوم دننه کړئ (د مثال په توګه، MySuperPassword123)
سکریپټ به په اتوماتيک ډول د ترتیب ټوله پروسه بشپړه کړي پرته لدې چې هیڅ شی پریږدي.
ټوله پروسه شاوخوا یوه یا دوه دقیقې وخت نیسي. سکریپټ به هرڅه په اتوماتيک ډول اداره کړي، او تاسو اړتیا نلرئ چې په لاسي ډول کوم امرونه اجرا کړئ.
وروسته له دې چې تاسو بشپړ کړئ، تاسو کولی شئ د https://yourdomain/index.php له لارې اډمینر ته لاسرسی ومومئ.
ځینې پوښتنې چې تاسو یې په اړه اندیښمن یاست
ځینې ملګري ممکن پوښتنه وکړي، ایا دا سکریپټ د PHP ډیری نسخې ملاتړ کوي؟
هو، دا ملاتړ شوی دی. سکریپټ به په اتوماتيک ډول په سیسټم کې روان ټول PHP-FPM خدمات کشف کړي او یو په یو یې بیا پورته کړي. نو دا ښه کار کوي که تاسو PHP 7.4 یا PHP 8.2 کاروئ.
ځینې ملګري ممکن پوښتنه وکړي، که زه غواړم خپل پټنوم بدل کړم نو څه به وکړم؟
دا ډېر ساده دی؛ یوازې سکرېپټ بیا چالان کړئ. سکرېپټ به د پټنوم هش بیا تولید کړي، د Nginx تصدیق به بیا تنظیم کړي، او Fail2Ban به بیا تنظیم کړي. زوړ ترتیب به له سره ولیکل شي.
که زه غواړم دا غیر نصب کړم نو څه به وکړم؟
تاسو کولی شئ په ساده ډول د ویب روټ ډایرکټرۍ، د پټنوم فایل، او د Fail2Ban ترتیب په لاسي ډول حذف کړئ. سکریپټ به په سیسټم کې نور هیڅ نښې نه پریږدي.
په پای کې ولیکئ
ما تل احساس کړی چې عملیات او ساتنه باید دومره پیچلې نه وي.
ډیری لاسي کارونه په حقیقت کې د سکریپټونو په کارولو سره اتومات کیدی شي. دا تاسو ته اجازه درکوي چې خپل وخت په ډیرو مهمو شیانو مصرف کړئ، لکه د سرور فعالیت اصلاح کول، د غوښتنلیک حالت څارنه، او د نوي ټیکنالوژیو څیړنه.
دا ماته د یوې تاریخي کیسې یادونه کوي. په ۱۸۸۰ لسیزه کې، په متحده ایالاتو کې بریښنا خپره شوه. ډیری فابریکو مالکینو د جنراتورونو او بریښنایی موټرو اخیستلو لپاره ډیرې پیسې مصرف کړې او په خپلو فابریکو کې یې نصب کړې. په هرصورت، د نصبولو وروسته، ډیری وموندل چې د تولید موثریت د پام وړ ښه شوی نه دی. دا ځکه چې دوی یوازې د بخار انجنونه د بریښنایی موټرو سره بدل کړي وو، مګر د فابریکې عمومي ترتیب، پروسې او مدیریت میتودونه بدل شوي نه وو.
هغه کسان چې په ریښتیا سره د بریښنا له ودې څخه ګټه پورته کړه، لومړی کسان وو چې پوه شول چې بریښنا په حقیقت کې څه معنی لري. دوی د تولید لینونه بیا ډیزاین کړل، ورکشاپونه یې بیا تنظیم کړل، او د کارګرانو د کار کولو طریقه یې بیا تنظیم کړه.
همدا خبره د عملیاتو او ساتنې اتومات کولو لپاره هم ده. ډیری خلک پوهیږي چې سکریپټونه کارول کیدی شي، مګر دوی لاهم لاسي عملیات غوره کوي، لکه څنګه چې په تیرو وختونو کې د هغو فابریکو مالکینو چې د بریښنایی موټرو په اړه پوهیدل مګر بیا هم د دوی کارولو لپاره د بخار انجنونو ذهنیت کارولی. سکریپټونه ستاسو د قضاوت ځای په ځای کولو لپاره ندي، بلکه د تکراري، میخانیکي، او غلطۍ سره مخ دندو اتومات کولو لپاره دي، تاسو ته اجازه درکوي چې خپله انرژي په هغه څه تمرکز وکړئ چې واقعیا فکر ته اړتیا لري.
دا سکرېپټ په دې ډول رامنځته شو. دا زما لپاره د درد یوه نقطه حل کړه، او زه هیله لرم چې دا به ستاسو سره هم مرسته وکړي.
که تاسو د HestiaCP او Adminer کاروئ، نو تاسو ممکن وغواړئ چې دا سکریپټ هڅه وکړئ. دا ممکن ستاسو ډیر وخت خوندي کړي.
څرنګه چې تاسو تر دې دمه لوستلي دي، که تاسو ګټور وموندل، مهرباني وکړئ خوښ یې کړئ او شریک یې کړئ. که تاسو غواړئ لومړی تازه معلومات ترلاسه کړئ، تاسو کولی شئ ما تعقیب کړئ!
زما د مقالې د لوستلو لپاره مننه. بل ځل به سره ګورو.
هیله ده، د چن وییلینګ په بلاګ ( https://www.chenweiliang.com/ ) کې شریک شوی مقاله "HestiaCP یو کلیک اتوماتیک ځای پرځای کولو مدیر سکریپټ (د Nginx تصدیق + Fail2Ban دوه ګونی محافظت په شمول)" به ستاسو لپاره ګټوره وي.
د دې مقالې لینک شریکولو لپاره وړیا احساس وکړئ: https://www.chenweiliang.com/cwl-34395.html
