Ìwé Directory
Dáwọ́ fífi Olùṣàkóso sori ẹrọ pẹ̀lú ọwọ́! Ìwé ìkọ̀wé kan lè ṣe gbogbo ètò ààbò náà.
Ní ọjọ́ méjì sẹ́yìn, ọ̀rẹ́ mi kan, tí ó tún ń ṣiṣẹ́ ní ẹ̀ka ìṣàkóso ètò, kùn sí mi pé ó máa ń gba òun ní gbogbo ọjọ́ láti fi Adminer sí orí ẹ̀rọ ayárayá rẹ̀. Kì í ṣe pé Adminer fúnra rẹ̀ ṣòro láti fi sori ẹ̀rọ; ó jẹ́ fáìlì PHP lásán, o lè ju sílẹ̀, yóò sì ṣiṣẹ́. Ṣùgbọ́n ìṣòro náà ni pé, o kò lè ju fáìlì PHP kan sílẹ̀ kí o sì pè é ní ọjọ́ kan.
O nilo lati ṣeto awọn subdomains, gbe awọn afikun sii, ṣeto ijẹrisi Nginx, ati ṣeto Fail2Ban lati dena awọn ikọlu brute-force. Igbesẹ kọọkan ko nira, ṣugbọn papọ wọn ṣe akopọ awọn aṣẹ ti a pin ati awọn faili iṣeto.
Ohun tó tún ń bíni nínú jù ni pé àwọn ìṣètò tó ní í ṣe pẹ̀lú ààbò bíi ìfàṣẹsí àti àwọn iná mànàmáná máa ń fa àṣìṣe. Àìṣeéṣe díẹ̀ lè fi ìfọwọ́sowọ́pọ̀ ìṣàkóso ibi ìpamọ́ dátà hàn sí ìkànnì ayélujára gbogbogbòò, èyí tó lè mú kí gbogbo ènìyàn lè rí i gbà.
Mo rẹ́rìn-ín nígbà náà nítorí pé mo ti ń ṣe ohun kan náà tẹ́lẹ̀. Nígbà tó yá, mi ò lè fara dà á mọ́, nítorí náà mo kọ ìwé ìṣípayá ìṣípayá kan-kan láti ṣe àtúnṣe gbogbo àwọn ìgbésẹ̀ wọ̀nyí.

Kí ló dé tí a kò fi lò óphpMyAdmin
O le beere pe, kilode ti o ko lo phpMyAdmin, eyiti o jẹ olokiki julọ?
Ní tòótọ́, phpMyAdmin ní àwọn olùlò tó pọ̀ sí i àti àwùjọ tó pọ̀ sí i. Ṣùgbọ́n mo rò pé Admin ń ṣe iṣẹ́ tó dára jù ní àwọn agbègbè díẹ̀.
Àkọ́kọ́, ó fẹ́ẹ́rẹ́fẹ́; Olùdarí jẹ́ fáìlì PHP kan ṣoṣo, nígbà tí phpMyAdmin jẹ́ àpapọ̀ àwọn fáìlì. Èkejì, ó ní ààbò; Ìmọ̀ ọgbọ́n oníṣẹ́ ọnà Olùdarí jẹ́ “a kò gbẹ́kẹ̀lé nípasẹ̀ àìṣeégbẹ́kẹ̀lé,” èyí tí ó túmọ̀ sí wípé o nílò láti ṣe àtúnṣe ìwífún ìsopọ̀ ní pàtó láti ṣiṣẹ́ ibi ìpamọ́ dátà náà.
Apá mìíràn ni iṣẹ́ ṣíṣe; Olùṣàkóso yára ju phpMyAdmin lọ nígbà tí ó bá ń lo àwọn ibi ìpamọ́ dátà ńlá.
Dájúdájú, kò sí ọ̀kan lára àwọn wọ̀nyí tó ṣe pàtàkì jùlọ. Ohun tó ṣe pàtàkì jùlọ ni pé ìwé àfọwọ́kọ yìí túmọ̀ sí pé mi ò ní láti fi ọwọ́ ṣe àtúnṣe àwọn nǹkan tó ní í ṣe pẹ̀lú ààbò mọ́.
Kí ni ìwé àfọwọ́kọ náà ṣe gan-an?
Èrò tó wà lẹ́yìn ìwé àfọwọ́kọ yìí rọrùn gan-an: láti ṣe àtúnṣe gbogbo ìgbésẹ̀ tí o sábà máa ń ṣe pẹ̀lú ọwọ́.
Fún ìfọwọ́sowọ́pọ̀ ìbánisọ̀rọ̀, ìkọ̀wé náà yóò béèrè àwọn ìbéèrè díẹ̀ lọ́wọ́ rẹ: orúkọ olùlò HestiaCP , orúkọ agbègbè, orúkọ olùlò ìfọwọ́sowọ́pọ̀, àti ọ̀rọ̀ìpamọ́. O kan ní láti tẹ ìwọ̀nyí, ìkọ̀wé náà yóò sì bójútó ìyókù.
Ìwé àfọwọ́kọ náà ń ṣẹ̀dá àkójọ ìpìlẹ̀ wẹ́ẹ̀bù láìfọwọ́sí, ó ń ṣàyẹ̀wò bóyá apache2-utils (tí a lò láti ṣe àwọn fáìlì ọ̀rọ̀ aṣínà) àti àyíká PHP ni a fi sori ẹrọ, ó sì ń ṣe àkóso ìṣẹ̀dá àkójọ ìwé àti fífi ìgbẹ́kẹ̀lé sílẹ̀.
Nígbà tí a bá ń gba àkójọpọ̀ Adminer, àkọ́kọ́ gbìyànjú láti gba àkójọpọ̀ tuntun láti ibi ìpamọ́ náà. Tí ibi ìpamọ́ náà kò bá sí, ó máa ń yípadà sí ibi ìpamọ́ GitHub Releases tó dúró ṣinṣin. Mo rò pé èyí ṣe pàtàkì gan-an, nítorí pé ibi ìpamọ́ náà lè má dúró ṣinṣin nígbà míì; mo ti rí àkókò ìjákulẹ̀ ìsopọ̀ tẹ́lẹ̀.
Nípa àwọn ìgbàsílẹ̀ plugin, ìwé àfọwọ́kọ náà yóò gba àwọn plugin mẹ́ta pàtàkì: plugin.php ni ohun èlò tí a fi ń lo plugin, fc-sqlite-connection-without-credentials.php ni a lò láti ṣe àkóso àwọn ìsopọ̀ aláìsí password, àti login-password-less.php ń ṣe àtìlẹ́yìn fún wíwọlé password hash.
Nípa ìṣẹ̀dá hash ọ̀rọ̀ìpamọ́ àti index.php, àwọn kúlẹ̀kúlẹ̀ díẹ̀ wà: ìwé ìkọ̀wé náà lo getenv() láti gba ọ̀rọ̀ìpamọ́ náà dípò lílo $_ENV tààrà. Èyí yẹra fún ìṣòro ìṣètò php.ini tó ń fa kí ìṣirò hash náà di òfo. Èmi fúnra mi rí ìṣòro yìí, mo sì lo àkókò púpọ̀ láti rí i pé a kò lo scope 'E' nínú php.ini.
Fún ṣíṣètò ìfàṣẹsí Nginx, ìkọ̀wé náà lo HestiaCP’s native include mechanism dípò ṣíṣe àtúnṣe fáìlì ìṣàtúnṣe Nginx àkọ́kọ́ taara. Àǹfààní ọ̀nà yìí ni pé ìfàṣẹsí kò ní kùnà kódà bí o bá tún ìṣàtúnṣe domain náà ṣe.
Nínú ìṣètò Fail2Ban, ìwé àfọwọ́kọ náà ṣẹ̀dá òfin àlẹ̀mọ́ láti ṣe àyẹ̀wò àṣìṣe 401. Tí IP kan bá kùnà láti wọlé ní ìgbà mẹ́ta láàrín ìṣẹ́jú mẹ́wàá, a ó dí i fún wákàtí kan.
Nípa àtúnṣe àwọn àṣẹ àti àtúnṣe iṣẹ́, ìwé àfọwọ́kọ náà yóò ṣètò àwọn àṣẹ fáìlì tó tọ́ láìsí àtúnṣe àti tún gbé PHP-FPM, Nginx, àti Fail2Ban padà.
Mo ṣe pataki nipa aabo.
Lóòótọ́, ààbò àwọn irinṣẹ́ ìṣàkóso dátà ni ohun tí mo fẹ́ràn jùlọ.
Ronú nípa rẹ̀, Admin le ṣe àtúnṣe gbogbo ibi ìpamọ́ data lórí olupin rẹ taara. Tí ó bá fara hàn sí ìkànnì ayélujára gbogbogbòò tí ẹnìkan sì ṣe àyẹ̀wò rẹ̀, àbájáde rẹ̀ kò ní ṣeé ronú nípa rẹ̀.
Àkọsílẹ̀ yìí ní ààbò mẹ́ta.
Ipele akọkọ ni HTTP Basic Auth ti Nginx. Nigbati o ba wọle si Adminer, ẹrọ aṣawakiri rẹ yoo han apoti ibaraẹnisọrọ kan ti o beere lọwọ rẹ lati tẹ orukọ olumulo ati ọrọ igbaniwọle rẹ sii. Lẹhin titẹ alaye to tọ nikan ni o le rii oju-iwe iwọle Adminer.
Ipele keji ni iwọle hash ọrọ igbaniwọle ti Admin funrararẹ. Mo ṣe atunto hashing ọrọ igbaniwọle ni index.php, nitorinaa bi ẹnikan ba foju fo ijẹrisi Nginx, wọn kii yoo mọ ọrọ igbaniwọle iwọle Admin.
Ipele kẹta ni aabo agbara burute ti Fail2Ban. Ti ẹnikan ba gbiyanju lati fi agbara mu ọrọ igbaniwọle rẹ, Fail2Ban yoo di adirẹsi IP rẹ duro laifọwọyi.
Pẹ̀lú àwọn ipele ààbò mẹ́ta wọ̀nyí tí a papọ̀, o lè fi Olùdarí sí orí ìkànnì ayélujára pẹ̀lú ìfọ̀kànbalẹ̀ ọkàn.
Iṣẹ́ tẹ-kan, ó jẹ́ tẹ-kan gan-an.
Ilana imuṣiṣẹ naa rọrun pupọ.
#!/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 "=================================================="Bí a ṣe lè ṣiṣẹ́ ìwé àfọwọ́kọ náà: Fún ìwé àfọwọ́kọ náà ní àṣẹ láti ṣiṣẹ́:
sudo chmod +x /usr/local/bin/deploy-adminer.sh
Ṣiṣẹ́ ìwé-àkọsílẹ̀ nípa lílo sudo:
sudo /usr/local/bin/deploy-adminer.sh
Tẹ alaye iṣeto naa bi a ti beere:
- Tẹ orukọ olumulo HestiaCP rẹ sii (fun apẹẹrẹ, admin).
- Tẹ subdomain ti o kun ti a ti pese sile (fun apẹẹrẹ, adminer.example.com).
- Tẹ ọrọ igbaniwọle aabo rẹ sii (fun apẹẹrẹ, MySuperPassword123)
Àkọsílẹ̀ náà yóò parí gbogbo ìlànà ìṣètò láìsí ohunkóhun tí ó kù.
Gbogbo ilana naa gba to iṣẹju kan tabi meji. Iwe afọwọkọ naa yoo ṣakoso ohun gbogbo ni adase, ati pe o ko nilo lati fi ọwọ ṣe eyikeyi awọn aṣẹ.
Lẹ́yìn tí o bá ti parí iṣẹ́ náà, o lè wọlé sí Olùdarí nípasẹ̀ https://yourdomain/index.php
Àwọn ìbéèrè kan wà tó lè máa dà ẹ́ láàmú nípa rẹ
Àwọn ọ̀rẹ́ kan lè béèrè pé, ṣé ìwé àfọwọ́kọ yìí ń ṣe àtìlẹ́yìn fún ọ̀pọ̀lọpọ̀ àwọn ẹ̀yà PHP?
Bẹ́ẹ̀ni, a ti ṣe àtìlẹ́yìn rẹ̀. Ìwé àfọwọ́kọ náà yóò ṣàwárí gbogbo iṣẹ́ PHP-FPM tí ń ṣiṣẹ́ lórí ètò náà láìfọwọ́sí, yóò sì tún gbé wọn padà lọ́kọ̀ọ̀kan. Nítorí náà, ó ń ṣiṣẹ́ dáadáa yálà o ń lo PHP 7.4 tàbí PHP 8.2.
Àwọn ọ̀rẹ́ kan lè béèrè pé, kí ló máa ṣẹlẹ̀ tí mo bá fẹ́ yí ọ̀rọ̀ìpamọ́ mi padà?
Ó rọrùn gan-an; o kan tun ṣe àtúnṣe àkọ́sílẹ̀ náà. Àkọ́sílẹ̀ náà yóò tún ṣe àtúnṣe hash ọ̀rọ̀ìpamọ́, yóò tún ṣe àtúnṣe ìfàṣẹsí Nginx, yóò sì tún ṣe àtúnṣe Fail2Ban. A ó tún kọ àkọ́sílẹ̀ àtijọ́ náà.
Kí ló máa ṣẹlẹ̀ tí mo bá fẹ́ yọ ọ́ kúrò?
O le paarẹ itọsọna gbongbo wẹẹbu, faili ọrọ igbaniwọle, ati iṣeto Fail2Ban pẹlu ọwọ. Iwe afọwọkọ naa kii yoo fi awọn ami miiran silẹ lori eto naa.
Kọ ni ipari
Mo ti rò pé iṣẹ́ àti ìtọ́jú kò yẹ kí ó díjú tó bẹ́ẹ̀.
Ọ̀pọ̀lọpọ̀ iṣẹ́ ọwọ́ ni a lè ṣe nípasẹ̀ àwọn ìwé àkọsílẹ̀. Èyí yóò jẹ́ kí o lo àkókò rẹ lórí àwọn nǹkan pàtàkì, bíi ṣíṣe àtúnṣe iṣẹ́ olupin, ṣíṣàyẹ̀wò ipò ohun èlò, àti ṣíṣe ìwádìí lórí àwọn ìmọ̀ ẹ̀rọ tuntun.
Èyí mú mi rántí ìtàn ìtàn kan. Ní ọdún 1880, iná mànàmáná bẹ̀rẹ̀ sí í tàn káàkiri ní Amẹ́ríkà. Ọ̀pọ̀lọpọ̀ àwọn onílé iṣẹ́ ló ná owó púpọ̀ láti ra àwọn ẹ̀rọ amúná àti àwọn ẹ̀rọ iná mànàmáná, wọ́n sì fi wọ́n sí ilé iṣẹ́ wọn. Ṣùgbọ́n, lẹ́yìn tí wọ́n fi wọ́n sílé, ọ̀pọ̀ ènìyàn rí i pé iṣẹ́ ṣíṣe kò sunwọ̀n sí i gidigidi. Èyí jẹ́ nítorí pé wọ́n ti fi àwọn ẹ̀rọ iná mànàmáná rọ́pò àwọn ẹ̀rọ steam nìkan, ṣùgbọ́n gbogbo ètò, ìlànà àti ọ̀nà ìṣàkóso ilé iṣẹ́ náà kò yí padà.
Àwọn tó jàǹfààní nínú ìdàgbàsókè iná mànàmáná ni wọ́n kọ́kọ́ mọ ohun tí iná mànàmáná túmọ̀ sí gan-an. Wọ́n tún àwọn ọ̀nà ìṣẹ̀dá ṣe, wọ́n tún àwọn ibi ìkọ́lé ṣe, wọ́n sì tún ṣe àtúntò bí àwọn òṣìṣẹ́ ṣe ń ṣiṣẹ́.
Bákan náà ló kan iṣẹ́ àti ìdánilójú àtúnṣe. Ọ̀pọ̀ ènìyàn mọ̀ pé a lè lo àwọn ìwé àkọsílẹ̀, ṣùgbọ́n wọ́n ṣì fẹ́ràn iṣẹ́ ọwọ́, gẹ́gẹ́ bí àwọn onílé iṣẹ́ ìgbàanì tí wọ́n mọ̀ nípa àwọn mọ́tò iná mànàmáná ṣùgbọ́n tí wọ́n ṣì ń lo èrò inú àwọn ẹ̀rọ steam láti lò wọ́n. Àwọn ìwé àkọsílẹ̀ kì í ṣe láti rọ́pò ìpinnu rẹ, ṣùgbọ́n láti ṣe iṣẹ́ àtúnṣe, iṣẹ́ ẹ̀rọ, àti iṣẹ́ àṣìṣe, èyí tí ó ń jẹ́ kí o pọkàn pọ̀ sórí ohun tí ó nílò ìrònú ní tòótọ́.
Báyìí ni ìwé àfọwọ́kọ yìí ṣe bẹ̀rẹ̀. Ó yanjú ìṣòro kan fún mi, mo sì nírètí pé ó lè ràn ọ́ lọ́wọ́ pẹ̀lú.
Tí o bá ń lo HestiaCP àti Adminer, o lè fẹ́ gbìyànjú ìwé yìí. Ó lè gbà ọ́ ní àkókò púpọ̀.
Nítorí pé o ti ka ìwé yìí tán, tí o bá rí i pé ó wúlò, jọ̀wọ́ fẹ́ràn rẹ̀ kí o sì pín in. Tí o bá fẹ́ gba àwọn ìròyìn tuntun ní àkọ́kọ́, o lè tẹ̀lé mi pẹ̀lú!
Ẹ ṣeun fún kíkà àpilẹ̀kọ mi. Ẹ tún rí ara yín nígbà míì.
Mo nireti pe, àpilẹ̀kọ "HestiaCP One-Click Automated Deployment Adminer Script (Pẹ̀lú Nginx Authentication + Fail2Ban Dual Protection)" tí a pín lórí ìwé ìròyìn Chen Weiliang ( https://www.chenweiliang.com/ ) yóò wúlò fún ọ.
Má ṣe ṣiyemeji láti pín ìjápọ̀ àpilẹ̀kọ yìí: https://www.chenweiliang.com/cwl-34395.html
