Eolaire Eolaire
Stop ag suiteáil Adminer de láimh! Is féidir le script amháin an chumraíocht slándála iomlán a láimhseáil.
Cúpla lá ó shin, ghearáin cara liom, a oibríonn i riarachán córais chomh maith, liom go dtógann sé an chuid is mó den lá air Adminer a shuiteáil ar a fhreastalaí. Ní hé go bhfuil sé deacair Adminer féin a shuiteáil; níl ann ach comhad PHP, is féidir leat é a chur suas agus oibreoidh sé. Ach is í an fhadhb atá ann, ní féidir leat comhad PHP a chur suas agus deireadh a chur leis.
Ní mór duit fo-fhearainn a chumrú, breiseáin a luchtú, fíordheimhniú Nginx a shocrú, agus Fail2Ban a chumrú chun ionsaithe brúidiúla a chosc. Níl gach céim casta, ach le chéile is bunch orduithe agus comhad cumraíochta ilroinnte iad.
Is mó fós an cur isteach ná go mbíonn cumraíochtaí slándála ar nós fíordheimhniú agus ballaí dóiteáin an-seansach d’earráidí. Is féidir le faillí bheag an comhéadan bainistíochta bunachar sonraí a nochtadh don idirlíon poiblí, rud a fhágann go bhfuil sé inrochtana ag aon duine.
Rinne mé gáire ag an am mar bhí mé ag déanamh an rud céanna cheana. Níos déanaí, ní raibh mé in ann é a sheasamh níos mó, mar sin scríobh mé script imscartha aon-chliceáil chun na céimeanna seo go léir a uathoibriú.

Cén fáth nach n-úsáideann túphpMyAdmin
B’fhéidir go n-iarrfá, cén fáth nach n-úsáidfeá phpMyAdmin, atá níos príomhshrutha?
Go deimhin, tá níos mó úsáideoirí agus pobal níos mó ag phpMyAdmin. Ach ceapaim go ndéanann Adminer jab níos fearr i roinnt réimsí.
Ar dtús, tá sé éadrom; níl in Adminer ach comhad PHP aonair, agus is carn comhad é phpMyAdmin. Ar an dara dul síos, tá sé slán; is é fealsúnacht dearaidh Adminer ná "neamh-iontaofa de réir réamhshocraithe," rud a chiallaíonn go gcaithfidh tú faisnéis nasc a chumrú go sainráite chun an bunachar sonraí a oibriú.
Gné eile is ea feidhmíocht; tá Adminer i bhfad níos tapúla ná phpMyAdmin agus bunachair shonraí móra á láimhseáil aige.
Ar ndóigh, níl aon cheann de na rudaí seo ar na rudaí is tábhachtaí. Is é an rud is tábhachtaí ná nach gá dom na rudaí slándála sin a chumrú de láimh a thuilleadh leis an script seo.
Cad go díreach a rinne an script?
Tá an smaoineamh atá taobh thiar den script seo sách simplí i ndáiríre: na céimeanna go léir a dhéanann tú de láimh de ghnáth a uathoibriú.
Chun ionchur idirghníomhach a fháil, cuirfidh an script cúpla ceist ort: ainm úsáideora HestiaCP , ainm fearainn, ainm úsáideora fíordheimhnithe, agus pasfhocal. Ní gá duit ach iad seo a iontráil, agus láimhseálfaidh an script an chuid eile.
Cruthaíonn an script an t-eolaire fréimhe gréasáin go huathoibríoch, seiceálann sé an bhfuil apache2-utils (a úsáidtear chun comhaid pasfhocail a ghiniúint) agus an timpeallacht PHP suiteáilte, agus láimhseálann sé cruthú eolaire agus suiteáil spleáchais.
Agus Adminer á íoslódáil, déanann an script iarracht ar dtús an leagan is déanaí a íoslódáil ón stór oifigiúil. Mura bhfuil an stór oifigiúil ar fáil, aistríonn sé go huathoibríoch chuig an stór GitHub Releases cobhsaí. Ceapaim go bhfuil sé seo sách tábhachtach, mar is féidir leis an stór oifigiúil a bheith éagobhsaí uaireanta; tá mé tar éis teacht ar theorainn ama ceangail roimhe seo.
Maidir le híoslódálacha breiseán, íoslódálfaidh an script trí bhreiseán lárnacha: is é plugin.php an luchtóir breiseán, úsáidtear fc-sqlite-connection-without-credentials.php chun naisc gan phasfhocal a láimhseáil, agus tacaíonn login-password-less.php le logáil isteach haise pasfhocail.
Maidir leis an nginiúint haise pasfhocail agus index.php, tá mionsonra beag ann: úsáideann an script getenv() chun an pasfhocal a aisghabháil seachas $_ENV a úsáid go díreach. Seachnaíonn sé seo fadhb chumraíochta php.ini a fhágann go mbíonn an ríomh haise folamh. Tháinig mé féin ar an gaiste seo agus chaith mé tamall fada ag déanamh amach nach raibh an raon feidhme 'E' cumasaithe i php.ini.
Chun fíordheimhniú Nginx a chumrú, úsáideann an script meicníocht dúchasach san áireamh HestiaCP seachas príomhchomhad cumraíochta Nginx a mhodhnú go díreach. Is é buntáiste an chur chuige seo ná nach dteipfidh ar an bhfíordheimhniú fiú má atógálann tú cumraíocht an fhearainn.
Sa chumraíocht Fail2Ban, cruthaíonn an script riail scagtha chun earráidí 401 a mhonatóiriú. Mura logálann IP isteach 3 huaire laistigh de 10 nóiméad, cuirfear bac air ar feadh uair an chloig.
Maidir le deisiú ceadanna agus athlódáil seirbhíse, socróidh an script na ceadanna comhaid cearta go huathoibríoch agus athlódáilfidh sé PHP-FPM, Nginx, agus Fail2Ban.
Táim dáiríre faoi shábháilteacht.
Le bheith ionraic, is é slándáil uirlisí bainistíochta bunachar sonraí an rud is mó a bhfuil cúram orm faoi.
Smaoinigh air, is féidir leis an Riarthóir na bunachair shonraí go léir ar do fhreastalaí a ionramháil go díreach. Dá mbeadh sé nochtaithe don idirlíon poiblí agus dá ndéanfadh duine éigin scanadh air, bheadh na hiarmhairtí dochreidte.
Tá cosaint thrífhillte ag an script seo.
Is é an chéad chiseal ná Údarú Bunúsach HTTP Nginx. Nuair a théann tú isteach i Riarthóir, taispeánfaidh do bhrabhsálaí bosca dialóige ag iarraidh ort d’ainm úsáideora agus do phasfhocal a iontráil. Ní fheicfidh tú leathanach logála isteach an Riarthóra ach amháin tar éis duit an fhaisnéis cheart a iontráil.
Is é an dara sraith logáil isteach haise pasfhocail an Riarthóra féin. Chumraigh mé haiseáil pasfhocail in index.php, mar sin fiú má sheachnaíonn duine fíordheimhniú Nginx, ní bheidh a fhios acu pasfhocal logála isteach an Riarthóra.
Is é an tríú ciseal cosaint brúidiúil Fail2Ban. Má dhéanann duine iarracht do phasfhocal a fhorfheidhmiú go brúidiúil, cuirfidh Fail2Ban bac go huathoibríoch ar a seoladh IP.
Leis na trí shraith chosanta seo le chéile, is féidir leat Riarthóir a chur ar an idirlíon poiblí le suaimhneas intinne.
Oibríocht aon chlic amháin, is cliceáil amháin atá ann i ndáiríre.
Tá an próiseas imscartha thar a bheith simplí.
#!/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 "=================================================="Conas an script a rith: Tabhair ceadanna forghníomhaithe don script:
sudo chmod +x /usr/local/bin/deploy-adminer.sh
Rith an script ag baint úsáide as sudo:
sudo /usr/local/bin/deploy-adminer.sh
Cuir isteach an fhaisnéis chumraíochta mar a iarrtar:
- Cuir isteach d'ainm úsáideora HestiaCP (e.g., riarthóir).
- Cuir isteach an fo-fhearann iomlán ullmhaithe (e.g., adminer.example.com).
- Cuir isteach do phasfhocal slándála (m.sh., MySuperPassword123)
Críochnóidh an script an próiseas cumraíochta ar fad go huathoibríoch gan aon rud a fhágáil ar lár.
Tógann an próiseas iomlán nóiméad nó dhó. Láimhseálfaidh an script gach rud go huathoibríoch, agus ní gá duit aon orduithe a fhorghníomhú de láimh.
Tar éis duit a bheith críochnaithe, is féidir leat rochtain a fháil ar an Riarthóir trí https://yourdomain/index.php
Ceisteanna áirithe a d’fhéadfadh a bheith ina gcúis imní duit
D’fhéadfadh roinnt cairde a fhiafraí, an dtacaíonn an script seo le leaganacha éagsúla de PHP?
Sea, tá tacaíocht leis. Braithfidh an script go huathoibríoch gach seirbhís PHP-FPM atá ag rith ar an gcóras agus athlódálfaidh sé iad ceann ar cheann. Mar sin oibríonn sé go breá cibé an bhfuil tú ag úsáid PHP 7.4 nó PHP 8.2.
D’fhéadfadh roinnt cairde a fhiafraí, cad a tharlóidh má theastaíonn uaim mo phasfhocal a athrú?
Tá sé an-simplí; níl le déanamh ach an script a athrith. Athghinfidh an script hais an phasfhocail, athchumróidh sé fíordheimhniú Nginx, agus athchumróidh sé Fail2Ban. Déanfar an seanchumraíocht a athscríobh.
Cad a tharlóidh má theastaíonn uaim é a dhíshuiteáil?
Is féidir leat an t-eolaire fréimhe gréasáin, an comhad pasfhocail, agus cumraíocht Fail2Ban a scriosadh de láimh. Ní fhágfaidh an script aon rian eile ar an gcóras.
Scríobh ag an deireadh
Bhí mé i gcónaí den tuairim nár cheart go mbeadh oibríochtaí agus cothabháil chomh casta sin.
Is féidir go leor tascanna láimhe a uathoibriú trí scripteanna a úsáid. Ligeann sé seo duit do chuid ama a chaitheamh ar rudaí níos tábhachtaí, amhail feidhmíocht an fhreastalaí a bharrfheabhsú, stádas feidhmchlár a mhonatóiriú, agus teicneolaíochtaí nua a thaighde.
Cuireann sé seo scéal stairiúil i gcuimhne dom. Sna 1880idí, thosaigh leictreachas ag scaipeadh sna Stáit Aontaithe. Chaith go leor úinéirí monarchan go leor airgid chun gineadóirí agus mótair leictreacha a cheannach agus iad a shuiteáil ina monarchana. Mar sin féin, tar éis na suiteála, fuair go leor nach raibh feabhas suntasach tagtha ar éifeachtúlacht táirgthe. Bhí sé seo amhlaidh toisc nach raibh siad ach tar éis innill gaile a athsholáthar le mótair leictreacha, ach d’fhan leagan amach foriomlán, próisis agus modhanna bainistíochta na monarchan gan athrú.
Ba iad na daoine a bhain fíor-thairbhe as borradh an leictreachais na chéad daoine a thuig cad a bhí i gceist le leictreachas i ndáiríre. Rinne siad athdhearadh ar línte táirgeachta, athstruchtúrú ar cheardlanna, agus atheagrú ar an gcaoi a raibh oibrithe ag obair.
Baineann an rud céanna le huathoibriú oibríochtaí agus cothabhála. Tá a fhios ag go leor daoine gur féidir scripteanna a úsáid, ach is fearr leo oibriú láimhe fós, díreach cosúil leis na húinéirí monarchan sin san am atá thart a raibh eolas acu ar mhótair leictreacha ach a d'úsáid meon na n-inneall gaile fós chun iad a úsáid. Níl scripteanna ceaptha chun do bhreithiúnas a athsholáthar, ach chun tascanna athchleachtacha, meicniúla agus seans maith go ndéanfaí earráidí a uathoibriú, rud a ligeann duit do fhuinneamh a dhíriú ar a bhfuil fíor-smaoineamh ag teastáil uathu.
Seo mar a tháinig an script seo chun cinn. Réitigh sé pointe pian domsa, agus tá súil agam go gcuideoidh sé leatsa freisin.
Más HestiaCP agus Adminer atá in úsáid agat, b’fhéidir gur mhaith leat triail a bhaint as an script seo. D’fhéadfadh sé go leor ama a shábháil duit.
Ós rud é gur léigh tú an méid seo, má fuair tú é ina chuidiú, tabhair "Is maith liom" agus roinn é le do thoil. Más mian leat nuashonruithe a fháil ar dtús, is féidir leat mé a leanúint freisin!
Go raibh maith agat as mo alt a léamh. Feicfidh mé thú an chéad uair eile.
Tá súil agam go mbeidh an t-alt "HestiaCP One-Click Automated Deployment Adminer Script (Including Nginx Authentication + Fail2Ban Dual Protection)" a roinneadh ar bhlag Chen Weiliang ( https://www.chenweiliang.com/ ) ina chuidiú duit.
Ná bíodh drogall ort nasc an ailt seo a roinnt: https://www.chenweiliang.com/cwl-34395.html
