sh/ir/kejilion.sh
2025-05-14 17:26:19 +08:00

12193 lines
405 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
sh_v="3.9.3"
gl_hui='\e[37m'
gl_hong='\033[31m'
gl_lv='\033[32m'
gl_huang='\033[33m'
gl_lan='\033[34m'
gl_bai='\033[0m'
gl_zi='\033[35m'
gl_kjlan='\033[96m'
canshu="default"
permission_granted="false"
ENABLE_STATS="true"
quanju_canshu() {
if [ "$canshu" = "CN" ]; then
zhushi=0
gh_proxy="https://gh.kejilion.pro/"
elif [ "$canshu" = "V6" ]; then
zhushi=1
gh_proxy="https://gh.kejilion.pro/"
else
zhushi=1 # 0 表示执行1 表示不执行
gh_proxy="https://"
fi
}
quanju_canshu
# یک تابع را برای اجرای دستورات تعریف کنید
run_command() {
if [ "$zhushi" -eq 0 ]; then
"$@"
fi
}
canshu_v6() {
if grep -q '^canshu="V6"' /usr/local/bin/k > /dev/null 2>&1; then
sed -i 's/^canshu="default"/canshu="V6"/' ~/kejilion.sh
fi
}
CheckFirstRun_true() {
if grep -q '^permission_granted="true"' /usr/local/bin/k > /dev/null 2>&1; then
sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh
fi
}
# کارکردهایی که اطلاعات نقطه دفن شده را جمع می کنند ، شماره نسخه اسکریپت فعلی ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکردی را که توسط کاربر استفاده می شود ، ضبط کنید. آنها کاملاً اطلاعات حساس را درگیر نمی کنند ، لطفاً مطمئن باشید! لطفا باور کنید!
# چرا ما نیاز به طراحی این عملکرد داریم؟ هدف این است که عملکردهایی را که کاربران دوست دارند از آنها استفاده کنند بهتر درک کنیم و توابع را برای راه اندازی عملکردهای بیشتری که نیازهای کاربر را برآورده می کند ، بهینه سازی کند.
# برای متن کامل ، می توانید مکان تماس عملکرد SEND_STATS ، منبع شفاف و باز را جستجو کنید و در صورت نگرانی می توانید از استفاده از آن خودداری کنید.
send_stats() {
if [ "$ENABLE_STATS" == "false" ]; then
return
fi
local country=$(curl -s ipinfo.io/country)
local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"')
local cpu_arch=$(uname -m)
(
curl -s -X POST "https://api.kejilion.pro/api/log" \
-H "Content-Type: application/json" \
-d "{\"action\":\"$1\",\"timestamp\":\"$(date -u '+%Y-%m-%d %H:%M:%S')\",\"country\":\"$country\",\"os_info\":\"$os_info\",\"cpu_arch\":\"$cpu_arch\",\"version\":\"$sh_v\"}" \
&>/dev/null
) &
}
yinsiyuanquan2() {
if grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then
sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh
fi
}
canshu_v6
CheckFirstRun_true
yinsiyuanquan2
sed -i '/^alias k=/d' ~/.bashrc > /dev/null 2>&1
sed -i '/^alias k=/d' ~/.profile > /dev/null 2>&1
sed -i '/^alias k=/d' ~/.bash_profile > /dev/null 2>&1
cp -f ./kejilion.sh ~/kejilion.sh > /dev/null 2>&1
cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1
CheckFirstRun_false() {
if grep -q '^permission_granted="false"' /usr/local/bin/k > /dev/null 2>&1; then
UserLicenseAgreement
fi
}
# کاربر را وادار به موافقت با شرایط کنید
UserLicenseAgreement() {
clear
echo -e "${gl_kjlan}به جعبه ابزار Tech Lion Script خوش آمدید${gl_bai}"
echo "برای اولین بار با استفاده از اسکریپت ، لطفاً توافق نامه مجوز کاربر را بخوانید و موافقت کنید."
echo "توافق نامه مجوز کاربر: https://blog.kejilion.pro/user-license-agreement/"
echo -e "----------------------"
read -r -p "آیا با اصطلاحات فوق موافق هستید؟ (y/n):" user_input
if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then
send_stats "رضایت مجوز"
sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh
sed -i 's/^permission_granted="false"/permission_granted="true"/' /usr/local/bin/k
else
send_stats "رد مجوز"
clear
exit
fi
}
CheckFirstRun_false
ip_address() {
ipv4_address=$(curl -s https://ipinfo.io/ip && echo)
ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo)
}
install() {
if [ $# -eq 0 ]; then
echo "پارامترهای بسته ارائه نشده است!"
return 1
fi
for package in "$@"; do
if ! command -v "$package" &>/dev/null; then
echo -e "${gl_huang}نصب$package...${gl_bai}"
if command -v dnf &>/dev/null; then
dnf -y update
dnf install -y epel-release
dnf install -y "$package"
elif command -v yum &>/dev/null; then
yum -y update
yum install -y epel-release
yum install -y "$package"
elif command -v apt &>/dev/null; then
apt update -y
apt install -y "$package"
elif command -v apk &>/dev/null; then
apk update
apk add "$package"
elif command -v pacman &>/dev/null; then
pacman -Syu --noconfirm
pacman -S --noconfirm "$package"
elif command -v zypper &>/dev/null; then
zypper refresh
zypper install -y "$package"
elif command -v opkg &>/dev/null; then
opkg update
opkg install "$package"
elif command -v pkg &>/dev/null; then
pkg update
pkg install -y "$package"
else
echo "مدیر بسته ناشناخته!"
return 1
fi
fi
done
}
check_disk_space() {
required_gb=$1
required_space_mb=$((required_gb * 1024))
available_space_mb=$(df -m / | awk 'NR==2 {print $4}')
if [ $available_space_mb -lt $required_space_mb ]; then
echo -e "${gl_huang}نکته:${gl_bai}فضای کافی دیسک!"
echo "فضای موجود در دسترس: $ ((موجود_ space_mb/1024)) g"
echo "حداقل فضای تقاضا:${required_gb}G"
echo "نصب نمی تواند ادامه یابد. لطفاً فضای دیسک را تمیز کرده و دوباره امتحان کنید."
send_stats "فضای دیسک کافی"
break_end
kejilion
fi
}
install_dependency() {
install wget unzip tar jq
}
remove() {
if [ $# -eq 0 ]; then
echo "پارامترهای بسته ارائه نشده است!"
return 1
fi
for package in "$@"; do
echo -e "${gl_huang}حذف نصب$package...${gl_bai}"
if command -v dnf &>/dev/null; then
dnf remove -y "$package"
elif command -v yum &>/dev/null; then
yum remove -y "$package"
elif command -v apt &>/dev/null; then
apt purge -y "$package"
elif command -v apk &>/dev/null; then
apk del "$package"
elif command -v pacman &>/dev/null; then
pacman -Rns --noconfirm "$package"
elif command -v zypper &>/dev/null; then
zypper remove -y "$package"
elif command -v opkg &>/dev/null; then
opkg remove "$package"
elif command -v pkg &>/dev/null; then
pkg delete -y "$package"
else
echo "مدیر بسته ناشناخته!"
return 1
fi
done
}
# عملکرد جهانی SystemCtl ، مناسب برای توزیع های مختلف
systemctl() {
local COMMAND="$1"
local SERVICE_NAME="$2"
if command -v apk &>/dev/null; then
service "$SERVICE_NAME" "$COMMAND"
else
/bin/systemctl "$COMMAND" "$SERVICE_NAME"
fi
}
# سرویس را مجدداً راه اندازی کنید
restart() {
systemctl restart "$1"
if [ $? -eq 0 ]; then
echo "$1این سرویس مجدداً راه اندازی شده است."
else
echo "خطا: راه اندازی مجدد$1سرویس شکست خورد."
fi
}
# سرویس را شروع کنید
start() {
systemctl start "$1"
if [ $? -eq 0 ]; then
echo "$1این سرویس آغاز شده است."
else
echo "خطا: شروع کنید$1سرویس شکست خورد."
fi
}
# سرویس توقف
stop() {
systemctl stop "$1"
if [ $? -eq 0 ]; then
echo "$1سرویس متوقف شده است"
else
echo "خطا: توقف$1سرویس شکست خورد."
fi
}
# وضعیت خدمات را بررسی کنید
status() {
systemctl status "$1"
if [ $? -eq 0 ]; then
echo "$1وضعیت سرویس نمایش داده می شود."
else
echo "خطا: نمایش امکان پذیر نیست$1وضعیت خدمات"
fi
}
enable() {
local SERVICE_NAME="$1"
if command -v apk &>/dev/null; then
rc-update add "$SERVICE_NAME" default
else
/bin/systemctl enable "$SERVICE_NAME"
fi
echo "$SERVICE_NAMEروی قدرت تنظیم کنید."
}
break_end() {
echo -e "${gl_lv}عملیات کامل شد${gl_bai}"
echo "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
echo ""
clear
}
kejilion() {
cd ~
kejilion_sh
}
check_port() {
install lsof
stop_containers_or_kill_process() {
local port=$1
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
if [ -n "$containers" ]; then
docker stop $containers
else
for pid in $(lsof -t -i:$port); do
kill -9 $pid
done
fi
}
stop_containers_or_kill_process 80
stop_containers_or_kill_process 443
}
install_add_docker_cn() {
local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker-0.unsee.tech",
"https://docker.1panel.live",
"https://registry.dockermirror.com",
"https://docker.imgdb.de",
"https://docker.m.daocloud.io",
"https://hub.firefly.store",
"https://hub.littlediary.cn",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://cjie.eu.org",
"https://docker.1panelproxy.com",
"https://docker.hlmirror.com",
"https://hub.fast360.xyz",
"https://dockerpull.cn",
"https://cr.laoyou.ip-ddns.com",
"https://docker.melikeme.cn",
"https://docker.kejilion.pro"
]
}
EOF
fi
enable docker
start docker
restart docker
}
install_add_docker_guanfang() {
local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
cd ~
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/install && chmod +x install
sh install --mirror Aliyun
rm -f install
else
curl -fsSL https://get.docker.com | sh
fi
install_add_docker_cn
}
install_add_docker() {
echo -e "${gl_huang}نصب محیط داکر ...${gl_bai}"
if [ -f /etc/os-release ] && grep -q "Fedora" /etc/os-release; then
install_add_docker_guanfang
elif command -v dnf &>/dev/null; then
dnf update -y
dnf install -y yum-utils device-mapper-persistent-data lvm2
rm -f /etc/yum.repos.d/docker*.repo > /dev/null
country=$(curl -s ipinfo.io/country)
arch=$(uname -m)
if [ "$country" = "CN" ]; then
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo | tee /etc/yum.repos.d/docker-ce.repo > /dev/null
else
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo > /dev/null
fi
dnf install -y docker-ce docker-ce-cli containerd.io
install_add_docker_cn
elif [ -f /etc/os-release ] && grep -q "Kali" /etc/os-release; then
apt update
apt upgrade -y
apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
rm -f /usr/share/keyrings/docker-archive-keyring.gpg
local country=$(curl -s ipinfo.io/country)
local arch=$(uname -m)
if [ "$country" = "CN" ]; then
if [ "$arch" = "x86_64" ]; then
sed -i '/^deb \[arch=amd64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
elif [ "$arch" = "aarch64" ]; then
sed -i '/^deb \[arch=arm64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
else
if [ "$arch" = "x86_64" ]; then
sed -i '/^deb \[arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
elif [ "$arch" = "aarch64" ]; then
sed -i '/^deb \[arch=arm64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null
echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
fi
apt update
apt install -y docker-ce docker-ce-cli containerd.io
install_add_docker_cn
elif command -v apt &>/dev/null || command -v yum &>/dev/null; then
install_add_docker_guanfang
else
install docker docker-compose
install_add_docker_cn
fi
sleep 2
}
install_docker() {
if ! command -v docker &>/dev/null; then
install_add_docker
fi
}
docker_ps() {
while true; do
clear
send_stats "مدیریت کانتینر داکر"
echo "لیست کانتینر داکر"
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "کانتینر"
echo "------------------------"
echo "1. یک ظرف جدید ایجاد کنید"
echo "------------------------"
echo "2. ظرف مشخص شده را شروع کنید 6. همه ظروف را شروع کنید"
echo "3. کانتینر مشخص شده 7 را متوقف کنید. تمام ظروف را متوقف کنید"
echo "4. ظرف مشخص شده را حذف کنید 8. همه ظروف را حذف کنید"
echo "5. ظرف مشخص شده را مجدداً راه اندازی کنید. همه ظروف را مجدداً راه اندازی کنید"
echo "------------------------"
echo "11. ظرف مشخص شده 12 را وارد کنید. ورود به سیستم کانتینر را مشاهده کنید"
echo "13. مشاهده شبکه کانتینر 14. مشاهده اشغال کانتینر"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "یک ظرف جدید ایجاد کنید"
read -e -p "لطفاً دستور ایجاد را وارد کنید:" dockername
$dockername
;;
2)
send_stats "ظرف مشخص شده را شروع کنید"
read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
docker start $dockername
;;
3)
send_stats "ظرف مشخص شده را متوقف کنید"
read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
docker stop $dockername
;;
4)
send_stats "ظرف مشخص شده را حذف کنید"
read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername
docker rm -f $dockername
;;
5)
send_stats "ظرف مشخص شده را مجدداً راه اندازی کنید"
read -e -p "لطفاً نام کانتینر را وارد کنید (چندین نام کانتینر که توسط فضاها جدا شده اند):" dockername
docker restart $dockername
;;
6)
send_stats "همه ظروف را شروع کنید"
docker start $(docker ps -a -q)
;;
7)
send_stats "تمام ظروف را متوقف کنید"
docker stop $(docker ps -q)
;;
8)
send_stats "همه ظروف را حذف کنید"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker rm -f $(docker ps -a -q)
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
9)
send_stats "همه ظروف را مجدداً راه اندازی کنید"
docker restart $(docker ps -q)
;;
11)
send_stats "ظرف را وارد کنید"
read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername
docker exec -it $dockername /bin/sh
break_end
;;
12)
send_stats "مشاهده کانتینر"
read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername
docker logs $dockername
break_end
;;
13)
send_stats "مشاهده شبکه کانتینر"
echo ""
container_ids=$(docker ps -q)
echo "------------------------------------------------------------"
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
for container_id in $container_ids; do
local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
local container_name=$(echo "$container_info" | awk '{print $1}')
local network_info=$(echo "$container_info" | cut -d' ' -f2-)
while IFS= read -r line; do
local network_name=$(echo "$line" | awk '{print $1}')
local ip_address=$(echo "$line" | awk '{print $2}')
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
done <<< "$network_info"
done
break_end
;;
14)
send_stats "مشاهده اشغال کانتینر"
docker stats --no-stream
break_end
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
docker_image() {
while true; do
clear
send_stats "مدیریت تصویر داکر"
echo "لیست تصویر Docker"
docker image ls
echo ""
echo "عمل آینه"
echo "------------------------"
echo "1. تصویر مشخص شده را دریافت کنید. تصویر مشخص شده را حذف کنید"
echo "2. تصویر مشخص شده را به روز کنید. همه تصاویر را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "آینه را بکشید"
read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
for name in $imagenames; do
echo -e "${gl_huang}گرفتن تصویر:$name${gl_bai}"
docker pull $name
done
;;
2)
send_stats "تصویر را به روز کنید"
read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
for name in $imagenames; do
echo -e "${gl_huang}تصویر به روز شده:$name${gl_bai}"
docker pull $name
done
;;
3)
send_stats "آینه را حذف کنید"
read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames
for name in $imagenames; do
docker rmi -f $name
done
;;
4)
send_stats "همه تصاویر را حذف کنید"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker rmi -f $(docker images -q)
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
check_crontab_installed() {
if ! command -v crontab >/dev/null 2>&1; then
install_crontab
fi
}
install_crontab() {
if [ -f /etc/os-release ]; then
. /etc/os-release
case "$ID" in
ubuntu|debian|kali)
apt update
apt install -y cron
systemctl enable cron
systemctl start cron
;;
centos|rhel|almalinux|rocky|fedora)
yum install -y cronie
systemctl enable crond
systemctl start crond
;;
alpine)
apk add --no-cache cronie
rc-update add crond
rc-service crond start
;;
arch|manjaro)
pacman -S --noconfirm cronie
systemctl enable cronie
systemctl start cronie
;;
opensuse|suse|opensuse-tumbleweed)
zypper install -y cron
systemctl enable cron
systemctl start cron
;;
iStoreOS|openwrt|ImmortalWrt|lede)
opkg update
opkg install cron
/etc/init.d/cron enable
/etc/init.d/cron start
;;
FreeBSD)
pkg install -y cronie
sysrc cron_enable="YES"
service cron start
;;
*)
echo "توزیع های پشتیبانی نشده:$ID"
return
;;
esac
else
echo "سیستم عامل قابل تعیین نیست."
return
fi
echo -e "${gl_lv}Crontab نصب شده و سرویس Cron در حال اجرا است.${gl_bai}"
}
docker_ipv6_on() {
root_use
install jq
local CONFIG_FILE="/etc/docker/daemon.json"
local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}'
# بررسی کنید که آیا پرونده پیکربندی وجود دارد ، پرونده را ایجاد کرده و در صورت وجود تنظیمات پیش فرض را بنویسید
if [ ! -f "$CONFIG_FILE" ]; then
echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE"
restart docker
else
# از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید
local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")
# بررسی کنید که آیا پیکربندی فعلی در حال حاضر دارای تنظیمات IPv6 است
local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false')
# پیکربندی را به روز کنید و IPv6 را فعال کنید
if [[ "$CURRENT_IPV6" == "false" ]]; then
UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}')
else
UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}')
fi
# مقایسه پیکربندی اصلی با پیکربندی جدید
if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then
echo -e "${gl_huang}دسترسی IPv6 در حال حاضر فعال است${gl_bai}"
else
echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE"
restart docker
fi
fi
}
docker_ipv6_off() {
root_use
install jq
local CONFIG_FILE="/etc/docker/daemon.json"
# بررسی کنید که آیا پرونده پیکربندی وجود دارد
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${gl_hong}پرونده پیکربندی وجود ندارد${gl_bai}"
return
fi
# پیکربندی فعلی را بخوانید
local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")
# از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید
local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false')
# وضعیت IPv6 فعلی را بررسی کنید
local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false')
# مقایسه پیکربندی اصلی با پیکربندی جدید
if [[ "$CURRENT_IPV6" == "false" ]]; then
echo -e "${gl_huang}دسترسی IPv6 در حال حاضر بسته است${gl_bai}"
else
echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE"
restart docker
echo -e "${gl_huang}دسترسی IPv6 با موفقیت بسته شده است${gl_bai}"
fi
}
save_iptables_rules() {
mkdir -p /etc/iptables
touch /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v4
check_crontab_installed
crontab -l | grep -v 'iptables-restore' | crontab - > /dev/null 2>&1
(crontab -l ; echo '@reboot iptables-restore < /etc/iptables/rules.v4') | crontab - > /dev/null 2>&1
}
iptables_open() {
install iptables
save_iptables_rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -F
}
open_port() {
local ports=($@) # 将传入的参数转换为数组
if [ ${#ports[@]} -eq 0 ]; then
echo "لطفاً حداقل یک شماره درگاه ارائه دهید"
return 1
fi
install iptables
for port in "${ports[@]}"; do
# قوانین بسته شدن موجود را حذف کنید
iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null
iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null
# قوانین باز را اضافه کنید
if ! iptables -C INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null; then
iptables -I INPUT 1 -p tcp --dport $port -j ACCEPT
fi
if ! iptables -C INPUT -p udp --dport $port -j ACCEPT 2>/dev/null; then
iptables -I INPUT 1 -p udp --dport $port -j ACCEPT
echo "بندر باز شده است$port"
fi
done
save_iptables_rules
send_stats "بندر باز شده است"
}
close_port() {
local ports=($@) # 将传入的参数转换为数组
if [ ${#ports[@]} -eq 0 ]; then
echo "لطفاً حداقل یک شماره درگاه ارائه دهید"
return 1
fi
install iptables
for port in "${ports[@]}"; do
# قوانین باز موجود را حذف کنید
iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null
iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null
# یک قانون نزدیک اضافه کنید
if ! iptables -C INPUT -p tcp --dport $port -j DROP 2>/dev/null; then
iptables -I INPUT 1 -p tcp --dport $port -j DROP
fi
if ! iptables -C INPUT -p udp --dport $port -j DROP 2>/dev/null; then
iptables -I INPUT 1 -p udp --dport $port -j DROP
echo "بندر بسته$port"
fi
done
save_iptables_rules
send_stats "بندر بسته"
}
allow_ip() {
local ips=($@) # 将传入的参数转换为数组
if [ ${#ips[@]} -eq 0 ]; then
echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید"
return 1
fi
install iptables
for ip in "${ips[@]}"; do
# قوانین مسدود کردن موجود را حذف کنید
iptables -D INPUT -s $ip -j DROP 2>/dev/null
# قوانین اجازه را اضافه کنید
if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then
iptables -I INPUT 1 -s $ip -j ACCEPT
echo "IP آزاد شده$ip"
fi
done
save_iptables_rules
send_stats "IP آزاد شده"
}
block_ip() {
local ips=($@) # 将传入的参数转换为数组
if [ ${#ips[@]} -eq 0 ]; then
echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید"
return 1
fi
install iptables
for ip in "${ips[@]}"; do
# قوانین مجاز موجود را حذف کنید
iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null
# قوانین مسدود کردن را اضافه کنید
if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then
iptables -I INPUT 1 -s $ip -j DROP
echo "IP مسدود شده$ip"
fi
done
save_iptables_rules
send_stats "IP مسدود شده"
}
enable_ddos_defense() {
# DDO های دفاعی را روشن کنید
iptables -A DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT
iptables -A DOCKER-USER -p tcp --syn -j DROP
iptables -A DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT
iptables -A DOCKER-USER -p udp -j DROP
iptables -A INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT
iptables -A INPUT -p udp -j DROP
send_stats "دفاع DDOS را روشن کنید"
}
# دفاع DDOS را خاموش کنید
disable_ddos_defense() {
# DDO های دفاع را خاموش کنید
iptables -D DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null
iptables -D DOCKER-USER -p tcp --syn -j DROP 2>/dev/null
iptables -D DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null
iptables -D DOCKER-USER -p udp -j DROP 2>/dev/null
iptables -D INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null
iptables -D INPUT -p tcp --syn -j DROP 2>/dev/null
iptables -D INPUT -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null
iptables -D INPUT -p udp -j DROP 2>/dev/null
send_stats "دفاع DDOS را خاموش کنید"
}
# کارکردهایی که قوانین ملی IP را مدیریت می کنند
manage_country_rules() {
local action="$1"
local country_code="$2"
local ipset_name="${country_code,,}_block"
local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone"
install ipset
case "$action" in
block)
# اگر IPSET وجود نداشته باشد ایجاد کنید
if ! ipset list "$ipset_name" &> /dev/null; then
ipset create "$ipset_name" hash:net
fi
# بارگیری پرونده منطقه IP
if ! wget -q "$download_url" -O "${country_code,,}.zone"; then
echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد"
exit 1
fi
# IP را به ipset اضافه کنید
while IFS= read -r ip; do
ipset add "$ipset_name" "$ip"
done < "${country_code,,}.zone"
# IP را با iptables مسدود کنید
iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP
iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP
echo "با موفقیت مسدود شد$country_codeآدرس IP"
rm "${country_code,,}.zone"
;;
allow)
# ایجاد یک IPSET برای کشورهای مجاز (اگر وجود نداشته باشد)
if ! ipset list "$ipset_name" &> /dev/null; then
ipset create "$ipset_name" hash:net
fi
# بارگیری پرونده منطقه IP
if ! wget -q "$download_url" -O "${country_code,,}.zone"; then
echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد"
exit 1
fi
# قوانین ملی موجود را حذف کنید
iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null
iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null
ipset flush "$ipset_name"
# IP را به ipset اضافه کنید
while IFS= read -r ip; do
ipset add "$ipset_name" "$ip"
done < "${country_code,,}.zone"
# فقط IP در کشورهای تعیین شده مجاز است
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT
iptables -A OUTPUT -m set --match-set "$ipset_name" dst -j ACCEPT
echo "با موفقیت فقط مجاز است$country_codeآدرس IP"
rm "${country_code,,}.zone"
;;
unblock)
# قوانین iptables را برای کشور حذف کنید
iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null
iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null
# Ipset را نابود کنید
if ipset list "$ipset_name" &> /dev/null; then
ipset destroy "$ipset_name"
fi
echo "با موفقیت برداشته شد$country_codeمحدودیت های آدرس IP"
;;
*)
;;
esac
}
iptables_panel() {
root_use
install iptables
save_iptables_rules
while true; do
clear
echo "مدیریت پیشرفته فایروال"
send_stats "مدیریت پیشرفته فایروال"
echo "------------------------"
iptables -L INPUT
echo ""
echo "مدیریت فایروال"
echo "------------------------"
echo "1. پورت مشخص شده را باز کنید. پورت مشخص شده را ببندید"
echo "3. همه درگاه ها را باز کنید. همه درگاه ها را ببندید"
echo "------------------------"
echo "5. Whitelist IP 6."
echo "7. IP مشخص شده را پاک کنید"
echo "------------------------"
echo "11. اجازه دهید پینگ 12 را غیرفعال کنید"
echo "------------------------"
echo "13. دفاع DDOS را شروع کنید 14. دفاع DDOS را خاموش کنید"
echo "------------------------"
echo "15. بلوک کشور مشخص شده IP 16. فقط IP های کشور مشخص مجاز هستند"
echo "17. محدودیت های IP را در کشورهای تعیین شده آزاد کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
read -e -p "لطفاً شماره پورت باز را وارد کنید:" o_port
open_port $o_port
send_stats "یک درگاه مشخص را باز کنید"
;;
2)
read -e -p "لطفاً شماره پورت بسته را وارد کنید:" c_port
close_port $c_port
send_stats "بندر مشخص شده را ببندید"
;;
3)
# همه بنادر را باز کنید
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport $current_port -j ACCEPT
iptables-save > /etc/iptables/rules.v4
send_stats "همه بنادر را باز کنید"
;;
4)
# همه بنادر را ببندید
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport $current_port -j ACCEPT
iptables-save > /etc/iptables/rules.v4
send_stats "همه بنادر را ببندید"
;;
5)
# وایتلیست
read -e -p "لطفاً بخش IP یا IP را وارد کنید تا منتشر شود:" o_ip
allow_ip $o_ip
;;
6)
# لیست سیاه IP
read -e -p "لطفاً بخش IP یا IP مسدود شده را وارد کنید:" c_ip
block_ip $c_ip
;;
7)
# IP مشخص شده را پاک کنید
read -e -p "لطفاً IP پاک شده را وارد کنید:" d_ip
iptables -D INPUT -s $d_ip -j ACCEPT 2>/dev/null
iptables -D INPUT -s $d_ip -j DROP 2>/dev/null
iptables-save > /etc/iptables/rules.v4
send_stats "IP مشخص شده را پاک کنید"
;;
11)
# به پینگ اجازه دهید
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables-save > /etc/iptables/rules.v4
send_stats "به پینگ اجازه دهید"
;;
12)
# پینگ را غیرفعال کنید
iptables -D INPUT -p icmp --icmp-type echo-request -j ACCEPT 2>/dev/null
iptables -D OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 2>/dev/null
iptables-save > /etc/iptables/rules.v4
send_stats "پینگ را غیرفعال کنید"
;;
13)
enable_ddos_defense
;;
14)
disable_ddos_defense
;;
15)
read -e -p "لطفاً کد کشور مسدود شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code
manage_country_rules block $country_code
send_stats "کشورهای مجاز$country_codeبا منبت کاری کردن"
;;
16)
read -e -p "لطفاً کد کشور مجاز (مانند CN ، ایالات متحده ، JP) را وارد کنید:" country_code
manage_country_rules allow $country_code
send_stats "کشور را مسدود کنید$country_codeبا منبت کاری کردن"
;;
17)
read -e -p "لطفاً کد کشور پاک شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code
manage_country_rules unblock $country_code
send_stats "کشور را پاک کنید$country_codeبا منبت کاری کردن"
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
add_swap() {
local new_swap=$1 # 获取传入的参数
# تمام پارتیشن های مبادله را در سیستم فعلی دریافت کنید
local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}')
# تمام پارتیشن های مبادله را تکرار کرده و حذف کنید
for partition in $swap_partitions; do
swapoff "$partition"
wipefs -a "$partition"
mkswap -f "$partition"
done
# اطمینان حاصل کنید که /Swapfile دیگر استفاده نمی شود
swapoff /swapfile
# قدیمی /swapfile را حذف کنید
rm -f /swapfile
# یک پارتیشن مبادله جدید ایجاد کنید
fallocate -l ${new_swap}M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sed -i '/\/swapfile/d' /etc/fstab
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
if [ -f /etc/alpine-release ]; then
echo "nohup swapon /swapfile" > /etc/local.d/swap.start
chmod +x /etc/local.d/swap.start
rc-update add local
fi
echo -e "اندازه حافظه مجازی تغییر یافته است${gl_huang}${new_swap}${gl_bai}M"
}
check_swap() {
local swap_total=$(free -m | awk 'NR==3{print $2}')
# تعیین کنید که آیا حافظه مجازی باید ایجاد شود
[ "$swap_total" -gt 0 ] || add_swap 1024
}
ldnmp_v() {
# نسخه nginx را دریافت کنید
local nginx_version=$(docker exec nginx nginx -v 2>&1)
local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+")
echo -n -e "nginx : ${gl_huang}v$nginx_version${gl_bai}"
# نسخه MySQL را دریافت کنید
local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
local mysql_version=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SELECT VERSION();" 2>/dev/null | tail -n 1)
echo -n -e " mysql : ${gl_huang}v$mysql_version${gl_bai}"
# نسخه PHP را دریافت کنید
local php_version=$(docker exec php php -v 2>/dev/null | grep -oP "PHP \K[0-9]+\.[0-9]+\.[0-9]+")
echo -n -e " php : ${gl_huang}v$php_version${gl_bai}"
# نسخه redis را دریافت کنید
local redis_version=$(docker exec redis redis-server -v 2>&1 | grep -oP "v=+\K[0-9]+\.[0-9]+")
echo -e " redis : ${gl_huang}v$redis_version${gl_bai}"
echo "------------------------"
echo ""
}
install_ldnmp_conf() {
# دایرکتوری ها و پرونده های لازم را ایجاد کنید
cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/redis web/log/nginx && touch web/docker-compose.yml
wget -O /home/web/nginx.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf
wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default10.conf
wget -O /home/web/redis/valkey.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/valkey.conf
default_server_ssl
# پرونده docker-compose.yml را بارگیری کنید و آن را جایگزین کنید
wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml
dbrootpasswd=$(openssl rand -base64 16) ; dbuse=$(openssl rand -hex 4) ; dbusepasswd=$(openssl rand -base64 8)
# در پرونده docker-compose.yml جایگزین کنید
sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml
sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml
sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml
}
install_ldnmp() {
check_swap
cp /home/web/docker-compose.yml /home/web/docker-compose1.yml
if ! grep -q "php-socket" /home/web/docker-compose.yml; then
wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml
dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')
dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')
dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]')
sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml
sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml
sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml
fi
if grep -q "kjlion/nginx:alpine" /home/web/docker-compose1.yml; then
sed -i 's|kjlion/nginx:alpine|nginx:alpine|g' /home/web/docker-compose.yml > /dev/null 2>&1
sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml > /dev/null 2>&1
fi
cd /home/web && docker compose up -d
sleep 1
crontab -l 2>/dev/null | grep -v 'logrotate' | crontab -
(crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab -
fix_phpfpm_conf php
fix_phpfpm_conf php74
restart_ldnmp
clear
echo "محیط LDNMP نصب شده است"
echo "------------------------"
ldnmp_v
}
install_certbot() {
cd ~
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/auto_cert_renewal.sh
chmod +x auto_cert_renewal.sh
check_crontab_installed
local cron_job="0 0 * * * ~/auto_cert_renewal.sh"
crontab -l 2>/dev/null | grep -vF "$cron_job" | crontab -
(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
echo "کار تمدید به روز شده است"
}
install_ssltls() {
docker stop nginx > /dev/null 2>&1
check_port > /dev/null 2>&1
cd ~
local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem"
if [ ! -f "$file_path" ]; then
local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$'
if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then
mkdir -p /etc/letsencrypt/live/$yuming/
if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
else
openssl genpkey -algorithm Ed25519 -out /etc/letsencrypt/live/$yuming/privkey.pem
openssl req -x509 -key /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
fi
else
docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa
fi
fi
mkdir -p /home/web/certs/
cp /etc/letsencrypt/live/$yuming/fullchain.pem /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1
cp /etc/letsencrypt/live/$yuming/privkey.pem /home/web/certs/${yuming}_key.pem > /dev/null 2>&1
docker start nginx > /dev/null 2>&1
}
install_ssltls_text() {
echo -e "${gl_huang}$yumingاطلاعات کلیدی عمومی${gl_bai}"
cat /etc/letsencrypt/live/$yuming/fullchain.pem
echo ""
echo -e "${gl_huang}$yumingاطلاعات کلید خصوصی${gl_bai}"
cat /etc/letsencrypt/live/$yuming/privkey.pem
echo ""
echo -e "${gl_huang}مسیر ذخیره گواهینامه${gl_bai}"
echo "کلید عمومی:/و غیره/letsencrypt/live/$yuming/fullchain.pem"
echo "کلید خصوصی:/و غیره/letsencrypt/live/$yuming/privkey.pem"
echo ""
}
add_ssl() {
yuming="${1:-}"
if [ -z "$yuming" ]; then
add_yuming
fi
install_docker
install_certbot
docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null
install_ssltls
certs_status
install_ssltls_text
ssl_ps
}
ssl_ps() {
echo -e "${gl_huang}انقضاء گواهی اعمال شده${gl_bai}"
echo "زمان انقضا گواهی اطلاعات سایت"
echo "------------------------"
for cert_dir in /etc/letsencrypt/live/*; do
local cert_file="$cert_dir/fullchain.pem"
if [ -f "$cert_file" ]; then
local domain=$(basename "$cert_dir")
local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}')
local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d')
printf "%-30s%s\n" "$domain" "$formatted_date"
fi
done
echo ""
}
default_server_ssl() {
install openssl
if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
else
openssl genpkey -algorithm Ed25519 -out /home/web/certs/default_server.key
openssl req -x509 -key /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"
fi
openssl rand -out /home/web/certs/ticket12.key 48
openssl rand -out /home/web/certs/ticket13.key 80
}
certs_status() {
sleep 1
local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem"
if [ -f "$file_path" ]; then
send_stats "برنامه موفق برای گواهی نام دامنه"
else
send_stats "درخواست گواهی نام دامنه انجام نشد"
echo -e "${gl_hong}توجه:${gl_bai}برنامه گواهینامه انجام نشد. لطفاً دلایل احتمالی زیر را بررسی کنید و دوباره امتحان کنید:"
echo -e "1. خطای املایی نام دامنه ➠ لطفا بررسی کنید که آیا نام دامنه به درستی وارد شده است"
echo -e "2. مشکل وضوح DNS ➠ تأیید کنید که نام دامنه به درستی در این IP سرور حل شده است"
echo -e "3. مشکلات پیکربندی شبکه ➠ اگر از CloudFlare Warp و سایر شبکه های مجازی استفاده می کنید ، لطفاً به طور موقت خاموش شوید"
echo -e "4. محدودیت های فایروال ➠ بررسی کنید که آیا پورت 80/443 برای اطمینان از تأیید صحت باز است"
echo -e "5. تعداد برنامه ها از حد مجاز فراتر می رود ➠ بیایید رمزگذاری کنیم دارای محدودیت هفتگی (5 بار/نام دامنه/هفته) است"
break_end
clear
echo "لطفا دوباره امتحان کنید$webname"
add_yuming
install_ssltls
certs_status
fi
}
repeat_add_yuming() {
if [ -e /home/web/conf.d/$yuming.conf ]; then
send_stats "استفاده مجدد از نام دامنه"
web_del "${yuming}" > /dev/null 2>&1
fi
}
add_yuming() {
ip_address
echo -e "ابتدا نام دامنه را به IP محلی حل کنید:${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
read -e -p "لطفاً IP یا نام دامنه حل شده خود را وارد کنید:" yuming
}
add_db() {
dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g')
dbname="${dbname}"
dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
docker exec mysql mysql -u root -p"$dbrootpasswd" -e "CREATE DATABASE $dbname; GRANT ALL PRIVILEGES ON $dbname.* TO \"$dbuse\"@\"%\";"
}
reverse_proxy() {
ip_address
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
sed -i "s/0.0.0.0/$ipv4_address/g" /home/web/conf.d/$yuming.conf
sed -i "s|0000|$duankou|g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec nginx nginx -s reload
}
restart_redis() {
rm -rf /home/web/redis/*
docker exec redis redis-cli FLUSHALL > /dev/null 2>&1
docker exec -it redis redis-cli CONFIG SET maxmemory 512mb > /dev/null 2>&1
docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /dev/null 2>&1
docker exec -it redis redis-cli CONFIG SET save "" > /dev/null 2>&1
docker exec -it redis redis-cli CONFIG SET appendonly no > /dev/null 2>&1
}
restart_ldnmp() {
restart_redis
docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1
docker exec nginx mkdir -p /var/cache/nginx/proxy > /dev/null 2>&1
docker exec nginx mkdir -p /var/cache/nginx/fastcgi > /dev/null 2>&1
docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy > /dev/null 2>&1
docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi > /dev/null 2>&1
docker exec php chown -R www-data:www-data /var/www/html > /dev/null 2>&1
docker exec php74 chown -R www-data:www-data /var/www/html > /dev/null 2>&1
cd /home/web && docker compose restart nginx php php74
}
nginx_upgrade() {
local ldnmp_pods="nginx"
cd /home/web/
docker rm -f $ldnmp_pods > /dev/null 2>&1
docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
docker images --filter=reference="${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
docker compose up -d --force-recreate $ldnmp_pods
crontab -l 2>/dev/null | grep -v 'logrotate' | crontab -
(crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab -
docker exec nginx chown -R nginx:nginx /var/www/html
docker exec nginx mkdir -p /var/cache/nginx/proxy
docker exec nginx mkdir -p /var/cache/nginx/fastcgi
docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy
docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi
docker restart $ldnmp_pods > /dev/null 2>&1
send_stats "تمدید کردن$ldnmp_pods"
echo "تمدید کردن${ldnmp_pods}پایان"
}
phpmyadmin_upgrade() {
local ldnmp_pods="phpmyadmin"
local local docker_port=8877
local dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
local dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
cd /home/web/
docker rm -f $ldnmp_pods > /dev/null 2>&1
docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
curl -sS -O https://raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml
docker compose -f docker-compose.phpmyadmin.yml up -d
clear
ip_address
check_docker_app_ip
echo "اطلاعات ورود به سیستم:"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo
send_stats "شروع کردن$ldnmp_pods"
}
cf_purge_cache() {
local CONFIG_FILE="/home/web/config/cf-purge-cache.txt"
local API_TOKEN
local EMAIL
local ZONE_IDS
# بررسی کنید که آیا پرونده پیکربندی وجود دارد
if [ -f "$CONFIG_FILE" ]; then
# از پرونده های پیکربندی api_token و Zone_id را بخوانید
read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE"
# تبدیل Zone_ids به یک آرایه
ZONE_IDS=($ZONE_IDS)
else
# کاربر را برای تمیز کردن حافظه نهان راهنمایی کنید
read -e -p "آیا نیاز به تمیز کردن حافظه پنهان Cloudflare دارید؟ (y/n):" answer
if [[ "$answer" == "y" ]]; then
echo "اطلاعات CF ذخیره می شود$CONFIG_FILE، بعداً می توانید اطلاعات CF را تغییر دهید"
read -e -p "لطفاً API_TOKEN خود را وارد کنید:" API_TOKEN
read -e -p "لطفا نام کاربری CF خود را وارد کنید:" EMAIL
read -e -p "لطفاً Zone_Id را وارد کنید (چند برابر با فضاها از هم جدا شده است):" -a ZONE_IDS
mkdir -p /home/web/config/
echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE"
fi
fi
# از طریق هر Zone_id حلقه کنید و دستور حافظه پنهان را اجرا کنید
for ZONE_ID in "${ZONE_IDS[@]}"; do
echo "پاک کردن حافظه پنهان برای Zone_ID:$ZONE_ID"
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
done
echo "درخواست Cache Clear ارسال شده است."
}
web_cache() {
send_stats "حافظه پنهان سایت را تمیز کنید"
cf_purge_cache
docker exec php php -r 'opcache_reset();'
docker exec php74 php -r 'opcache_reset();'
docker exec nginx nginx -s stop
docker exec nginx rm -rf /var/cache/nginx/*
docker exec nginx nginx
docker restart redis
restart_redis
}
web_del() {
send_stats "داده های سایت را حذف کنید"
yuming_list="${1:-}"
if [ -z "$yuming_list" ]; then
read -e -p "برای حذف داده های سایت ، لطفاً نام دامنه خود را وارد کنید (نام دامنه های چندگانه توسط فضاها از هم جدا می شوند):" yuming_list
if [[ -z "$yuming_list" ]]; then
return
fi
fi
for yuming in $yuming_list; do
echo "حذف نام دامنه:$yuming"
rm -r /home/web/html/$yuming > /dev/null 2>&1
rm /home/web/conf.d/$yuming.conf > /dev/null 2>&1
rm /home/web/certs/${yuming}_key.pem > /dev/null 2>&1
rm /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1
# نام دامنه را به نام پایگاه داده تبدیل کنید
dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g')
dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
# بررسی کنید که آیا پایگاه داده قبل از حذف آن وجود دارد تا از خطا جلوگیری شود
echo "حذف بانک اطلاعاتی:$dbname"
docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1
done
docker exec nginx nginx -s reload
}
nginx_waf() {
local mode=$1
if ! grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then
wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf"
fi
# تصمیم بگیرید WAF را با توجه به پارامتر حالت روشن یا خاموش کنید
if [ "$mode" == "on" ]; then
# WAF را روشن کنید: نظرات را حذف کنید
sed -i 's|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
sed -i 's|^\(\s*\)# modsecurity on;|\1modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1
sed -i 's|^\(\s*\)# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1
elif [ "$mode" == "off" ]; then
# بستن WAF: اضافه کردن نظرات
sed -i 's|^load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
sed -i 's|^\(\s*\)modsecurity on;|\1# modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1
sed -i 's|^\(\s*\)modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1
else
echo "پارامتر نامعتبر: از "ON" یا "خاموش" استفاده کنید"
return 1
fi
# تصاویر nginx را بررسی کنید و مطابق با وضعیت آنها را کنترل کنید
if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then
docker exec nginx nginx -s reload
else
sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml
nginx_upgrade
fi
}
check_waf_status() {
if grep -q "^\s*#\s*modsecurity on;" /home/web/nginx.conf; then
waf_status=""
elif grep -q "modsecurity on;" /home/web/nginx.conf; then
waf_status=" WAF已开启"
else
waf_status=""
fi
}
check_cf_mode() {
if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then
CFmessage=" cf模式已开启"
else
CFmessage=""
fi
}
nginx_http_on() {
local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$'
if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then
sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf
fi
}
check_docker_app() {
if docker inspect "$docker_name" &>/dev/null; then
check_docker="${gl_lv}已安装${gl_bai}"
else
check_docker="${gl_hui}未安装${gl_bai}"
fi
}
check_docker_app_ip() {
echo "------------------------"
echo "آدرس دسترسی:"
ip_address
if [ -n "$ipv4_address" ]; then
echo "http://$ipv4_address:${docker_port}"
fi
if [ -n "$ipv6_address" ]; then
echo "http://[$ipv6_address]:${docker_port}"
fi
local search_pattern="$ipv4_address:${docker_port}"
for file in /home/web/conf.d/*; do
if [ -f "$file" ]; then
if grep -q "$search_pattern" "$file" 2>/dev/null; then
echo "https://$(basename "$file" | sed 's/\.conf$//')"
fi
fi
done
}
check_docker_image_update() {
local container_name=$1
local country=$(curl -s ipinfo.io/country)
if [[ "$country" == "CN" ]]; then
update_status=""
return
fi
# زمان و نام تصویر ایجاد کانتینر را دریافت کنید
local container_info=$(docker inspect --format='{{.Created}},{{.Config.Image}}' "$container_name" 2>/dev/null)
local container_created=$(echo "$container_info" | cut -d',' -f1)
local image_name=$(echo "$container_info" | cut -d',' -f2)
# انبارهای آینه و برچسب ها را استخراج کنید
local image_repo=${image_name%%:*}
local image_tag=${image_name##*:}
# برچسب پیش فرض آخرین است
[[ "$image_repo" == "$image_tag" ]] && image_tag="latest"
# پشتیبانی از تصاویر رسمی را اضافه کنید
[[ "$image_repo" != */* ]] && image_repo="library/$image_repo"
# زمان انتشار تصویر را از Docker Hub API دریافت کنید
local hub_info=$(curl -s "https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag")
local last_updated=$(echo "$hub_info" | jq -r '.last_updated' 2>/dev/null)
# زمان کسب را تأیید کنید
if [[ -n "$last_updated" && "$last_updated" != "null" ]]; then
local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null)
local last_updated_ts=$(date -d "$last_updated" +%s 2>/dev/null)
# مقایسه های زمانی را مقایسه کنید
if [[ $container_created_ts -lt $last_updated_ts ]]; then
update_status="${gl_huang}发现新版本!${gl_bai}"
else
update_status=""
fi
else
update_status=""
fi
}
block_container_port() {
local container_name_or_id=$1
local allowed_ip=$2
# آدرس IP ظرف را دریافت کنید
local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id")
if [ -z "$container_ip" ]; then
echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است."
return 1
fi
install iptables
# همه IP های دیگر را بررسی و مسدود کنید
if ! iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then
iptables -I DOCKER-USER -p tcp -d "$container_ip" -j DROP
fi
# IP مشخص شده را بررسی و آزاد کنید
if ! iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
fi
# شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید
if ! iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -I DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
fi
# همه IP های دیگر را بررسی و مسدود کنید
if ! iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then
iptables -I DOCKER-USER -p udp -d "$container_ip" -j DROP
fi
# IP مشخص شده را بررسی و آزاد کنید
if ! iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
fi
# شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید
if ! iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -I DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
fi
if ! iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -I DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT
fi
echo "درگاه های IP از دسترسی به سرویس مسدود شده اند"
save_iptables_rules
}
clear_container_rules() {
local container_name_or_id=$1
local allowed_ip=$2
# آدرس IP ظرف را دریافت کنید
local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id")
if [ -z "$container_ip" ]; then
echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است."
return 1
fi
install iptables
# قوانین روشن که همه IP های دیگر را مسدود می کند
if iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then
iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP
fi
# قوانین انتشار IP مشخص شده را پاک کنید
if iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -D DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
fi
# قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید
if iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -D DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
fi
# قوانین روشن که همه IP های دیگر را مسدود می کند
if iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then
iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP
fi
# قوانین انتشار IP مشخص شده را پاک کنید
if iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT
fi
# قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید
if iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -D DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT
fi
if iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then
iptables -D DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT
fi
echo "درگاه های IP+مجاز به دسترسی به سرویس هستند"
save_iptables_rules
}
block_host_port() {
local port=$1
local allowed_ip=$2
if [[ -z "$port" || -z "$allowed_ip" ]]; then
echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید."
echo "استفاده: block_host_port <شماره پورت> <مجاز IP>"
return 1
fi
install iptables
# دسترسی به IP دیگر را رد کرد
if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then
iptables -I INPUT -p tcp --dport "$port" -j DROP
fi
# دسترسی به IP مشخص شده
if ! iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
iptables -I INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT
fi
# دسترسی به محلی
if ! iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
iptables -I INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
fi
# دسترسی به IP دیگر را رد کرد
if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then
iptables -I INPUT -p udp --dport "$port" -j DROP
fi
# دسترسی به IP مشخص شده
if ! iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
iptables -I INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT
fi
# دسترسی به محلی
if ! iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
iptables -I INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
fi
# اجازه ترافیک برای اتصالات ایجاد شده و مرتبط را داشته باشید
if ! iptables -C INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &>/dev/null; then
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
fi
echo "درگاه های IP از دسترسی به سرویس مسدود شده اند"
save_iptables_rules
}
clear_host_port_rules() {
local port=$1
local allowed_ip=$2
if [[ -z "$port" || -z "$allowed_ip" ]]; then
echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید."
echo "استفاده: clear_host_port_rules <شماره پورت> <مجاز IP>"
return 1
fi
install iptables
# قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند
if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then
iptables -D INPUT -p tcp --dport "$port" -j DROP
fi
# قوانین روشن که امکان دسترسی بومی را فراهم می کند
if iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
iptables -D INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
fi
# قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند
if iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
iptables -D INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT
fi
# قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند
if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then
iptables -D INPUT -p udp --dport "$port" -j DROP
fi
# قوانین روشن که امکان دسترسی بومی را فراهم می کند
if iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then
iptables -D INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT
fi
# قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند
if iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then
iptables -D INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT
fi
echo "درگاه های IP+مجاز به دسترسی به سرویس هستند"
save_iptables_rules
}
docker_app() {
send_stats "${docker_name}مدیریت کردن"
while true; do
clear
check_docker_app
check_docker_image_update $docker_name
echo -e "$docker_name $check_docker $update_status"
echo "$docker_describe"
echo "$docker_url"
if docker inspect "$docker_name" &>/dev/null; then
local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}')
docker_port=${docker_port:-0000}
check_docker_app_ip
fi
echo ""
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "------------------------"
echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1)
check_disk_space $app_size
read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port
local app_port=${app_port:-${docker_port}}
local docker_port=$app_port
install jq
install_docker
docker_rum
clear
echo "$docker_nameنصب شده"
check_docker_app_ip
echo ""
$docker_use
$docker_passwd
send_stats "نصب کردن$docker_name"
;;
2)
docker rm -f "$docker_name"
docker rmi -f "$docker_img"
docker_rum
clear
echo "$docker_nameنصب شده"
check_docker_app_ip
echo ""
$docker_use
$docker_passwd
send_stats "تمدید کردن$docker_name"
;;
3)
docker rm -f "$docker_name"
docker rmi -f "$docker_img"
rm -rf "/home/docker/$docker_name"
echo "برنامه حذف شده است"
send_stats "حذف کردن$docker_name"
;;
5)
echo "${docker_name}تنظیمات دسترسی دامنه"
send_stats "${docker_name}تنظیمات دسترسی دامنه"
add_yuming
ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
block_container_port "$docker_name" "$ipv4_address"
;;
6)
echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
web_del
;;
7)
send_stats "دسترسی به IP${docker_name}"
clear_container_rules "$docker_name" "$ipv4_address"
;;
8)
send_stats "دسترسی به IP${docker_name}"
block_container_port "$docker_name" "$ipv4_address"
;;
*)
break
;;
esac
break_end
done
}
docker_app_plus() {
send_stats "$app_name"
while true; do
clear
check_docker_app
check_docker_image_update $docker_name
echo -e "$app_name $check_docker $update_status"
echo "$app_text"
echo "$app_url"
if docker inspect "$docker_name" &>/dev/null; then
local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}')
docker_port=${docker_port:-0000}
check_docker_app_ip
fi
echo ""
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "------------------------"
echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
check_disk_space $app_size
read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port
local app_port=${app_port:-${docker_port}}
local docker_port=$app_port
install jq
install_docker
docker_app_install
;;
2)
docker_app_update
;;
3)
docker_app_uninstall
;;
5)
echo "${docker_name}تنظیمات دسترسی دامنه"
send_stats "${docker_name}تنظیمات دسترسی دامنه"
add_yuming
ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
block_container_port "$docker_name" "$ipv4_address"
;;
6)
echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
web_del
;;
7)
send_stats "دسترسی به IP${docker_name}"
clear_container_rules "$docker_name" "$ipv4_address"
;;
8)
send_stats "دسترسی به IP${docker_name}"
block_container_port "$docker_name" "$ipv4_address"
;;
*)
break
;;
esac
break_end
done
}
prometheus_install() {
local PROMETHEUS_DIR="/home/docker/monitoring/prometheus"
local GRAFANA_DIR="/home/docker/monitoring/grafana"
local NETWORK_NAME="monitoring"
# Create necessary directories
mkdir -p $PROMETHEUS_DIR
mkdir -p $GRAFANA_DIR
# Set correct ownership for Grafana directory
chown -R 472:472 $GRAFANA_DIR
if [ ! -f "$PROMETHEUS_DIR/prometheus.yml" ]; then
curl -o "$PROMETHEUS_DIR/prometheus.yml" ${gh_proxy}raw.githubusercontent.com/kejilion/config/refs/heads/main/prometheus/prometheus.yml
fi
# Create Docker network for monitoring
docker network create $NETWORK_NAME
# Run Node Exporter container
docker run -d \
--name=node-exporter \
--network $NETWORK_NAME \
--restart unless-stopped \
prom/node-exporter
# Run Prometheus container
docker run -d \
--name prometheus \
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
-v $PROMETHEUS_DIR/data:/prometheus \
--network $NETWORK_NAME \
--restart unless-stopped \
--user 0:0 \
prom/prometheus:latest
# Run Grafana container
docker run -d \
--name grafana \
-p ${docker_port}:3000 \
-v $GRAFANA_DIR:/var/lib/grafana \
--network $NETWORK_NAME \
--restart unless-stopped \
grafana/grafana:latest
}
tmux_run() {
# Check if the session already exists
tmux has-session -t $SESSION_NAME 2>/dev/null
# $? is a special variable that holds the exit status of the last executed command
if [ $? != 0 ]; then
# Session doesn't exist, create a new one
tmux new -s $SESSION_NAME
else
# Session exists, attach to it
tmux attach-session -t $SESSION_NAME
fi
}
tmux_run_d() {
local base_name="tmuxd"
local tmuxd_ID=1
# توابعی که بررسی می کنند جلسه وجود دارد
session_exists() {
tmux has-session -t $1 2>/dev/null
}
# حلقه تا زمانی که نام جلسه غیر موجود پیدا شود
while session_exists "$base_name-$tmuxd_ID"; do
local tmuxd_ID=$((tmuxd_ID + 1))
done
# یک جلسه TMUX جدید ایجاد کنید
tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd"
}
f2b_status() {
docker exec -it fail2ban fail2ban-client reload
sleep 3
docker exec -it fail2ban fail2ban-client status
}
f2b_status_xxx() {
docker exec -it fail2ban fail2ban-client status $xxx
}
f2b_install_sshd() {
docker run -d \
--name=fail2ban \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=NET_RAW \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e VERBOSITY=-vv \
-v /path/to/fail2ban/config:/config \
-v /var/log:/var/log:ro \
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
--restart unless-stopped \
lscr.io/linuxserver/fail2ban:latest
sleep 3
if grep -q 'Alpine' /etc/issue; then
cd /path/to/fail2ban/config/fail2ban/filter.d
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd.conf
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf
cd /path/to/fail2ban/config/fail2ban/jail.d/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-ssh.conf
elif command -v dnf &>/dev/null; then
cd /path/to/fail2ban/config/fail2ban/jail.d/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf
else
install rsyslog
systemctl start rsyslog
systemctl enable rsyslog
cd /path/to/fail2ban/config/fail2ban/jail.d/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/linux-ssh.conf
systemctl restart rsyslog
fi
}
f2b_sshd() {
if grep -q 'Alpine' /etc/issue; then
xxx=alpine-sshd
f2b_status_xxx
elif command -v dnf &>/dev/null; then
xxx=centos-sshd
f2b_status_xxx
else
xxx=linux-sshd
f2b_status_xxx
fi
}
server_reboot() {
read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot
case "$rboot" in
[Yy])
echo "مجدداً"
reboot
;;
*)
echo "لغو شده"
;;
esac
}
output_status() {
output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 }
# مطابقت با نام کارتهای شبکه عمومی عمومی: ETH*، ENS*، ENP*، ENO*
$1 ~ /^(eth|ens|enp|eno)[0-9]+/ {
rx_total += $2
tx_total += $10
}
END {
rx_units = "Bytes";
tx_units = "Bytes";
if (rx_total > 1024) { rx_total /= 1024; rx_units = "K"; }
if (rx_total > 1024) { rx_total /= 1024; rx_units = "M"; }
if (rx_total > 1024) { rx_total /= 1024; rx_units = "G"; }
if (tx_total > 1024) { tx_total /= 1024; tx_units = "K"; }
if (tx_total > 1024) { tx_total /= 1024; tx_units = "M"; }
if (tx_total > 1024) { tx_total /= 1024; tx_units = "G"; }
printf("总接收: %.2f%s\n总发送: %.2f%s\n", rx_total, rx_units, tx_total, tx_units);
}' /proc/net/dev)
# echo "$output"
}
ldnmp_install_status_one() {
if docker inspect "php" &>/dev/null; then
clear
send_stats "دوباره نصب محیط LDNMP امکان پذیر نیست"
echo -e "${gl_huang}نکته:${gl_bai}محیط ساخت وب سایت نصب شده است. نیازی به نصب مجدد نیست!"
break_end
linux_ldnmp
fi
}
ldnmp_install_all() {
cd ~
send_stats "محیط LDNMP را نصب کنید"
root_use
clear
echo -e "${gl_huang}محیط LDNMP نصب نشده است ، شروع به نصب محیط LDNMP ...${gl_bai}"
check_disk_space 3
check_port
install_dependency
install_docker
install_certbot
install_ldnmp_conf
install_ldnmp
}
nginx_install_all() {
cd ~
send_stats "محیط nginx را نصب کنید"
root_use
clear
echo -e "${gl_huang}nginx نصب نشده است ، شروع به نصب محیط nginx ...${gl_bai}"
check_disk_space 1
check_port
install_dependency
install_docker
install_certbot
install_ldnmp_conf
nginx_upgrade
clear
local nginx_version=$(docker exec nginx nginx -v 2>&1)
local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+")
echo "nginx نصب شده است"
echo -e "نسخه فعلی:${gl_huang}v$nginx_version${gl_bai}"
echo ""
}
ldnmp_install_status() {
if ! docker inspect "php" &>/dev/null; then
send_stats "لطفاً ابتدا محیط LDNMP را نصب کنید"
ldnmp_install_all
fi
}
nginx_install_status() {
if ! docker inspect "nginx" &>/dev/null; then
send_stats "لطفاً ابتدا محیط nginx را نصب کنید"
nginx_install_all
fi
}
ldnmp_web_on() {
clear
echo "مال شما$webnameساخته شده!"
echo "https://$yuming"
echo "------------------------"
echo "$webnameاطلاعات نصب به شرح زیر است:"
}
nginx_web_on() {
clear
echo "مال شما$webnameساخته شده!"
echo "https://$yuming"
}
ldnmp_wp() {
clear
# wordpress
webname="WordPress"
yuming="${1:-}"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
if [ -z "$yuming" ]; then
add_yuming
fi
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/wordpress.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-latest.zip
# wget -O latest.zip https://cn.wordpress.org/latest-zh_CN.zip
# wget -O latest.zip https://wordpress.org/latest.zip
unzip latest.zip
rm latest.zip
echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379');" >> /home/web/html/$yuming/wordpress/wp-config-sample.php
sed -i "s|database_name_here|$dbname|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
sed -i "s|username_here|$dbuse|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
sed -i "s|password_here|$dbusepasswd|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
sed -i "s|localhost|mysql|g" /home/web/html/$yuming/wordpress/wp-config-sample.php
cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php
restart_ldnmp
nginx_web_on
# echo "نام پایگاه داده: $ dbname"
# اکو "نام کاربری: $ dbuse"
# ECHO "رمز عبور: $ dbusepasswd"
# ECHO "آدرس پایگاه داده: MySQL"
# ECHO "پیشوند جدول: WP_"
}
ldnmp_Proxy() {
clear
webname="反向代理-IP+端口"
yuming="${1:-}"
reverseproxy="${2:-}"
port="${3:-}"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
if [ -z "$yuming" ]; then
add_yuming
fi
if [ -z "$reverseproxy" ]; then
read -e -p "لطفاً IP ضد نسل خود را وارد کنید:" reverseproxy
fi
if [ -z "$port" ]; then
read -e -p "لطفاً درگاه ضد نسل خود را وارد کنید:" port
fi
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
sed -i "s/0.0.0.0/$reverseproxy/g" /home/web/conf.d/$yuming.conf
sed -i "s|0000|$port|g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec nginx nginx -s reload
nginx_web_on
}
ldnmp_Proxy_backend() {
clear
webname="反向代理-负载均衡"
yuming="${1:-}"
reverseproxy_port="${2:-}"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
if [ -z "$yuming" ]; then
add_yuming
fi
# دریافت چندین IP توسط کاربر: پورت ها (جدا شده توسط فضاها)
if [ -z "$reverseproxy_port" ]; then
read -e -p "لطفاً چندین پورت IP+ ضد نسل خود را که توسط فضاها از هم جدا شده اند وارد کنید (به عنوان مثال ، 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port
fi
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf
backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8)
sed -i "s/backend_yuming_com/backend_$backend/g" /home/web/conf.d/"$yuming".conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
# به صورت پویا پیکربندی بالادست تولید می کند
upstream_servers=""
for server in $reverseproxy_port; do
upstream_servers="$upstream_servers server $server;\n"
done
# متغیرها را در قالب ها جایگزین کنید
sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec nginx nginx -s reload
nginx_web_on
}
ldnmp_web_status() {
root_use
while true; do
local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l)
local output="站点: ${gl_lv}${cert_count}${gl_bai}"
local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l)
local db_output="数据库: ${gl_lv}${db_count}${gl_bai}"
clear
send_stats "مدیریت سایت LDNMP"
echo "محیط LDNMP"
echo "------------------------"
ldnmp_v
# ls -t /home/web/conf.d | sed 's/\.[^.]*$//'
echo -e "${output}زمان انقضا گواهی"
echo -e "------------------------"
for cert_file in /home/web/certs/*_cert.pem; do
local domain=$(basename "$cert_file" | sed 's/_cert.pem//')
if [ -n "$domain" ]; then
local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}')
local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d')
printf "%-30s%s\n" "$domain" "$formatted_date"
fi
done
echo "------------------------"
echo ""
echo -e "${db_output}"
echo -e "------------------------"
local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys"
echo "------------------------"
echo ""
echo "فهرست سایت"
echo "------------------------"
echo -e "داده${gl_hui}/home/web/html${gl_bai}گواهی${gl_hui}/home/web/certs${gl_bai}پیکربندی${gl_hui}/home/web/conf.d${gl_bai}"
echo "------------------------"
echo ""
echo "عمل کردن"
echo "------------------------"
echo "1. درخواست/به روزرسانی گواهی نام دامنه 2. نام دامنه سایت را تغییر دهید"
echo "3. حافظه پنهان سایت را تمیز کنید. یک سایت مرتبط ایجاد کنید"
echo "5. مشاهده ورود به سیستم دسترسی 6. مشاهده خطای خطای"
echo "7. ویرایش پیکربندی جهانی 8. پیکربندی سایت را ویرایش کنید"
echo "9. مدیریت پایگاه داده سایت 10. مشاهده گزارش تجزیه و تحلیل سایت"
echo "------------------------"
echo "20. داده های سایت مشخص شده را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "برای گواهی نام دامنه اقدام کنید"
read -e -p "لطفاً نام دامنه خود را وارد کنید:" yuming
install_certbot
docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null
install_ssltls
certs_status
;;
2)
send_stats "نام دامنه سایت را تغییر دهید"
echo -e "${gl_hong}بسیار توصیه می شود:${gl_bai}ابتدا از کل داده های سایت نسخه پشتیبان تهیه کرده و سپس نام دامنه سایت را تغییر دهید!"
read -e -p "لطفاً نام دامنه قدیمی را وارد کنید:" oddyuming
read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming
install_certbot
install_ssltls
certs_status
# جایگزینی mysql
add_db
local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g')
local odd_dbname="${odd_dbname}"
docker exec mysql mysqldump -u root -p"$dbrootpasswd" $odd_dbname | docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname
docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE $odd_dbname;"
local tables=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW TABLES;" | awk '{ if (NR>1) print $1 }')
for table in $tables; do
columns=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW COLUMNS FROM $table;" | awk '{ if (NR>1) print $1 }')
for column in $columns; do
docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "UPDATE $table SET $column = REPLACE($column, '$oddyuming', '$yuming') WHERE $column LIKE '%$oddyuming%';"
done
done
# جایگزینی فهرست وب سایت
mv /home/web/html/$oddyuming /home/web/html/$yuming
find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} +
find /home/web/html/$yuming -type f -exec sed -i "s/$oddyuming/$yuming/g" {} +
mv /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf
sed -i "s/$oddyuming/$yuming/g" /home/web/conf.d/$yuming.conf
rm /home/web/certs/${oddyuming}_key.pem
rm /home/web/certs/${oddyuming}_cert.pem
docker exec nginx nginx -s reload
;;
3)
web_cache
;;
4)
send_stats "یک سایت مرتبط ایجاد کنید"
echo -e "نام دامنه جدیدی را برای سایت موجود برای دسترسی مرتبط کنید"
read -e -p "لطفاً نام دامنه موجود را وارد کنید:" oddyuming
read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming
install_certbot
install_ssltls
certs_status
cp /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf
sed -i "s|server_name $oddyuming|server_name $yuming|g" /home/web/conf.d/$yuming.conf
sed -i "s|/etc/nginx/certs/${oddyuming}_cert.pem|/etc/nginx/certs/${yuming}_cert.pem|g" /home/web/conf.d/$yuming.conf
sed -i "s|/etc/nginx/certs/${oddyuming}_key.pem|/etc/nginx/certs/${yuming}_key.pem|g" /home/web/conf.d/$yuming.conf
docker exec nginx nginx -s reload
;;
5)
send_stats "مشاهده ورود به سیستم دسترسی"
tail -n 200 /home/web/log/nginx/access.log
break_end
;;
6)
send_stats "مشاهده خطای مشاهده"
tail -n 200 /home/web/log/nginx/error.log
break_end
;;
7)
send_stats "پیکربندی جهانی را ویرایش کنید"
install nano
nano /home/web/nginx.conf
docker exec nginx nginx -s reload
;;
8)
send_stats "پیکربندی سایت را ویرایش کنید"
read -e -p "برای ویرایش پیکربندی سایت ، لطفاً نام دامنه مورد نظر برای ویرایش را وارد کنید:" yuming
install nano
nano /home/web/conf.d/$yuming.conf
docker exec nginx nginx -s reload
;;
9)
phpmyadmin_upgrade
break_end
;;
10)
send_stats "مشاهده داده های سایت"
install goaccess
goaccess --log-format=COMBINED /home/web/log/nginx/access.log
;;
20)
web_del
docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
check_panel_app() {
if $lujing ; then
check_panel="${gl_lv}已安装${gl_bai}"
else
check_panel=""
fi
}
install_panel() {
send_stats "${panelname}مدیریت کردن"
while true; do
clear
check_panel_app
echo -e "$panelname $check_panel"
echo "${panelname}امروزه این یک هیئت مدیره عملیاتی و مدیریت نگهداری محبوب و قدرتمند است."
echo "معرفی رسمی وب سایت:$panelurl "
echo ""
echo "------------------------"
echo "1. نصب 2. مدیریت 3. حذف نصب کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1)
check_disk_space 1
install wget
iptables_open
panel_app_install
send_stats "${panelname}نصب کردن"
;;
2)
panel_app_manage
send_stats "${panelname}کنترل کردن"
;;
3)
panel_app_uninstall
send_stats "${panelname}حذف کردن"
;;
*)
break
;;
esac
break_end
done
}
check_frp_app() {
if [ -d "/home/frp/" ]; then
check_frp="${gl_lv}已安装${gl_bai}"
else
check_frp="${gl_hui}未安装${gl_bai}"
fi
}
donlond_frp() {
mkdir -p /home/frp/ && cd /home/frp/
rm -rf /home/frp/frp_0.61.0_linux_amd64
arch=$(uname -m)
frp_v=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep -oP '"tag_name": "v\K.*?(?=")')
if [[ "$arch" == "x86_64" ]]; then
curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_amd64.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz
elif [[ "$arch" == "armv7l" || "$arch" == "aarch64" ]]; then
curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_arm.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz
else
echo "معماری CPU فعلی پشتیبانی نمی شود:$arch"
fi
# آخرین پرونده FRP بارگیری شده را پیدا کنید
latest_file=$(ls -t /home/frp/frp_*.tar.gz | head -n 1)
# پرونده را از حالت فشرده خارج کنید
tar -zxvf "$latest_file"
# نام پوشه فشرده شده را دریافت کنید
dir_name=$(tar -tzf "$latest_file" | head -n 1 | cut -f 1 -d '/')
# پوشه را به نام نسخه یکپارچه تغییر نام دهید
mv "$dir_name" "frp_0.61.0_linux_amd64"
}
generate_frps_config() {
send_stats "سرور FRP را نصب کنید"
# درگاه ها و اعتبارنامه های تصادفی تولید کنید
local bind_port=8055
local dashboard_port=8056
local token=$(openssl rand -hex 16)
local dashboard_user="user_$(openssl rand -hex 4)"
local dashboard_pwd=$(openssl rand -hex 8)
donlond_frp
# یک فایل frps.toml ایجاد کنید
cat <<EOF > /home/frp/frp_0.61.0_linux_amd64/frps.toml
[common]
bind_port = $bind_port
authentication_method = token
token = $token
dashboard_port = $dashboard_port
dashboard_user = $dashboard_user
dashboard_pwd = $dashboard_pwd
EOF
# اطلاعات تولید شده
ip_address
echo "------------------------"
echo "پارامترهای مورد نیاز برای استقرار مشتری"
echo "سرویس IP:$ipv4_address"
echo "token: $token"
echo
echo "اطلاعات پانل FRP"
echo "آدرس پنل FRP: http: //$ipv4_address:$dashboard_port"
echo "نام کاربری پنل FRP:$dashboard_user"
echo "رمز عبور پنل FRP:$dashboard_pwd"
echo
echo "------------------------"
install tmux
tmux kill-session -t frps >/dev/null 2>&1
tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"
check_crontab_installed
crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
(crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1
open_port 8055 8056
}
configure_frpc() {
send_stats "مشتری FRP را نصب کنید"
read -e -p "لطفاً IP Docking Network External را وارد کنید:" server_addr
read -e -p "لطفاً توکن docking شبکه خارجی را وارد کنید:" token
echo
if command -v opkg >/dev/null 2>&1; then
opkg update
opkg install grep
fi
donlond_frp
cat <<EOF > /home/frp/frp_0.61.0_linux_amd64/frpc.toml
[common]
server_addr = ${server_addr}
server_port = 8055
token = ${token}
EOF
install tmux
tmux kill-session -t frpc >/dev/null 2>&1
tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
check_crontab_installed
crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
(crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1
open_port 8055
}
add_forwarding_service() {
send_stats "سرویس Intranet FRP را اضافه کنید"
# کاربر را وادار به وارد کردن نام سرویس و اطلاعات ارسال کنید
read -e -p "لطفاً نام سرویس را وارد کنید:" service_name
read -e -p "لطفاً نوع حمل و نقل (TCP/UDP) را وارد کنید [TCP پیش فرض] را وارد کنید:" service_type
local service_type=${service_type:-tcp}
read -e -p "لطفاً IP Intranet را وارد کنید [پیش فرض 127.0.0.1 را وارد کنید]:" local_ip
local local_ip=${local_ip:-127.0.0.1}
read -e -p "لطفاً درگاه اینترانت را وارد کنید:" local_port
read -e -p "لطفاً درگاه شبکه خارجی را وارد کنید:" remote_port
# ورودی کاربر را به پرونده پیکربندی بنویسید
cat <<EOF >> /home/frp/frp_0.61.0_linux_amd64/frpc.toml
[$service_name]
type = ${service_type}
local_ip = ${local_ip}
local_port = ${local_port}
remote_port = ${remote_port}
EOF
# اطلاعات تولید شده
echo "خدمت کردن$service_nameبا موفقیت به frpc.toml اضافه شد"
tmux kill-session -t frpc >/dev/null 2>&1
tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
open_port $local_port
}
delete_forwarding_service() {
send_stats "سرویس Intranet FRP را حذف کنید"
# کاربر را وادار به وارد کردن نام خدماتی که باید حذف شود
read -e -p "لطفاً نام خدماتی را که باید حذف شود وارد کنید:" service_name
# برای حذف سرویس و تنظیمات مربوط به آن از SED استفاده کنید
sed -i "/\[$service_name\]/,/^$/d" /home/frp/frp_0.61.0_linux_amd64/frpc.toml
echo "خدمت کردن$service_nameبا موفقیت از frpc.toml حذف شد"
tmux kill-session -t frpc >/dev/null 2>&1
tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
}
list_forwarding_services() {
local config_file="$1"
# هدر را چاپ کنید
printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议"
awk '
BEGIN {
server_addr=""
server_port=""
current_service=""
}
/^server_addr = / {
gsub(/"|'"'"'/, "", $3)
server_addr=$3
}
/^server_port = / {
gsub(/"|'"'"'/, "", $3)
server_port=$3
}
/^\[.*\]/ {
# اگر اطلاعات سرویس وجود دارد ، قبل از پردازش سرویس جدید ، سرویس فعلی را چاپ کنید
if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") {
printf "%-16s %-21s %-26s %-10s\n", \
current_service, \
local_ip ":" local_port, \
server_addr ":" remote_port, \
type
}
# نام سرویس فعلی را به روز کنید
if ($1 != "[common]") {
gsub(/[\[\]]/, "", $1)
current_service=$1
# مقدار قبلی را پاک کنید
local_ip=""
local_port=""
remote_port=""
type=""
}
}
/^local_ip = / {
gsub(/"|'"'"'/, "", $3)
local_ip=$3
}
/^local_port = / {
gsub(/"|'"'"'/, "", $3)
local_port=$3
}
/^remote_port = / {
gsub(/"|'"'"'/, "", $3)
remote_port=$3
}
/^type = / {
gsub(/"|'"'"'/, "", $3)
type=$3
}
END {
# اطلاعات را برای آخرین سرویس چاپ کنید
if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") {
printf "%-16s %-21s %-26s %-10s\n", \
current_service, \
local_ip ":" local_port, \
server_addr ":" remote_port, \
type
}
}' "$config_file"
}
# درگاه سرور FRP را دریافت کنید
get_frp_ports() {
mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u)
}
# ایجاد آدرس دسترسی
generate_access_urls() {
# ابتدا همه درگاه ها را دریافت کنید
get_frp_ports
# بررسی کنید که آیا پورت هایی غیر از 8055/8056 وجود دارد؟
local has_valid_ports=false
for port in "${ports[@]}"; do
if [[ $port != "8055" && $port != "8056" ]]; then
has_valid_ports=true
break
fi
done
# عنوان و محتوا را فقط در صورت وجود درگاه معتبر نشان دهید
if [ "$has_valid_ports" = true ]; then
echo "آدرس دسترسی خارجی خدمات FRP:"
# پردازش آدرس IPv4
for port in "${ports[@]}"; do
if [[ $port != "8055" && $port != "8056" ]]; then
echo "http://${ipv4_address}:${port}"
fi
done
# پردازش آدرس های IPv6 (در صورت وجود)
if [ -n "$ipv6_address" ]; then
for port in "${ports[@]}"; do
if [[ $port != "8055" && $port != "8056" ]]; then
echo "http://[${ipv6_address}]:${port}"
fi
done
fi
# رسیدگی به پیکربندی HTTPS
for port in "${ports[@]}"; do
if [[ $port != "8055" && $port != "8056" ]]; then
frps_search_pattern="${ipv4_address}:${port}"
for file in /home/web/conf.d/*.conf; do
if [ -f "$file" ]; then
if grep -q "$frps_search_pattern" "$file" 2>/dev/null; then
echo "https://$(basename "$file" .conf)"
fi
fi
done
fi
done
fi
}
frps_main_ports() {
ip_address
generate_access_urls
}
frps_panel() {
send_stats "سرور FRP"
local docker_port=8056
while true; do
clear
check_frp_app
echo -e "سرور FRP$check_frp"
echo "برای افشای دستگاه ها بدون IP عمومی در اینترنت ، یک محیط سرویس نفوذ Intranet FRP ایجاد کنید"
echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/"
echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=124.0"
if [ -d "/home/frp/" ]; then
check_docker_app_ip
frps_main_ports
fi
echo ""
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "------------------------"
echo "5. دسترسی به نام دامنه برای سرویس Intranet 6. دسترسی به نام دامنه را حذف کنید"
echo "------------------------"
echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
echo "------------------------"
echo "00. وضعیت خدمات را تازه کنید. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
generate_frps_config
rm -rf /home/frp/*.tar.gz
echo "سرور FRP نصب شده است"
;;
2)
cp -f /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml
donlond_frp
cp -f /home/frp/frps.toml /home/frp/frp_0.61.0_linux_amd64/frps.toml
tmux kill-session -t frps >/dev/null 2>&1
tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"
crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
(crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1
rm -rf /home/frp/*.tar.gz
echo "سرور FRP به روز شده است"
;;
3)
crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1
tmux kill-session -t frps >/dev/null 2>&1
rm -rf /home/frp
close_port 8055 8056
echo "برنامه حذف شده است"
;;
5)
echo "سرویس نفوذ اینترانت معکوس در دسترسی به نام دامنه"
send_stats "دسترسی FRP به نام دامنه خارجی"
add_yuming
read -e -p "لطفاً درگاه سرویس نفوذ Intranet خود را وارد کنید:" frps_port
ldnmp_Proxy ${yuming} ${ipv4_address} ${frps_port}
block_host_port "$frps_port" "$ipv4_address"
;;
6)
echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
web_del
;;
7)
send_stats "دسترسی به IP"
read -e -p "لطفاً برای انتشار درگاه را وارد کنید:" frps_port
clear_host_port_rules "$frps_port" "$ipv4_address"
;;
8)
send_stats "دسترسی به IP"
echo "اگر به نام دامنه ضد نسل دسترسی پیدا کرده اید ، می توانید از این عملکرد برای مسدود کردن دسترسی به پورت IP+ استفاده کنید ، که امنیت بیشتری دارد."
read -e -p "لطفاً درگاه مورد نیاز خود را وارد کنید:" frps_port
block_host_port "$frps_port" "$ipv4_address"
;;
00)
send_stats "وضعیت سرویس FRP را تازه کنید"
echo "وضعیت خدمات FRP تازه شده است"
;;
*)
break
;;
esac
break_end
done
}
frpc_panel() {
send_stats "مشتری FRP"
local docker_port=8055
while true; do
clear
check_frp_app
echo -e "مشتری FRP$check_frp"
echo "با اتصال به سرور ، پس از اتصال ، می توانید سرویس نفوذ اینترانت را به دسترسی به اینترنت ایجاد کنید"
echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/"
echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=173.9"
echo "------------------------"
if [ -d "/home/frp/" ]; then
list_forwarding_services "/home/frp/frp_0.61.0_linux_amd64/frpc.toml"
fi
echo ""
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "------------------------"
echo "4. اضافه کردن خدمات خارجی 5. خدمات خارجی را حذف کنید 6. پیکربندی خدمات به صورت دستی"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
configure_frpc
rm -rf /home/frp/*.tar.gz
echo "مشتری FRP نصب شده است"
;;
2)
cp -f /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml
donlond_frp
cp -f /home/frp/frpc.toml /home/frp/frp_0.61.0_linux_amd64/frpc.toml
tmux kill-session -t frpc >/dev/null 2>&1
tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
(crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1
rm -rf /home/frp/*.tar.gz
echo "مشتری FRP به روز شده است"
;;
3)
crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1
tmux kill-session -t frpc >/dev/null 2>&1
rm -rf /home/frp
close_port 8055
echo "برنامه حذف شده است"
;;
4)
add_forwarding_service
;;
5)
delete_forwarding_service
;;
6)
install nano
nano /home/frp/frp_0.61.0_linux_amd64/frpc.toml
tmux kill-session -t frpc >/dev/null 2>&1
tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"
;;
*)
break
;;
esac
break_end
done
}
yt_menu_pro() {
local VIDEO_DIR="/home/yt-dlp"
local URL_FILE="$VIDEO_DIR/urls.txt"
local ARCHIVE_FILE="$VIDEO_DIR/archive.txt"
mkdir -p "$VIDEO_DIR"
while true; do
if [ -x "/usr/local/bin/yt-dlp" ]; then
local YTDLP_STATUS="${gl_lv}已安装${gl_bai}"
else
local YTDLP_STATUS="${gl_hui}未安装${gl_bai}"
fi
clear
send_stats "ابزار بارگیری YT-DLP"
echo -e "yt-dlp $YTDLP_STATUS"
echo -e "YT-DLP یک ابزار قدرتمند بارگیری ویدیویی است که از هزاران سایت از جمله YouTube ، Bilibili ، Twitter و غیره پشتیبانی می کند."
echo -e "آدرس وب سایت رسمی: https://github.com/yt-dlp/yt-dlp"
echo "-------------------------"
echo "لیست ویدیویی بارگیری شده:"
ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(هنوز هیچ)"
echo "-------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "-------------------------"
echo "5. دانلود ویدیوی مجرد 6. دانلود ویدیوی دسته ای 7. پارامتر سفارشی"
echo "8. بارگیری به عنوان MP3 Audio 9. حذف فهرست ویدیو 10. مدیریت کوکی (در حال توسعه)"
echo "-------------------------"
echo "0. به منوی قبلی برگردید"
echo "-------------------------"
read -e -p "لطفاً شماره گزینه را وارد کنید:" choice
case $choice in
1)
send_stats "نصب YT-DLP ..."
echo "نصب YT-DLP ..."
install ffmpeg
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
echo "نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..."
read ;;
2)
send_stats "yt-dlp را به روز کنید ..."
echo "yt-dlp را به روز کنید ..."
sudo yt-dlp -U
echo "به روزرسانی کامل شد. برای ادامه ... هر کلید را فشار دهید ..."
read ;;
3)
send_stats "حذف yt-dlp ..."
echo "حذف yt-dlp ..."
sudo rm -f /usr/local/bin/yt-dlp
echo "حذف نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..."
read ;;
5)
send_stats "بارگیری ویدیویی تک"
read -e -p "لطفا لینک ویدیویی را وارد کنید:" url
yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \
--write-subs --sub-langs all \
--write-thumbnail --embed-thumbnail \
--write-info-json \
-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
--no-overwrites --no-post-overwrites "$url"
read -e -p "پس از اتمام بارگیری ، هر کلید را فشار دهید تا ادامه یابد ..." ;;
6)
send_stats "دانلود ویدیوی دسته ای"
install nano
if [ ! -f "$URL_FILE" ]; then
echo -e "# چندین آدرس پیوند ویدیویی را وارد کنید \ n# https://www.bilibili.com/bangumi/play/ep733316؟spm_id_from=333.337.0&from_spmid=666.25.episode.0" > "$URL_FILE"
fi
nano $URL_FILE
echo "اکنون بارگیری دسته را شروع کنید ..."
yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \
--write-subs --sub-langs all \
--write-thumbnail --embed-thumbnail \
--write-info-json \
-a "$URL_FILE" \
-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
--no-overwrites --no-post-overwrites
read -e -p "بارگیری دسته ای تکمیل شده است ، برای ادامه ... هر کلید را فشار دهید ..." ;;
7)
send_stats "بارگیری ویدیوی سفارشی"
read -e -p "لطفاً پارامتر کامل YT-DLP را وارد کنید (به استثنای YT-DLP):" custom
yt-dlp -P "$VIDEO_DIR" $custom \
--write-subs --sub-langs all \
--write-thumbnail --embed-thumbnail \
--write-info-json \
-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
--no-overwrites --no-post-overwrites
read -e -p "پس از اتمام اجرای ، برای ادامه ... هر کلید را فشار دهید ..." ;;
8)
send_stats "دانلود MP3"
read -e -p "لطفا لینک ویدیویی را وارد کنید:" url
yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \
--write-subs --sub-langs all \
--write-thumbnail --embed-thumbnail \
--write-info-json \
-o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \
--no-overwrites --no-post-overwrites "$url"
read -e -p "بارگیری صوتی به پایان رسیده است ، برای ادامه ... هر کلید را فشار دهید ..." ;;
9)
send_stats "حذف ویدیو"
read -e -p "لطفاً نام فیلم حذف را وارد کنید:" rmdir
rm -rf "$VIDEO_DIR/$rmdir"
;;
*)
break ;;
esac
done
}
current_timezone() {
if grep -q 'Alpine' /etc/issue; then
date +"%Z %z"
else
timedatectl | grep "Time zone" | awk '{print $3}'
fi
}
set_timedate() {
local shiqu="$1"
if grep -q 'Alpine' /etc/issue; then
install tzdata
cp /usr/share/zoneinfo/${shiqu} /etc/localtime
hwclock --systohc
else
timedatectl set-timezone ${shiqu}
fi
}
# مشکل قطع DPKG را برطرف کنید
fix_dpkg() {
pkill -9 -f 'apt|dpkg'
rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
DEBIAN_FRONTEND=noninteractive dpkg --configure -a
}
linux_update() {
echo -e "${gl_huang}به روزرسانی سیستم ...${gl_bai}"
if command -v dnf &>/dev/null; then
dnf -y update
elif command -v yum &>/dev/null; then
yum -y update
elif command -v apt &>/dev/null; then
fix_dpkg
DEBIAN_FRONTEND=noninteractive apt update -y
DEBIAN_FRONTEND=noninteractive apt full-upgrade -y
elif command -v apk &>/dev/null; then
apk update && apk upgrade
elif command -v pacman &>/dev/null; then
pacman -Syu --noconfirm
elif command -v zypper &>/dev/null; then
zypper refresh
zypper update
elif command -v opkg &>/dev/null; then
opkg update
else
echo "مدیر بسته ناشناخته!"
return
fi
}
linux_clean() {
echo -e "${gl_huang}تمیز کردن سیستم ...${gl_bai}"
if command -v dnf &>/dev/null; then
rpm --rebuilddb
dnf autoremove -y
dnf clean all
dnf makecache
journalctl --rotate
journalctl --vacuum-time=1s
journalctl --vacuum-size=500M
elif command -v yum &>/dev/null; then
rpm --rebuilddb
yum autoremove -y
yum clean all
yum makecache
journalctl --rotate
journalctl --vacuum-time=1s
journalctl --vacuum-size=500M
elif command -v apt &>/dev/null; then
fix_dpkg
apt autoremove --purge -y
apt clean -y
apt autoclean -y
journalctl --rotate
journalctl --vacuum-time=1s
journalctl --vacuum-size=500M
elif command -v apk &>/dev/null; then
echo "حافظه پنهان مدیر بسته را تمیز کنید ..."
apk cache clean
echo "ورود به سیستم سیستم ..."
rm -rf /var/log/*
echo "حذف حافظه پنهان APK ..."
rm -rf /var/cache/apk/*
echo "پرونده های موقت را حذف کنید ..."
rm -rf /tmp/*
elif command -v pacman &>/dev/null; then
pacman -Rns $(pacman -Qdtq) --noconfirm
pacman -Scc --noconfirm
journalctl --rotate
journalctl --vacuum-time=1s
journalctl --vacuum-size=500M
elif command -v zypper &>/dev/null; then
zypper clean --all
zypper refresh
journalctl --rotate
journalctl --vacuum-time=1s
journalctl --vacuum-size=500M
elif command -v opkg &>/dev/null; then
echo "ورود به سیستم سیستم ..."
rm -rf /var/log/*
echo "پرونده های موقت را حذف کنید ..."
rm -rf /tmp/*
elif command -v pkg &>/dev/null; then
echo "وابستگی های بلااستفاده را پاک کنید ..."
pkg autoremove -y
echo "حافظه پنهان مدیر بسته را تمیز کنید ..."
pkg clean -y
echo "ورود به سیستم سیستم ..."
rm -rf /var/log/*
echo "پرونده های موقت را حذف کنید ..."
rm -rf /tmp/*
else
echo "مدیر بسته ناشناخته!"
return
fi
return
}
bbr_on() {
cat > /etc/sysctl.conf << EOF
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl -p
}
set_dns() {
ip_address
rm /etc/resolv.conf
touch /etc/resolv.conf
if [ -n "$ipv4_address" ]; then
echo "nameserver $dns1_ipv4" >> /etc/resolv.conf
echo "nameserver $dns2_ipv4" >> /etc/resolv.conf
fi
if [ -n "$ipv6_address" ]; then
echo "nameserver $dns1_ipv6" >> /etc/resolv.conf
echo "nameserver $dns2_ipv6" >> /etc/resolv.conf
fi
}
set_dns_ui() {
root_use
send_stats "DNS را بهینه کنید"
while true; do
clear
echo "آدرس DNS را بهینه کنید"
echo "------------------------"
echo "آدرس DNS فعلی"
cat /etc/resolv.conf
echo "------------------------"
echo ""
echo "1. بهینه سازی DNS خارجی:"
echo " v4: 1.1.1.1 8.8.8.8"
echo " v6: 2606:4700:4700::1111 2001:4860:4860::8888"
echo "2. بهینه سازی DNS داخلی:"
echo " v4: 223.5.5.5 183.60.83.19"
echo " v6: 2400:3200::1 2400:da00::6666"
echo "3. تنظیمات DNS را بصورت دستی ویرایش کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting
case "$Limiting" in
1)
local dns1_ipv4="1.1.1.1"
local dns2_ipv4="8.8.8.8"
local dns1_ipv6="2606:4700:4700::1111"
local dns2_ipv6="2001:4860:4860::8888"
set_dns
send_stats "بهینه سازی DNS خارجی"
;;
2)
local dns1_ipv4="223.5.5.5"
local dns2_ipv4="183.60.83.19"
local dns1_ipv6="2400:3200::1"
local dns2_ipv6="2400:da00::6666"
set_dns
send_stats "بهینه سازی DNS داخلی"
;;
3)
install nano
nano /etc/resolv.conf
send_stats "پیکربندی DNS را به صورت دستی ویرایش کنید"
;;
*)
break
;;
esac
done
}
restart_ssh() {
restart sshd ssh > /dev/null 2>&1
}
correct_ssh_config() {
local sshd_config="/etc/ssh/sshd_config"
# اگر رمزعبور Authentication پیدا شد ، روی بله تنظیم کنید
if grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config"; then
sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config"
sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config"
fi
# در صورت یافتن pubkeyauthentication روی بله تنظیم شده است
if grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then
sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
-e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
-e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
-e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config"
fi
# اگر نه با رمز عبور و نه با pubkeyauthentication مطابقت ندارد ، مقدار پیش فرض را تنظیم کنید
if ! grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config" && ! grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then
sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config"
sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config"
fi
}
new_ssh_port() {
# از فایلهای پیکربندی SSH پشتیبان تهیه کنید
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config
sed -i "s/Port [0-9]\+/Port $new_port/g" /etc/ssh/sshd_config
correct_ssh_config
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
restart_ssh
open_port $new_port
remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1
echo "درگاه SSH به: اصلاح شده است:$new_port"
sleep 1
}
add_sshkey() {
ssh-keygen -t ed25519 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N ""
cat ~/.ssh/sshkey.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ip_address
echo -e "اطلاعات کلیدی خصوصی تولید شده است. حتماً آن را کپی و ذخیره کنید.${gl_huang}${ipv4_address}_ssh.key${gl_bai}پرونده برای ورود به سیستم SSH آینده"
echo "--------------------------------"
cat ~/.ssh/sshkey
echo "--------------------------------"
sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
-e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
-e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
-e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
echo -e "${gl_lv}ورود به سیستم کلید خصوصی Root فعال شده است ، ورود به سیستم رمز عبور بسته شده است ، اتصال مجدد اثر خواهد داشت${gl_bai}"
}
import_sshkey() {
read -e -p "لطفاً محتویات کلید عمومی SSH خود را وارد کنید (معمولاً با "SSH-RSA" یا "SSH-ED25519" شروع می شود):" public_key
if [[ -z "$public_key" ]]; then
echo -e "${gl_hong}خطا: محتوای کلید عمومی وارد نشده است.${gl_bai}"
return 1
fi
echo "$public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
-e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
-e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
-e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
echo -e "${gl_lv}کلید عمومی با موفقیت وارد شده است ، ورود به سیستم Root Private Key فعال شده است ، ورود به سیستم رمز عبور بسته شده است و اتصال مجدد اثر خواهد داشت${gl_bai}"
}
add_sshpasswd() {
echo "رمز عبور ریشه خود را تنظیم کنید"
passwd
sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config;
sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config;
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
restart_ssh
echo -e "${gl_lv}ورود به سیستم ریشه تنظیم شده است!${gl_bai}"
}
root_use() {
clear
[ "$EUID" -ne 0 ] && echo -e "${gl_huang}نکته:${gl_bai}این ویژگی به کاربر root نیاز دارد تا اجرا شود!" && break_end && kejilion
}
dd_xitong() {
send_stats "نصب مجدد سیستم"
dd_xitong_MollyLau() {
wget --no-check-certificate -qO InstallNET.sh "${gh_proxy}raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh" && chmod a+x InstallNET.sh
}
dd_xitong_bin456789() {
curl -O ${gh_proxy}raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
}
dd_xitong_1() {
echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}LeitboGi0ro${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}"
echo -e "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
install wget
dd_xitong_MollyLau
}
dd_xitong_2() {
echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}Teddysun.com${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}"
echo -e "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
install wget
dd_xitong_MollyLau
}
dd_xitong_3() {
echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}"
echo -e "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
dd_xitong_bin456789
}
dd_xitong_4() {
echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}"
echo -e "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
dd_xitong_bin456789
}
while true; do
root_use
echo "نصب مجدد سیستم"
echo "--------------------------------"
echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید."
echo -e "${gl_hui}با تشکر از مولیلاو و BIN456789 برای پشتیبانی از فیلمنامه!${gl_bai} "
echo "------------------------"
echo "1. Debian 12 2. Debian 11"
echo "3. Debian 10 4. Debian 9"
echo "------------------------"
echo "11. Ubuntu 24.04 12. Ubuntu 22.04"
echo "13. Ubuntu 20.04 14. Ubuntu 18.04"
echo "------------------------"
echo "21. Rocky Linux 9 22. Rocky Linux 8"
echo "23. Alma Linux 9 24. Alma Linux 8"
echo "25. oracle Linux 9 26. oracle Linux 8"
echo "27. Fedora Linux 41 28. Fedora Linux 40"
echo "29. CentOS 10 30. CentOS 9"
echo "------------------------"
echo "31. Alpine Linux 32. Arch Linux"
echo "33. Kali Linux 34. openEuler"
echo "35. OpenSUSE TUMBLEWEED 36"
echo "------------------------"
echo "41. Windows 11 42. Windows 10"
echo "43. Windows 7 44. Windows Server 2022"
echo "45. Windows Server 2019 46. Windows Server 2016"
echo "47. Windows 11 ARM"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید:" sys_choice
case "$sys_choice" in
1)
send_stats "نصب مجدد دبیان 12"
dd_xitong_1
bash InstallNET.sh -debian 12
reboot
exit
;;
2)
send_stats "نصب مجدد دبیان 11"
dd_xitong_1
bash InstallNET.sh -debian 11
reboot
exit
;;
3)
send_stats "نصب مجدد دبیان 10"
dd_xitong_1
bash InstallNET.sh -debian 10
reboot
exit
;;
4)
send_stats "نصب مجدد دبیان 9"
dd_xitong_1
bash InstallNET.sh -debian 9
reboot
exit
;;
11)
send_stats "Ubuntu 24.04 را دوباره نصب کنید"
dd_xitong_1
bash InstallNET.sh -ubuntu 24.04
reboot
exit
;;
12)
send_stats "22.04 اوبونتو را دوباره نصب کنید"
dd_xitong_1
bash InstallNET.sh -ubuntu 22.04
reboot
exit
;;
13)
send_stats "20.04 اوبونتو را دوباره نصب کنید"
dd_xitong_1
bash InstallNET.sh -ubuntu 20.04
reboot
exit
;;
14)
send_stats "Ubuntu 18.04 را دوباره نصب کنید"
dd_xitong_1
bash InstallNET.sh -ubuntu 18.04
reboot
exit
;;
21)
send_stats "Rockylinux9 را دوباره نصب کنید"
dd_xitong_3
bash reinstall.sh rocky
reboot
exit
;;
22)
send_stats "Rockylinux8 را دوباره نصب کنید"
dd_xitong_3
bash reinstall.sh rocky 8
reboot
exit
;;
23)
send_stats "نصب مجدد alma9"
dd_xitong_3
bash reinstall.sh almalinux
reboot
exit
;;
24)
send_stats "نصب مجدد alma8"
dd_xitong_3
bash reinstall.sh almalinux 8
reboot
exit
;;
25)
send_stats "اوراکل 9 را دوباره نصب کنید"
dd_xitong_3
bash reinstall.sh oracle
reboot
exit
;;
26)
send_stats "دوباره نصب Oracle8"
dd_xitong_3
bash reinstall.sh oracle 8
reboot
exit
;;
27)
send_stats "نصب مجدد fedora41"
dd_xitong_3
bash reinstall.sh fedora
reboot
exit
;;
28)
send_stats "نصب مجدد Fedora40"
dd_xitong_3
bash reinstall.sh fedora 40
reboot
exit
;;
29)
send_stats "نصب مجدد Centos10"
dd_xitong_3
bash reinstall.sh centos 10
reboot
exit
;;
30)
send_stats "نصب مجدد Centos9"
dd_xitong_3
bash reinstall.sh centos 9
reboot
exit
;;
31)
send_stats "نصب مجدد آلپ"
dd_xitong_1
bash InstallNET.sh -alpine
reboot
exit
;;
32)
send_stats "مجدداً قوس را نصب کنید"
dd_xitong_3
bash reinstall.sh arch
reboot
exit
;;
33)
send_stats "کالی را دوباره نصب کنید"
dd_xitong_3
bash reinstall.sh kali
reboot
exit
;;
34)
send_stats "بازگرداندن اوپنولر"
dd_xitong_3
bash reinstall.sh openeuler
reboot
exit
;;
35)
send_stats "بازگرداندن OpenSuse"
dd_xitong_3
bash reinstall.sh opensuse
reboot
exit
;;
36)
send_stats "بارگیری مجدد گاو پرواز"
dd_xitong_3
bash reinstall.sh fnos
reboot
exit
;;
41)
send_stats "نصب ویندوز 11"
dd_xitong_2
bash InstallNET.sh -windows 11 -lang "cn"
reboot
exit
;;
42)
dd_xitong_2
send_stats "ویندوز 10 را دوباره نصب کنید"
bash InstallNET.sh -windows 10 -lang "cn"
reboot
exit
;;
43)
send_stats "نصب ویندوز 7"
dd_xitong_4
bash reinstall.sh windows --iso="https://drive.massgrave.dev/cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso" --image-name='Windows 7 PROFESSIONAL'
reboot
exit
;;
44)
send_stats "ویندوز سرور 22 را دوباره نصب کنید"
dd_xitong_2
bash InstallNET.sh -windows 2022 -lang "cn"
reboot
exit
;;
45)
send_stats "ویندوز سرور 19 را دوباره نصب کنید"
dd_xitong_2
bash InstallNET.sh -windows 2019 -lang "cn"
reboot
exit
;;
46)
send_stats "ویندوز سرور 16 را دوباره نصب کنید"
dd_xitong_2
bash InstallNET.sh -windows 2016 -lang "cn"
reboot
exit
;;
47)
send_stats "بازوی Windows11 را دوباره نصب کنید"
dd_xitong_4
bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz
reboot
exit
;;
*)
break
;;
esac
done
}
bbrv3() {
root_use
send_stats "مدیریت BBRV3"
local cpu_arch=$(uname -m)
if [ "$cpu_arch" = "aarch64" ]; then
bash <(curl -sL jhb.ovh/jb/bbrv3arm.sh)
break_end
linux_Settings
fi
if dpkg -l | grep -q 'linux-xanmod'; then
while true; do
clear
local kernel_version=$(uname -r)
echo "شما هسته bbrv3 xanmod را نصب کرده اید"
echo "نسخه هسته فعلی:$kernel_version"
echo ""
echo "مدیریت هسته"
echo "------------------------"
echo "1. هسته BBRV3 را به روز کنید. هسته BBRV3 را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
apt purge -y 'linux-*xanmod1*'
update-grub
# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
# مرحله 3: یک مخزن اضافه کنید
echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list
# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
apt update -y
apt install -y linux-xanmod-x64v$version
echo "هسته XanMod به روز شده است. بعد از راه اندازی مجدد عمل کنید"
rm -f /etc/apt/sources.list.d/xanmod-release.list
rm -f check_x86-64_psabi.sh*
server_reboot
;;
2)
apt purge -y 'linux-*xanmod1*'
update-grub
echo "هسته Xanmod حذف نشده است. بعد از راه اندازی مجدد عمل کنید"
server_reboot
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
else
clear
echo "شتاب BBR3 را تنظیم کنید"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv14k421x7bs؟t=0.1"
echo "------------------------------------------------"
echo "فقط از دبیان/اوبونتو پشتیبانی کنید"
echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و BBR3 را برای ارتقاء هسته لینوکس فعال کنید."
echo "VPS دارای حافظه 512 متر است ، لطفاً حافظه مجازی 1G را از قبل اضافه کنید تا از تماس تلفنی به دلیل حافظه ناکافی جلوگیری شود!"
echo "------------------------------------------------"
read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice
case "$choice" in
[Yy])
if [ -r /etc/os-release ]; then
. /etc/os-release
if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then
echo "محیط فعلی از آن پشتیبانی نمی کند ، فقط از سیستم های Debian و Ubuntu پشتیبانی می کند"
break_end
linux_Settings
fi
else
echo "برای تعیین نوع سیستم عامل امکان پذیر نیست"
break_end
linux_Settings
fi
check_swap
install wget gnupg
# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
# مرحله 3: یک مخزن اضافه کنید
echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list
# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
apt update -y
apt install -y linux-xanmod-x64v$version
bbr_on
echo "هسته XANMOD نصب شده و BBR3 با موفقیت فعال می شود. بعد از راه اندازی مجدد عمل کنید"
rm -f /etc/apt/sources.list.d/xanmod-release.list
rm -f check_x86-64_psabi.sh*
server_reboot
;;
[Nn])
echo "لغو شده"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
fi
}
elrepo_install() {
# وارد کردن کلید عمومی Elrepo GPG
echo "کلید عمومی Elrepo GPG را وارد کنید ..."
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# نسخه سیستم را تشخیص دهید
local os_version=$(rpm -q --qf "%{VERSION}" $(rpm -qf /etc/os-release) 2>/dev/null | awk -F '.' '{print $1}')
local os_name=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
# اطمینان حاصل کنید که ما روی یک سیستم عامل پشتیبانی شده اجرا می کنیم
if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then
echo "سیستم عامل های پشتیبانی نشده:$os_name"
break_end
linux_Settings
fi
# اطلاعات سیستم عامل شناسایی شده را چاپ کنید
echo "سیستم عامل شناسایی شده:$os_name $os_version"
# پیکربندی انبار الپو مربوطه را مطابق با نسخه سیستم نصب کنید
if [[ "$os_version" == 8 ]]; then
echo "تنظیمات مخزن Elrepo (نسخه 8) را نصب کنید ..."
yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
elif [[ "$os_version" == 9 ]]; then
echo "تنظیمات مخزن Elrepo را نصب کنید (نسخه 9) ..."
yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
else
echo "نسخه های سیستم پشتیبانی نشده:$os_version"
break_end
linux_Settings
fi
# مخزن هسته Elrepo را فعال کرده و جدیدترین هسته اصلی را نصب کنید
echo "مخزن هسته Elrepo را فعال کنید و آخرین هسته اصلی را نصب کنید ..."
# yum -y --enablerepo=elrepo-kernel install kernel-ml
yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml
echo "پیکربندی مخزن Elrepo در آخرین هسته اصلی خط نصب و به روز شده است."
server_reboot
}
elrepo() {
root_use
send_stats "مدیریت هسته Red Hat"
if uname -r | grep -q 'elrepo'; then
while true; do
clear
kernel_version=$(uname -r)
echo "شما هسته Elrepo را نصب کرده اید"
echo "نسخه هسته فعلی:$kernel_version"
echo ""
echo "مدیریت هسته"
echo "------------------------"
echo "1. هسته Elrepo را به روز کنید."
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
dnf remove -y elrepo-release
rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps
elrepo_install
send_stats "هسته Red Hat را به روز کنید"
server_reboot
;;
2)
dnf remove -y elrepo-release
rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps
echo "هسته Elrepo حذف نشده است. بعد از راه اندازی مجدد عمل کنید"
send_stats "هسته Red Hat را حذف نصب کنید"
server_reboot
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
else
clear
echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و هسته لینوکس را برای شما به روز می کند"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mh4y1w7qa؟t=529.2"
echo "------------------------------------------------"
echo "فقط پشتیبانی از توزیع سری Red Hat Centos/Redhat/Alma/Rocky/Oracle"
echo "ارتقاء هسته لینوکس می تواند عملکرد و امنیت سیستم را بهبود بخشد. توصیه می شود در صورت اجازه و ارتقاء محیط تولید با احتیاط ، آن را امتحان کنید!"
echo "------------------------------------------------"
read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice
case "$choice" in
[Yy])
check_swap
elrepo_install
send_stats "升级红帽内核"
server_reboot
;;
[Nn])
echo "已取消"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
fi
}
clamav_freshclam() {
echo -e "${gl_huang}正在更新病毒库...${gl_bai}"
docker run --rm \
--name clamav \
--mount source=clam_db,target=/var/lib/clamav \
clamav/clamav-debian:latest \
freshclam
}
clamav_scan() {
if [ $# -eq 0 ]; then
echo "لطفاً دایرکتوری را برای اسکن مشخص کنید."
return
fi
echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}"
# 构建 mount 参数
local MOUNT_PARAMS=""
for dir in "$@"; do
MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} "
done
# 构建 clamscan 命令参数
local SCAN_PARAMS=""
for dir in "$@"; do
SCAN_PARAMS+="/mnt/host${dir} "
done
mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1
> /home/docker/clamav/log/scan.log > /dev/null 2>&1
# 执行 Docker 命令
docker run -it --rm \
--name clamav \
--mount source=clam_db,target=/var/lib/clamav \
$MOUNT_PARAMS \
-v /home/docker/clamav/log/:/var/log/clamav/ \
clamav/clamav-debian:latest \
clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS
echo -e "${gl_lv}$@ اسکن تکمیل شده است ، گزارش ویروس ذخیره می شود${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}"
echo -e "${gl_lv}如果有病毒请在${gl_huang}scan.log${gl_lv}文件中搜索FOUND关键字确认病毒位置 ${gl_bai}"
}
clamav() {
root_use
send_stats "病毒扫描管理"
while true; do
clear
echo "ابزار اسکن ویروس Clamav"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1tqvze4eqm؟t=0.1"
echo "------------------------"
echo "این یک ابزار نرم افزاری آنتی ویروس منبع باز است که عمدتاً برای تشخیص و حذف انواع بدافزار مورد استفاده قرار می گیرد."
echo "از جمله ویروس ها ، اسب های تروجان ، جاسوس ، اسکریپت های مخرب و سایر نرم افزارهای مضر."
echo "------------------------"
echo -e "${gl_lv}1 اسکن کامل دیسک${gl_bai} ${gl_huang}2. فهرست مهم را اسکن کنید${gl_bai} ${gl_kjlan}3. اسکن دایرکتوری سفارشی${gl_bai}"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "اسکن دیسک کامل"
install_docker
docker volume create clam_db > /dev/null 2>&1
clamav_freshclam
clamav_scan /
break_end
;;
2)
send_stats "اسکن دایرکتوری مهم"
install_docker
docker volume create clam_db > /dev/null 2>&1
clamav_freshclam
clamav_scan /etc /var /usr /home /root
break_end
;;
3)
send_stats "اسکن دایرکتوری سفارشی"
read -e -p "لطفاً برای اسکن ، جدا شده توسط فضاها (به عنوان مثال: /etc /var /usr /home /root) دایرکتوری را وارد کنید:" directories
install_docker
clamav_freshclam
clamav_scan $directories
break_end
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
# عملکرد بهینه سازی حالت با کارایی بالا
optimize_high_performance() {
echo -e "${gl_lv}روی دادن${tiaoyou_moshi}...${gl_bai}"
echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
ulimit -n 65535
echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
sysctl -w vm.swappiness=10 2>/dev/null
sysctl -w vm.dirty_ratio=15 2>/dev/null
sysctl -w vm.dirty_background_ratio=5 2>/dev/null
sysctl -w vm.overcommit_memory=1 2>/dev/null
sysctl -w vm.min_free_kbytes=65536 2>/dev/null
echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
sysctl -w net.core.rmem_max=16777216 2>/dev/null
sysctl -w net.core.wmem_max=16777216 2>/dev/null
sysctl -w net.core.netdev_max_backlog=250000 2>/dev/null
sysctl -w net.core.somaxconn=4096 2>/dev/null
sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null
sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null
sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null
sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null
echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
sysctl -w vm.vfs_cache_pressure=50 2>/dev/null
echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null
echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
# برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# تعادل Numa را غیرفعال کنید
sysctl -w kernel.numa_balancing=0 2>/dev/null
}
# عملکرد بهینه سازی حالت تساوی
optimize_balanced() {
echo -e "${gl_lv}تغییر به حالت تساوی ...${gl_bai}"
echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
ulimit -n 32768
echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
sysctl -w vm.swappiness=30 2>/dev/null
sysctl -w vm.dirty_ratio=20 2>/dev/null
sysctl -w vm.dirty_background_ratio=10 2>/dev/null
sysctl -w vm.overcommit_memory=0 2>/dev/null
sysctl -w vm.min_free_kbytes=32768 2>/dev/null
echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
sysctl -w net.core.rmem_max=8388608 2>/dev/null
sysctl -w net.core.wmem_max=8388608 2>/dev/null
sysctl -w net.core.netdev_max_backlog=125000 2>/dev/null
sysctl -w net.core.somaxconn=2048 2>/dev/null
sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608' 2>/dev/null
sysctl -w net.ipv4.tcp_wmem='4096 32768 8388608' 2>/dev/null
sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
sysctl -w net.ipv4.tcp_max_syn_backlog=4096 2>/dev/null
sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
sysctl -w net.ipv4.ip_local_port_range='1024 49151' 2>/dev/null
echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
sysctl -w vm.vfs_cache_pressure=75 2>/dev/null
echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null
echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
# صفحه شفاف را بازیابی کنید
echo always > /sys/kernel/mm/transparent_hugepage/enabled
# تعادل Numa را بازیابی کنید
sysctl -w kernel.numa_balancing=1 2>/dev/null
}
# عملکرد تنظیمات پیش فرض را بازیابی کنید
restore_defaults() {
echo -e "${gl_lv}به تنظیمات پیش فرض بازگردید ...${gl_bai}"
echo -e "${gl_lv}بازگرداندن توصیف کننده پرونده ...${gl_bai}"
ulimit -n 1024
echo -e "${gl_lv}بازیابی حافظه مجازی ...${gl_bai}"
sysctl -w vm.swappiness=60 2>/dev/null
sysctl -w vm.dirty_ratio=20 2>/dev/null
sysctl -w vm.dirty_background_ratio=10 2>/dev/null
sysctl -w vm.overcommit_memory=0 2>/dev/null
sysctl -w vm.min_free_kbytes=16384 2>/dev/null
echo -e "${gl_lv}بازگرداندن تنظیمات شبکه ...${gl_bai}"
sysctl -w net.core.rmem_max=212992 2>/dev/null
sysctl -w net.core.wmem_max=212992 2>/dev/null
sysctl -w net.core.netdev_max_backlog=1000 2>/dev/null
sysctl -w net.core.somaxconn=128 2>/dev/null
sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456' 2>/dev/null
sysctl -w net.ipv4.tcp_wmem='4096 16384 4194304' 2>/dev/null
sysctl -w net.ipv4.tcp_congestion_control=cubic 2>/dev/null
sysctl -w net.ipv4.tcp_max_syn_backlog=2048 2>/dev/null
sysctl -w net.ipv4.tcp_tw_reuse=0 2>/dev/null
sysctl -w net.ipv4.ip_local_port_range='32768 60999' 2>/dev/null
echo -e "${gl_lv}بازگرداندن مدیریت حافظه پنهان ...${gl_bai}"
sysctl -w vm.vfs_cache_pressure=100 2>/dev/null
echo -e "${gl_lv}تنظیمات CPU را بازیابی کنید ...${gl_bai}"
sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null
echo -e "${gl_lv}بهینه سازی های دیگر را بازیابی کنید ...${gl_bai}"
# صفحه شفاف را بازیابی کنید
echo always > /sys/kernel/mm/transparent_hugepage/enabled
# تعادل Numa را بازیابی کنید
sysctl -w kernel.numa_balancing=1 2>/dev/null
}
# عملکرد بهینه سازی ساختمان وب سایت
optimize_web_server() {
echo -e "${gl_lv}به حالت بهینه سازی ساختمان وب سایت بروید ...${gl_bai}"
echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}"
ulimit -n 65535
echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}"
sysctl -w vm.swappiness=10 2>/dev/null
sysctl -w vm.dirty_ratio=20 2>/dev/null
sysctl -w vm.dirty_background_ratio=10 2>/dev/null
sysctl -w vm.overcommit_memory=1 2>/dev/null
sysctl -w vm.min_free_kbytes=65536 2>/dev/null
echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}"
sysctl -w net.core.rmem_max=16777216 2>/dev/null
sysctl -w net.core.wmem_max=16777216 2>/dev/null
sysctl -w net.core.netdev_max_backlog=5000 2>/dev/null
sysctl -w net.core.somaxconn=4096 2>/dev/null
sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null
sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null
sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null
sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null
sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null
sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null
echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}"
sysctl -w vm.vfs_cache_pressure=50 2>/dev/null
echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}"
sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null
echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}"
# برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# تعادل Numa را غیرفعال کنید
sysctl -w kernel.numa_balancing=0 2>/dev/null
}
Kernel_optimize() {
root_use
while true; do
clear
send_stats "مدیریت تنظیم هسته لینوکس"
echo "بهینه سازی پارامترهای هسته در سیستم لینوکس"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1kb421j7yg؟t=0.1"
echo "------------------------------------------------"
echo "انواع مختلفی از حالت های تنظیم پارامتر سیستم ارائه شده است و کاربران می توانند مطابق سناریوهای استفاده خودشان انتخاب و تغییر کنند."
echo -e "${gl_huang}نکته:${gl_bai}لطفاً از آن با احتیاط در محیط تولید استفاده کنید!"
echo "--------------------"
echo "1. حالت بهینه سازی با کارایی بالا: عملکرد سیستم را به حداکثر برساند و توصیف کننده های فایل ، حافظه مجازی ، تنظیمات شبکه ، مدیریت حافظه نهان و تنظیمات CPU را بهینه کنید."
echo "2. حالت بهینه سازی متعادل: تعادل بین عملکرد و مصرف منابع ، مناسب برای استفاده روزانه."
echo "3. حالت بهینه سازی وب سایت: برای بهبود قابلیت های پردازش اتصال همزمان ، سرعت پاسخ و عملکرد کلی ، برای سرور وب سایت بهینه سازی کنید."
echo "4. حالت بهینه سازی پخش زنده: برای کاهش تأخیر و بهبود عملکرد انتقال ، نیازهای ویژه جریان پخش زنده را بهینه کنید."
echo "5. حالت بهینه سازی سرور بازی: برای بهبود قابلیت های پردازش همزمان و سرعت پاسخ ، برای سرورهای بازی بهینه سازی کنید."
echo "6. تنظیمات پیش فرض را بازیابی کنید: تنظیمات سیستم را به پیکربندی پیش فرض بازیابی کنید."
echo "--------------------"
echo "0. به منوی قبلی برگردید"
echo "--------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
cd ~
clear
local tiaoyou_moshi="高性能优化模式"
optimize_high_performance
send_stats "بهینه سازی حالت با کارایی بالا"
;;
2)
cd ~
clear
optimize_balanced
send_stats "بهینه سازی حالت متعادل"
;;
3)
cd ~
clear
optimize_web_server
send_stats "مدل بهینه سازی وب سایت"
;;
4)
cd ~
clear
local tiaoyou_moshi="直播优化模式"
optimize_high_performance
send_stats "بهینه سازی جریان مستقیم"
;;
5)
cd ~
clear
local tiaoyou_moshi="游戏服优化模式"
optimize_high_performance
send_stats "بهینه سازی سرور بازی"
;;
6)
cd ~
clear
restore_defaults
send_stats "تنظیمات پیش فرض را بازیابی کنید"
;;
*)
break
;;
esac
break_end
done
}
update_locale() {
local lang=$1
local locale_file=$2
if [ -f /etc/os-release ]; then
. /etc/os-release
case $ID in
debian|ubuntu|kali)
install locales
sed -i "s/^\s*#\?\s*${locale_file}/${locale_file}/" /etc/locale.gen
locale-gen
echo "LANG=${lang}" > /etc/default/locale
export LANG=${lang}
echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}"
hash -r
break_end
;;
centos|rhel|almalinux|rocky|fedora)
install glibc-langpack-zh
localectl set-locale LANG=${lang}
echo "LANG=${lang}" | tee /etc/locale.conf
echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}"
hash -r
break_end
;;
*)
echo "سیستم های پشتیبانی نشده:$ID"
break_end
;;
esac
else
echo "سیستم های پشتیبانی نشده ، نوع سیستم قابل تشخیص نیست."
break_end
fi
}
linux_language() {
root_use
send_stats "سوئیچ زبان سیستم"
while true; do
clear
echo "زبان فعلی سیستم:$LANG"
echo "------------------------"
echo "1. انگلیسی 2. ساده چینی 3. چینی سنتی"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
update_locale "en_US.UTF-8" "en_US.UTF-8"
send_stats "تغییر به انگلیسی"
;;
2)
update_locale "zh_CN.UTF-8" "zh_CN.UTF-8"
send_stats "تغییر به چینی ساده شده"
;;
3)
update_locale "zh_TW.UTF-8" "zh_TW.UTF-8"
send_stats "به چینی سنتی بروید"
;;
*)
break
;;
esac
done
}
shell_bianse_profile() {
if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
sed -i '/^PS1=/d' ~/.bashrc
echo "${bianse}" >> ~/.bashrc
# source ~/.bashrc
else
sed -i '/^PS1=/d' ~/.profile
echo "${bianse}" >> ~/.profile
# source ~/.profile
fi
echo -e "${gl_lv}تغییر تکمیل شده است SSH را دوباره وصل کنید تا تغییرات را مشاهده کنید!${gl_bai}"
hash -r
break_end
}
shell_bianse() {
root_use
send_stats "ابزار زیباسازی خط فرمان"
while true; do
clear
echo "ابزار زیباسازی خط فرمان"
echo "------------------------"
echo -e "1. \033[1;32mroot \033[1;34mlocalhost \033[1;31m~ \033[0m${gl_bai}#"
echo -e "2. \033[1;35mroot \033[1;36mlocalhost \033[1;33m~ \033[0m${gl_bai}#"
echo -e "3. \033[1;31mroot \033[1;32mlocalhost \033[1;34m~ \033[0m${gl_bai}#"
echo -e "4. \033[1;36mroot \033[1;33mlocalhost \033[1;37m~ \033[0m${gl_bai}#"
echo -e "5. \033[1;37mroot \033[1;31mlocalhost \033[1;32m~ \033[0m${gl_bai}#"
echo -e "6. \033[1;33mroot \033[1;34mlocalhost \033[1;35m~ \033[0m${gl_bai}#"
echo -e "7. root localhost ~ #"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
local bianse="PS1='\[\033[1;32m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;31m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
2)
local bianse="PS1='\[\033[1;35m\]\u\[\033[0m\]@\[\033[1;36m\]\h\[\033[0m\] \[\033[1;33m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
3)
local bianse="PS1='\[\033[1;31m\]\u\[\033[0m\]@\[\033[1;32m\]\h\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
4)
local bianse="PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\] \[\033[1;37m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
5)
local bianse="PS1='\[\033[1;37m\]\u\[\033[0m\]@\[\033[1;31m\]\h\[\033[0m\] \[\033[1;32m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
6)
local bianse="PS1='\[\033[1;33m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;35m\]\w\[\033[0m\] # '"
shell_bianse_profile
;;
7)
local bianse=""
shell_bianse_profile
;;
*)
break
;;
esac
done
}
linux_trash() {
root_use
send_stats "ایستگاه بازیافت سیستم"
local bashrc_profile="/root/.bashrc"
local TRASH_DIR="$HOME/.local/share/Trash/files"
while true; do
local trash_status
if ! grep -q "trash-put" "$bashrc_profile"; then
trash_status="${gl_hui}未启用${gl_bai}"
else
trash_status="${gl_lv}已启用${gl_bai}"
fi
clear
echo -e "سطل بازیافت فعلی${trash_status}"
echo -e "پس از فعال کردن ، پرونده های حذف شده توسط RM ابتدا وارد سطل بازیافت می شوند تا از حذف اشتباه پرونده های مهم جلوگیری شود!"
echo "------------------------------------------------"
ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "سطل بازیافت خالی است"
echo "------------------------"
echo "1. سطل بازیافت را فعال کنید. سطل بازیافت را ببندید"
echo "3. بازیابی مطالب 4. سطل بازیافت را پاک کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
install trash-cli
sed -i '/alias rm/d' "$bashrc_profile"
echo "alias rm='trash-put'" >> "$bashrc_profile"
source "$bashrc_profile"
echo "سطل بازیافت فعال شده و پرونده های حذف شده به سطل بازیافت منتقل می شوند."
sleep 2
;;
2)
remove trash-cli
sed -i '/alias rm/d' "$bashrc_profile"
echo "alias rm='rm -i'" >> "$bashrc_profile"
source "$bashrc_profile"
echo "سطل بازیافت بسته است و پرونده مستقیماً حذف می شود."
sleep 2
;;
3)
read -e -p "برای بازیابی نام پرونده را وارد کنید:" file_to_restore
if [ -e "$TRASH_DIR/$file_to_restore" ]; then
mv "$TRASH_DIR/$file_to_restore" "$HOME/"
echo "$file_to_restoreبه فهرست خانه بازگردانده شد."
else
echo "پرونده وجود ندارد"
fi
;;
4)
read -e -p "تأیید سطل بازیافت را تأیید کنید؟ [y/n]:" confirm
if [[ "$confirm" == "y" ]]; then
trash-empty
echo "سطل بازیافت پاک شده است."
fi
;;
*)
break
;;
esac
done
}
# تهیه نسخه پشتیبان
create_backup() {
send_stats "تهیه نسخه پشتیبان"
local TIMESTAMP=$(date +"%Y%m%d%H%M%S")
# کاربر را وادار به وارد کردن فهرست پشتیبان کنید
echo "یک مثال پشتیبان ایجاد کنید:"
echo "- از یک دایرکتوری واحد نسخه پشتیبان تهیه کنید: /var /www"
echo "- پشتیبان گیری از دایرکتوری های متعدد: /etc /home /var /log"
echo "- Enter Enter از دایرکتوری پیش فرض ( /etc /usr /home) استفاده می کند"
read -r -p "لطفاً برای تهیه نسخه پشتیبان از دایرکتوری وارد کنید (چندین دایرکتوری توسط فضاها از هم جدا می شوند و اگر مستقیماً وارد شوید ، از فهرست پیش فرض استفاده کنید):" input
# اگر کاربر دایرکتوری را وارد نکرد ، از فهرست پیش فرض استفاده کنید
if [ -z "$input" ]; then
BACKUP_PATHS=(
"/etc" # 配置文件和软件包配置
"/usr" # 已安装的软件文件
"/home" # 用户数据
)
else
# دایرکتوری را که توسط کاربر وارد شده است در یک آرایه توسط فضاها جدا کنید
IFS=' ' read -r -a BACKUP_PATHS <<< "$input"
fi
# پیشوند پرونده پشتیبان تهیه کنید
local PREFIX=""
for path in "${BACKUP_PATHS[@]}"; do
# نام دایرکتوری را استخراج کنید و برش ها را حذف کنید
dir_name=$(basename "$path")
PREFIX+="${dir_name}_"
done
# آخرین زیر را حذف کنید
local PREFIX=${PREFIX%_}
# نام پرونده پشتیبان تهیه کنید
local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz"
# دایرکتوری را که توسط کاربر انتخاب شده است چاپ کنید
echo "دایرکتوری پشتیبان که شما انتخاب کردید:"
for path in "${BACKUP_PATHS[@]}"; do
echo "- $path"
done
# تهیه نسخه پشتیبان
echo "ایجاد یک نسخه پشتیبان$BACKUP_NAME..."
install tar
tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}"
# بررسی کنید که آیا دستور موفقیت آمیز است
if [ $? -eq 0 ]; then
echo "نسخه پشتیبان با موفقیت ایجاد شد:$BACKUP_DIR/$BACKUP_NAME"
else
echo "ایجاد پشتیبان گیری نشد!"
exit 1
fi
}
# بازیابی پشتیبان گیری
restore_backup() {
send_stats "بازیابی پشتیبان گیری"
# پشتیبان مورد نظر برای بازیابی را انتخاب کنید
read -e -p "لطفاً نام پرونده پشتیبان را برای بازیابی وارد کنید:" BACKUP_NAME
# بررسی کنید که آیا پرونده پشتیبان وجود دارد
if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then
echo "پرونده پشتیبان وجود ندارد!"
exit 1
fi
echo "بازیابی پشتیبان گیری$BACKUP_NAME..."
tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C /
if [ $? -eq 0 ]; then
echo "پشتیبان گیری و بازیابی با موفقیت!"
else
echo "بازیابی پشتیبان گیری نشد!"
exit 1
fi
}
# تهیه نسخه پشتیبان
list_backups() {
echo "نسخه پشتیبان تهیه شده در دسترس:"
ls -1 "$BACKUP_DIR"
}
# تهیه نسخه پشتیبان
delete_backup() {
send_stats "تهیه نسخه پشتیبان"
read -e -p "لطفاً نام پرونده پشتیبان را وارد کنید تا حذف شود:" BACKUP_NAME
# بررسی کنید که آیا پرونده پشتیبان وجود دارد
if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then
echo "پرونده پشتیبان وجود ندارد!"
exit 1
fi
# تهیه نسخه پشتیبان
rm -f "$BACKUP_DIR/$BACKUP_NAME"
if [ $? -eq 0 ]; then
echo "نسخه پشتیبان با موفقیت حذف شد!"
else
echo "حذف پشتیبان انجام نشد!"
exit 1
fi
}
# منوی اصلی تهیه نسخه پشتیبان
linux_backup() {
BACKUP_DIR="/backups"
mkdir -p "$BACKUP_DIR"
while true; do
clear
send_stats "عملکرد پشتیبان گیری سیستم"
echo "عملکرد پشتیبان گیری سیستم"
echo "------------------------"
list_backups
echo "------------------------"
echo "1. یک نسخه پشتیبان تهیه کنید. بازیابی پشتیبان 3 را بازیابی کنید. نسخه پشتیبان را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1) create_backup ;;
2) restore_backup ;;
3) delete_backup ;;
*) break ;;
esac
read -e -p "برای ادامه ... Enter را فشار دهید ..."
done
}
# نمایش لیست اتصال
list_connections() {
echo "اتصال ذخیره شده:"
echo "------------------------"
cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}'
echo "------------------------"
}
# یک اتصال جدید اضافه کنید
add_connection() {
send_stats "یک اتصال جدید اضافه کنید"
echo "مثال برای ایجاد یک اتصال جدید:"
echo "- نام اتصال: my_server"
echo "- آدرس IP: 192.168.1.100"
echo "- نام کاربری: ریشه"
echo "- بندر: 22"
echo "------------------------"
read -e -p "لطفاً نام اتصال را وارد کنید:" name
read -e -p "لطفا آدرس IP خود را وارد کنید:" ip
read -e -p "لطفاً نام کاربری (پیش فرض: ریشه) را وارد کنید:" user
local user=${user:-root} # 如果用户未输入,则使用默认值 root
read -e -p "لطفاً شماره پورت را وارد کنید (پیش فرض: 22):" port
local port=${port:-22} # 如果用户未输入,则使用默认值 22
echo "لطفاً روش احراز هویت را انتخاب کنید:"
echo "1. رمز عبور"
echo "2. کلید"
read -e -p "لطفاً انتخاب را وارد کنید (1/2):" auth_choice
case $auth_choice in
1)
read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key
echo # 换行
;;
2)
echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:"
local password_or_key=""
while IFS= read -r line; do
# اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد
if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then
break
fi
# اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید
if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then
local password_or_key+="${line}"$'\n'
fi
done
# بررسی کنید که آیا این محتوای کلیدی است
if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then
local key_file="$KEY_DIR/$name.key"
echo -n "$password_or_key" > "$key_file"
chmod 600 "$key_file"
local password_or_key="$key_file"
fi
;;
*)
echo "انتخاب نامعتبر!"
return
;;
esac
echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE"
echo "اتصال ذخیره می شود!"
}
# اتصال را حذف کنید
delete_connection() {
send_stats "اتصال را حذف کنید"
read -e -p "لطفاً شماره اتصال را وارد کنید تا حذف شود:" num
local connection=$(sed -n "${num}p" "$CONFIG_FILE")
if [[ -z "$connection" ]]; then
echo "خطا: اتصال مربوطه یافت نشد."
return
fi
IFS='|' read -r name ip user port password_or_key <<< "$connection"
# اگر اتصال از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید
if [[ "$password_or_key" == "$KEY_DIR"* ]]; then
rm -f "$password_or_key"
fi
sed -i "${num}d" "$CONFIG_FILE"
echo "اتصال حذف شده است!"
}
# از اتصال استفاده کنید
use_connection() {
send_stats "از اتصال استفاده کنید"
read -e -p "لطفاً شماره اتصال را برای استفاده وارد کنید:" num
local connection=$(sed -n "${num}p" "$CONFIG_FILE")
if [[ -z "$connection" ]]; then
echo "خطا: اتصال مربوطه یافت نشد."
return
fi
IFS='|' read -r name ip user port password_or_key <<< "$connection"
echo "اتصال به$name ($ip)..."
if [[ -f "$password_or_key" ]]; then
# با یک کلید ارتباط برقرار کنید
ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip"
if [[ $? -ne 0 ]]; then
echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:"
echo "1. آیا مسیر فایل کلید صحیح است؟$password_or_key"
echo "2. آیا مجوزهای پرونده کلیدی صحیح است (باید 600 باشد)."
echo "3. آیا سرور هدف اجازه ورود به سیستم را با استفاده از کلید می دهد."
fi
else
# با یک رمز عبور ارتباط برقرار کنید
if ! command -v sshpass &> /dev/null; then
echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید."
echo "روش نصب:"
echo " - Ubuntu/Debian: apt install sshpass"
echo " - CentOS/RHEL: yum install sshpass"
return
fi
sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip"
if [[ $? -ne 0 ]]; then
echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:"
echo "1. آیا نام کاربری و رمز عبور صحیح است."
echo "2. آیا سرور هدف اجازه ورود به رمز عبور را می دهد."
echo "3. آیا سرویس SSH سرور هدف به طور عادی در حال اجرا است."
fi
fi
}
ssh_manager() {
send_stats "ابزار اتصال از راه دور SSH"
CONFIG_FILE="$HOME/.ssh_connections"
KEY_DIR="$HOME/.ssh/ssh_manager_keys"
# بررسی کنید که آیا پرونده پیکربندی و فهرست کلید وجود دارد و آیا وجود ندارد ، آن را ایجاد کنید
if [[ ! -f "$CONFIG_FILE" ]]; then
touch "$CONFIG_FILE"
fi
if [[ ! -d "$KEY_DIR" ]]; then
mkdir -p "$KEY_DIR"
chmod 700 "$KEY_DIR"
fi
while true; do
clear
echo "ابزار اتصال از راه دور SSH"
echo "از طریق SSH می تواند به سایر سیستم های لینوکس متصل شود"
echo "------------------------"
list_connections
echo "1. یک اتصال جدید ایجاد کنید. از یک اتصال استفاده کنید 3. یک اتصال را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1) add_connection ;;
2) use_connection ;;
3) delete_connection ;;
0) break ;;
*) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;;
esac
done
}
# لیست پارتیشن های دیسک سخت موجود
list_partitions() {
echo "پارتیشن های دیسک سخت موجود:"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop"
}
# پارتیشن را سوار کنید
mount_partition() {
send_stats "پارتیشن را سوار کنید"
read -e -p "لطفاً نام پارتیشن را برای نصب وارد کنید (به عنوان مثال SDA1):" PARTITION
# بررسی کنید که آیا پارتیشن وجود دارد
if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
echo "پارتیشن وجود ندارد!"
return
fi
# بررسی کنید که آیا پارتیشن از قبل نصب شده است
if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then
echo "پارتیشن از قبل نصب شده است!"
return
fi
# یک نقطه کوه ایجاد کنید
MOUNT_POINT="/mnt/$PARTITION"
mkdir -p "$MOUNT_POINT"
# پارتیشن را سوار کنید
mount "/dev/$PARTITION" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "پارتیشن با موفقیت:$MOUNT_POINT"
else
echo "پارتیشن کوه شکست خورد!"
rmdir "$MOUNT_POINT"
fi
}
# پارتیشن را حذف نصب کنید
unmount_partition() {
send_stats "پارتیشن را حذف نصب کنید"
read -e -p "لطفاً نام پارتیشن را وارد کنید (به عنوان مثال SDA1):" PARTITION
# بررسی کنید که آیا پارتیشن از قبل نصب شده است
MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION")
if [ -z "$MOUNT_POINT" ]; then
echo "پارتیشن نصب نشده است!"
return
fi
# پارتیشن را حذف نصب کنید
umount "/dev/$PARTITION"
if [ $? -eq 0 ]; then
echo "حذف پارتیشن با موفقیت:$MOUNT_POINT"
rmdir "$MOUNT_POINT"
else
echo "حذف پارتیشن انجام نشد!"
fi
}
# لیست پارتیشن های نصب شده
list_mounted_partitions() {
echo "پارتیشن نصب شده:"
df -h | grep -v "tmpfs\|udev\|overlay"
}
# پارتیشن فرمت
format_partition() {
send_stats "پارتیشن فرمت"
read -e -p "لطفاً نام پارتیشن را به قالب وارد کنید (به عنوان مثال SDA1):" PARTITION
# بررسی کنید که آیا پارتیشن وجود دارد
if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
echo "پارتیشن وجود ندارد!"
return
fi
# بررسی کنید که آیا پارتیشن از قبل نصب شده است
if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then
echo "پارتیشن نصب شده است ، لطفاً ابتدا آن را حذف کنید!"
return
fi
# نوع سیستم فایل را انتخاب کنید
echo "لطفاً نوع سیستم فایل را انتخاب کنید:"
echo "1. ext4"
echo "2. xfs"
echo "3. ntfs"
echo "4. vfat"
read -e -p "لطفا انتخاب خود را وارد کنید:" FS_CHOICE
case $FS_CHOICE in
1) FS_TYPE="ext4" ;;
2) FS_TYPE="xfs" ;;
3) FS_TYPE="ntfs" ;;
4) FS_TYPE="vfat" ;;
*) echo "انتخاب نامعتبر!"; return ;;
esac
# تأیید قالب بندی
read -e -p "تأیید قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPEاین است؟ (y/n):" CONFIRM
if [ "$CONFIRM" != "y" ]; then
echo "این عملیات لغو شده است."
return
fi
# پارتیشن فرمت
echo "قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPE ..."
mkfs.$FS_TYPE "/dev/$PARTITION"
if [ $? -eq 0 ]; then
echo "قالب پارتیشن موفقیت آمیز بود!"
else
echo "قالب بندی پارتیشن شکست خورد!"
fi
}
# وضعیت پارتیشن را بررسی کنید
check_partition() {
send_stats "وضعیت پارتیشن را بررسی کنید"
read -e -p "لطفاً نام پارتیشن را برای بررسی وارد کنید (به عنوان مثال SDA1):" PARTITION
# بررسی کنید که آیا پارتیشن وجود دارد
if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then
echo "پارتیشن وجود ندارد!"
return
fi
# وضعیت پارتیشن را بررسی کنید
echo "پارتیشن /dev /را بررسی کنید$PARTITIONوضعیت:"
fsck "/dev/$PARTITION"
}
# منوی اصلی
disk_manager() {
send_stats "عملکرد مدیریت دیسک سخت"
while true; do
clear
echo "مدیریت پارتیشن دیسک سخت"
echo -e "${gl_huang}این عملکرد در داخل دوره آزمایش آزمایش می شود ، لطفاً از آن در محیط تولید استفاده نکنید.${gl_bai}"
echo "------------------------"
list_partitions
echo "------------------------"
echo "1. پارتیشن را سوار کنید. پارتیشن را حذف کنید. نمایش پارتیشن نصب شده"
echo "4. پارتیشن 5 را قالب بندی کنید. وضعیت پارتیشن را بررسی کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1) mount_partition ;;
2) unmount_partition ;;
3) list_mounted_partitions ;;
4) format_partition ;;
5) check_partition ;;
*) break ;;
esac
read -e -p "برای ادامه ... Enter را فشار دهید ..."
done
}
# لیست کار را نشان دهید
list_tasks() {
echo "وظایف همگام سازی ذخیره شده:"
echo "---------------------------------"
awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE"
echo "---------------------------------"
}
# یک کار جدید اضافه کنید
add_task() {
send_stats "یک کار همگام سازی جدید اضافه کنید"
echo "یک مثال کار همگام سازی جدید ایجاد کنید:"
echo "- نام کار: backup_www"
echo "- دایرکتوری محلی: /var /www"
echo "- آدرس از راه دور: user@192.168.1.100"
echo "- دایرکتوری از راه دور: /پشتیبان /www"
echo "- شماره پورت (پیش فرض 22)"
echo "---------------------------------"
read -e -p "لطفاً نام کار را وارد کنید:" name
read -e -p "لطفا وارد فهرست محلی شوید:" local_path
read -e -p "لطفاً فهرست راه دور را وارد کنید:" remote_path
read -e -p "لطفاً کاربر از راه دور IP را وارد کنید:" remote
read -e -p "لطفاً درگاه SSH را وارد کنید (پیش فرض 22):" port
port=${port:-22}
echo "لطفاً روش احراز هویت را انتخاب کنید:"
echo "1. رمز عبور"
echo "2. کلید"
read -e -p "لطفاً (1/2) را انتخاب کنید:" auth_choice
case $auth_choice in
1)
read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key
echo # 换行
auth_method="password"
;;
2)
echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:"
local password_or_key=""
while IFS= read -r line; do
# اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد
if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then
break
fi
# اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید
if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then
password_or_key+="${line}"$'\n'
fi
done
# بررسی کنید که آیا این محتوای کلیدی است
if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then
local key_file="$KEY_DIR/${name}_sync.key"
echo -n "$password_or_key" > "$key_file"
chmod 600 "$key_file"
password_or_key="$key_file"
auth_method="key"
else
echo "محتوای کلیدی نامعتبر!"
return
fi
;;
*)
echo "انتخاب نامعتبر!"
return
;;
esac
echo "لطفاً حالت همگام سازی را انتخاب کنید:"
echo "1. حالت استاندارد (-AVZ)"
echo "2. پرونده هدف را حذف کنید (-avz-delete)"
read -e -p "لطفاً (1/2) را انتخاب کنید:" mode
case $mode in
1) options="-avz" ;;
2) options="-avz --delete" ;;
*) echo "انتخاب نامعتبر ، از پیش فرض -avz استفاده کنید"; options="-avz" ;;
esac
echo "$name|$local_path|$remote|$remote_path|$port|$options|$auth_method|$password_or_key" >> "$CONFIG_FILE"
install rsync rsync
echo "کار ذخیره شد!"
}
# یک کار را حذف کنید
delete_task() {
send_stats "کارهای همگام سازی را حذف کنید"
read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num
local task=$(sed -n "${num}p" "$CONFIG_FILE")
if [[ -z "$task" ]]; then
echo "خطا: کار مربوطه یافت نشد."
return
fi
IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task"
# اگر کار از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید
if [[ "$auth_method" == "key" && "$password_or_key" == "$KEY_DIR"* ]]; then
rm -f "$password_or_key"
fi
sed -i "${num}d" "$CONFIG_FILE"
echo "کار حذف شد!"
}
run_task() {
send_stats "انجام کارهای هماهنگ سازی"
CONFIG_FILE="$HOME/.rsync_tasks"
CRON_FILE="$HOME/.rsync_cron"
# پارامترها را تجزیه و تحلیل کنید
local direction="push" # 默认是推送到远端
local num
if [[ "$1" == "push" || "$1" == "pull" ]]; then
direction="$1"
num="$2"
else
num="$1"
fi
# اگر شماره کار ورودی وجود ندارد ، کاربر را مجبور به ورود کنید
if [[ -z "$num" ]]; then
read -e -p "لطفاً شماره کار را برای اجرای آن وارد کنید:" num
fi
local task=$(sed -n "${num}p" "$CONFIG_FILE")
if [[ -z "$task" ]]; then
echo "خطا: کار یافت نشد!"
return
fi
IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task"
# منبع و مسیر هدف را مطابق با جهت همگام سازی تنظیم کنید
if [[ "$direction" == "pull" ]]; then
echo "کشیدن هماهنگ سازی به محلی:$remote:$local_path -> $remote_path"
source="$remote:$local_path"
destination="$remote_path"
else
echo "همگام سازی را به انتهای از راه دور فشار دهید:$local_path -> $remote:$remote_path"
source="$local_path"
destination="$remote:$remote_path"
fi
# پارامترهای مشترک اتصال SSH را اضافه کنید
local ssh_options="-p $port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
if [[ "$auth_method" == "password" ]]; then
if ! command -v sshpass &> /dev/null; then
echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید."
echo "روش نصب:"
echo " - Ubuntu/Debian: apt install sshpass"
echo " - CentOS/RHEL: yum install sshpass"
return
fi
sshpass -p "$password_or_key" rsync $options -e "ssh $ssh_options" "$source" "$destination"
else
# بررسی کنید که آیا پرونده اصلی وجود دارد و آیا مجوزها صحیح هستند
if [[ ! -f "$password_or_key" ]]; then
echo "خطا: پرونده کلیدی وجود ندارد:$password_or_key"
return
fi
if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then
echo "هشدار: مجوزهای کلیدی پرونده نادرست است و تعمیر می شوند ..."
chmod 600 "$password_or_key"
fi
rsync $options -e "ssh -i $password_or_key $ssh_options" "$source" "$destination"
fi
if [[ $? -eq 0 ]]; then
echo "هماهنگ سازی کامل است!"
else
echo "هماهنگ سازی شکست خورد! لطفا موارد زیر را بررسی کنید:"
echo "1. آیا اتصال شبکه طبیعی است؟"
echo "2. آیا میزبان از راه دور در دسترس است؟"
echo "3. آیا اطلاعات احراز هویت صحیح است؟"
echo "4. آیا دایرکتوری های محلی و از راه دور مجوزهای دسترسی صحیح دارند"
fi
}
# یک کار به موقع ایجاد کنید
schedule_task() {
send_stats "کارهای زمان بندی همگام سازی را اضافه کنید"
read -e -p "لطفاً شماره کار را وارد کنید تا مرتباً هماهنگ شود:" num
if ! [[ "$num" =~ ^[0-9]+$ ]]; then
echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!"
return
fi
echo "لطفاً فاصله اجرای به موقع را انتخاب کنید:"
echo "1) یک بار در ساعت اجرا کنید"
echo "2) یک بار در روز اجرا کنید"
echo "3) هفته ای یک بار اجرا کنید"
read -e -p "لطفاً گزینه ها را وارد کنید (1/2/3):" interval
local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数
local cron_time=""
case "$interval" in
1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行
2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行
3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行
*) echo "خطا: لطفاً یک گزینه معتبر وارد کنید!" ; return ;;
esac
local cron_job="$cron_time k rsync_run $num"
local cron_job="$cron_time k rsync_run $num"
# بررسی کنید که آیا همان کار قبلاً وجود دارد
if crontab -l | grep -q "k rsync_run $num"; then
echo "خطا: همگام سازی زمان این کار از قبل وجود دارد!"
return
fi
# یک crontab برای کاربر ایجاد کنید
(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
echo "کار زمان بندی ایجاد شده است:$cron_job"
}
# مشاهده وظایف برنامه ریزی شده
view_tasks() {
echo "کارهای زمان بندی فعلی:"
echo "---------------------------------"
crontab -l | grep "k rsync_run"
echo "---------------------------------"
}
# کارهای زمان بندی را حذف کنید
delete_task_schedule() {
send_stats "وظایف زمان بندی همگام سازی را حذف کنید"
read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num
if ! [[ "$num" =~ ^[0-9]+$ ]]; then
echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!"
return
fi
crontab -l | grep -v "k rsync_run $num" | crontab -
echo "شماره کار حذف شده$numکارهای زمان بندی"
}
# منوی اصلی مدیریت کار
rsync_manager() {
CONFIG_FILE="$HOME/.rsync_tasks"
CRON_FILE="$HOME/.rsync_cron"
while true; do
clear
echo "ابزار همگام سازی از راه دور RSYNC"
echo "هماهنگ سازی بین دایرکتوری های از راه دور از هماهنگ سازی افزایشی ، کارآمد و پایدار پشتیبانی می کند."
echo "---------------------------------"
list_tasks
echo
view_tasks
echo
echo "1. ایجاد یک کار جدید 2. یک کار را حذف کنید"
echo "3. هماهنگ سازی محلی را در انتهای از راه دور انجام دهید. هماهنگ سازی از راه دور را به انتهای محلی انجام دهید"
echo "5. یک کار زمان بندی ایجاد کنید 6. یک کار زمان بندی را حذف کنید"
echo "---------------------------------"
echo "0. به منوی قبلی برگردید"
echo "---------------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1) add_task ;;
2) delete_task ;;
3) run_task push;;
4) run_task pull;;
5) schedule_task ;;
6) delete_task_schedule ;;
0) break ;;
*) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;;
esac
read -e -p "برای ادامه ... Enter را فشار دهید ..."
done
}
linux_ps() {
clear
send_stats "پرس و جو اطلاعاتی سیستم"
ip_address
local cpu_info=$(lscpu | awk -F': +' '/Model name:/ {print $2; exit}')
local cpu_usage_percent=$(awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf "%.0f\n", (($2+$4-u1) * 100 / (t-t1))}' \
<(grep 'cpu ' /proc/stat) <(sleep 1; grep 'cpu ' /proc/stat))
local cpu_cores=$(nproc)
local cpu_freq=$(cat /proc/cpuinfo | grep "MHz" | head -n 1 | awk '{printf "%.1f GHz\n", $4/1000}')
local mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2fM (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}')
local disk_info=$(df -h | awk '$NF=="/"{printf "%s/%s (%s)", $3, $2, $5}')
local ipinfo=$(curl -s ipinfo.io)
local country=$(echo "$ipinfo" | grep 'country' | awk -F': ' '{print $2}' | tr -d '",')
local city=$(echo "$ipinfo" | grep 'city' | awk -F': ' '{print $2}' | tr -d '",')
local isp_info=$(echo "$ipinfo" | grep 'org' | awk -F': ' '{print $2}' | tr -d '",')
local load=$(uptime | awk '{print $(NF-2), $(NF-1), $NF}')
local dns_addresses=$(awk '/^nameserver/{printf "%s ", $2} END {print ""}' /etc/resolv.conf)
local cpu_arch=$(uname -m)
local hostname=$(uname -n)
local kernel_version=$(uname -r)
local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
local queue_algorithm=$(sysctl -n net.core.default_qdisc)
local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"')
output_status
local current_time=$(date "+%Y-%m-%d %I:%M %p")
local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}')
local runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}')
local timezone=$(current_timezone)
echo ""
echo -e "پرس و جو اطلاعاتی سیستم"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}نام میزبان:${gl_bai}$hostname"
echo -e "${gl_kjlan}نسخه سیستم:${gl_bai}$os_info"
echo -e "${gl_kjlan}نسخه لینوکس:${gl_bai}$kernel_version"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}معماری CPU:${gl_bai}$cpu_arch"
echo -e "${gl_kjlan}مدل CPU:${gl_bai}$cpu_info"
echo -e "${gl_kjlan}تعداد هسته های CPU:${gl_bai}$cpu_cores"
echo -e "${gl_kjlan}فرکانس CPU:${gl_bai}$cpu_freq"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}اشغال CPU:${gl_bai}$cpu_usage_percent%"
echo -e "${gl_kjlan}بار سیستم:${gl_bai}$load"
echo -e "${gl_kjlan}حافظه فیزیکی:${gl_bai}$mem_info"
echo -e "${gl_kjlan}حافظه مجازی:${gl_bai}$swap_info"
echo -e "${gl_kjlan}اشغال دیسک سخت:${gl_bai}$disk_info"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}$output"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}الگوریتم شبکه:${gl_bai}$congestion_algorithm $queue_algorithm"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}اپراتور:${gl_bai}$isp_info"
if [ -n "$ipv4_address" ]; then
echo -e "${gl_kjlan}آدرس IPv4:${gl_bai}$ipv4_address"
fi
if [ -n "$ipv6_address" ]; then
echo -e "${gl_kjlan}آدرس IPv6:${gl_bai}$ipv6_address"
fi
echo -e "${gl_kjlan}آدرس DNS:${gl_bai}$dns_addresses"
echo -e "${gl_kjlan}موقعیت جغرافیایی:${gl_bai}$country $city"
echo -e "${gl_kjlan}زمان سیستم:${gl_bai}$timezone $current_time"
echo -e "${gl_kjlan}-------------"
echo -e "${gl_kjlan}زمان اجرا:${gl_bai}$runtime"
echo
}
linux_tools() {
while true; do
clear
# send_stats "ابزارهای اساسی"
echo -e "ابزارهای اساسی"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}ابزار دانلود فرفری${gl_huang}${gl_bai} ${gl_kjlan}2. ${gl_bai}ابزار بارگیری Wget${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}3. ${gl_bai}ابزار مجوز مدیریت فوق العاده سودو${gl_kjlan}4. ${gl_bai}ابزار ارتباط ارتباطی SOCAT"
echo -e "${gl_kjlan}5. ${gl_bai}ابزار نظارت بر سیستم HTOP${gl_kjlan}6. ${gl_bai}ابزار نظارت بر ترافیک شبکه IFTOP"
echo -e "${gl_kjlan}7. ${gl_bai}ابزار فشرده سازی فشرده سازی زیپ از حالت فشرده${gl_kjlan}8. ${gl_bai}ابزار فشرده سازی فشرده سازی TAR GZ"
echo -e "${gl_kjlan}9. ${gl_bai}ابزار اجرای پس زمینه چند کانال Tmux${gl_kjlan}10. ${gl_bai}FFMPEG ویدیوی رمزگذاری ابزار پخش مستقیم"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}ابزارهای نظارت مدرن BTOP${gl_huang}${gl_bai} ${gl_kjlan}12. ${gl_bai}ابزار مدیریت پرونده"
echo -e "${gl_kjlan}13. ${gl_bai}ابزار مشاهده اشغال دیسک NCDU${gl_kjlan}14. ${gl_bai}ابزار جستجوی جهانی FZF"
echo -e "${gl_kjlan}15. ${gl_bai}ویرایشگر متن VIM${gl_kjlan}16. ${gl_bai}ویرایشگر متن نانو${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}17. ${gl_bai}سیستم کنترل نسخه GIT"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}21. ${gl_bai}ضمانت صفحه ماتریس${gl_kjlan}22. ${gl_bai}امنیت صفحه نمایش"
echo -e "${gl_kjlan}26. ${gl_bai}بازی تتریس${gl_kjlan}27. ${gl_bai}بازی خوردن مار"
echo -e "${gl_kjlan}28. ${gl_bai}بازی مهاجم فضا"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}31. ${gl_bai}همه را نصب کنید${gl_kjlan}32. ${gl_bai}همه نصب ها (به استثنای ذخیره کننده های صفحه نمایش و بازی)${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}33. ${gl_bai}حذف همه"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}41. ${gl_bai}ابزار مشخص شده را نصب کنید${gl_kjlan}42. ${gl_bai}ابزار مشخص شده را حذف کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
clear
install curl
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
curl --help
send_stats "پیچ را نصب کنید"
;;
2)
clear
install wget
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
wget --help
send_stats "نصب wget"
;;
3)
clear
install sudo
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
sudo --help
send_stats "sudo را نصب کنید"
;;
4)
clear
install socat
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
socat -h
send_stats "SOCAT را نصب کنید"
;;
5)
clear
install htop
clear
htop
send_stats "HTOP را نصب کنید"
;;
6)
clear
install iftop
clear
iftop
send_stats "iftop را نصب کنید"
;;
7)
clear
install unzip
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
unzip
send_stats "anzip را نصب کنید"
;;
8)
clear
install tar
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
tar --help
send_stats "تار نصب"
;;
9)
clear
install tmux
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
tmux --help
send_stats "نصب tmux"
;;
10)
clear
install ffmpeg
clear
echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:"
ffmpeg --help
send_stats "نصب ffmpeg"
;;
11)
clear
install btop
clear
btop
send_stats "BTOP را نصب کنید"
;;
12)
clear
install ranger
cd /
clear
ranger
cd ~
send_stats "Ranger را نصب کنید"
;;
13)
clear
install ncdu
cd /
clear
ncdu
cd ~
send_stats "NCDU را نصب کنید"
;;
14)
clear
install fzf
cd /
clear
fzf
cd ~
send_stats "FZF را نصب کنید"
;;
15)
clear
install vim
cd /
clear
vim -h
cd ~
send_stats "نصب ویم"
;;
16)
clear
install nano
cd /
clear
nano -h
cd ~
send_stats "نانو را نصب کنید"
;;
17)
clear
install git
cd /
clear
git --help
cd ~
send_stats "git را نصب کنید"
;;
21)
clear
install cmatrix
clear
cmatrix
send_stats "نصب cmatrix"
;;
22)
clear
install sl
clear
sl
send_stats "نصب SL"
;;
26)
clear
install bastet
clear
bastet
send_stats "باست را نصب کنید"
;;
27)
clear
install nsnake
clear
nsnake
send_stats "nsnake را نصب کنید"
;;
28)
clear
install ninvaders
clear
ninvaders
send_stats "ninvaders را نصب کنید"
;;
31)
clear
send_stats "همه را نصب کنید"
install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git
;;
32)
clear
send_stats "نصب همه (به استثنای بازی ها و ذخیره های صفحه نمایش)"
install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git
;;
33)
clear
send_stats "حذف همه"
remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git
;;
41)
clear
read -e -p "لطفاً نام ابزار نصب شده را وارد کنید (wget curl sudo htop):" installname
install $installname
send_stats "نرم افزار مشخص شده را نصب کنید"
;;
42)
clear
read -e -p "لطفاً نام ابزار حذف شده را وارد کنید (HTOP UFW TMUX CMATRIX):" removename
remove $removename
send_stats "نرم افزار مشخص شده را حذف کنید"
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_bbr() {
clear
send_stats "مدیریت BBR"
if [ -f "/etc/alpine-release" ]; then
while true; do
clear
local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
local queue_algorithm=$(sysctl -n net.core.default_qdisc)
echo "الگوریتم مسدود کننده TCP فعلی:$congestion_algorithm $queue_algorithm"
echo ""
echo "مدیریت BBR"
echo "------------------------"
echo "1. BBRV3 را روشن کنید. BBRV3 را خاموش کنید (راه اندازی مجدد)"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
bbr_on
send_stats "Alpine BBR3 را فعال کنید"
;;
2)
sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf
sysctl -p
server_reboot
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
else
install wget
wget --no-check-certificate -O tcpx.sh ${gh_proxy}raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcpx.sh
chmod +x tcpx.sh
./tcpx.sh
fi
}
linux_docker() {
while true; do
clear
# Send_stats "مدیریت داکر"
echo -e "مدیریت داکر"
docker_tato
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}محیط داکر را نصب و به روز کنید${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}2. ${gl_bai}مشاهده وضعیت جهانی Docker${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}3. ${gl_bai}مدیریت کانتینر داکر${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}4. ${gl_bai}مدیریت تصویر داکر"
echo -e "${gl_kjlan}5. ${gl_bai}مدیریت شبکه داکر"
echo -e "${gl_kjlan}6. ${gl_bai}مدیریت حجم داکر"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}7. ${gl_bai}ظروف داکر بی فایده و حجم داده های شبکه آینه را تمیز کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}8. ${gl_bai}منبع Docker را جایگزین کنید"
echo -e "${gl_kjlan}9. ${gl_bai}پرونده daemon.json را ویرایش کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}دسترسی Docker-IPV6 را فعال کنید"
echo -e "${gl_kjlan}12. ${gl_bai}دسترسی نزدیک Docker-IPV6"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}20. ${gl_bai}محیط داکر را حذف کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
clear
send_stats "محیط داکر را نصب کنید"
install_add_docker
;;
2)
clear
local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
local image_count=$(docker images -q 2>/dev/null | wc -l)
local network_count=$(docker network ls -q 2>/dev/null | wc -l)
local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)
send_stats "داکر وضعیت جهانی"
echo "نسخه داکر"
docker -v
docker compose version
echo ""
echo -e "تصویر داکر:${gl_lv}$image_count${gl_bai} "
docker image ls
echo ""
echo -e "ظرف داکر:${gl_lv}$container_count${gl_bai}"
docker ps -a
echo ""
echo -e "حجم داکر:${gl_lv}$volume_count${gl_bai}"
docker volume ls
echo ""
echo -e "شبکه داکر:${gl_lv}$network_count${gl_bai}"
docker network ls
echo ""
;;
3)
docker_ps
;;
4)
docker_image
;;
5)
while true; do
clear
send_stats "مدیریت شبکه داکر"
echo "لیست شبکه داکر"
echo "------------------------------------------------------------"
docker network ls
echo ""
echo "------------------------------------------------------------"
container_ids=$(docker ps -q)
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
for container_id in $container_ids; do
local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
local container_name=$(echo "$container_info" | awk '{print $1}')
local network_info=$(echo "$container_info" | cut -d' ' -f2-)
while IFS= read -r line; do
local network_name=$(echo "$line" | awk '{print $1}')
local ip_address=$(echo "$line" | awk '{print $2}')
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
done <<< "$network_info"
done
echo ""
echo "شبکه"
echo "------------------------"
echo "1. ایجاد یک شبکه"
echo "2. به اینترنت بپیوندید"
echo "3. از شبکه خارج شوید"
echo "4. شبکه را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "ایجاد یک شبکه"
read -e -p "یک نام شبکه جدید تنظیم کنید:" dockernetwork
docker network create $dockernetwork
;;
2)
send_stats "به اینترنت بپیوندید"
read -e -p "به نام شبکه بپیوندید:" dockernetwork
read -e -p "این ظروف به شبکه اضافه می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames
for dockername in $dockernames; do
docker network connect $dockernetwork $dockername
done
;;
3)
send_stats "به اینترنت بپیوندید"
read -e -p "نام شبکه خروجی:" dockernetwork
read -e -p "این ظروف از شبکه خارج می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames
for dockername in $dockernames; do
docker network disconnect $dockernetwork $dockername
done
;;
4)
send_stats "شبکه را حذف کنید"
read -e -p "لطفاً نام شبکه را وارد کنید تا حذف شود:" dockernetwork
docker network rm $dockernetwork
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
6)
while true; do
clear
send_stats "مدیریت حجم داکر"
echo "لیست حجم داکر"
docker volume ls
echo ""
echo "عملیات حجم"
echo "------------------------"
echo "1. یک جلد جدید ایجاد کنید"
echo "2. حجم مشخص شده را حذف کنید"
echo "3. همه جلد ها را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "یک جلد جدید ایجاد کنید"
read -e -p "نام جلد جدید را تنظیم کنید:" dockerjuan
docker volume create $dockerjuan
;;
2)
read -e -p "نام حجم حذف را وارد کنید (لطفاً چندین نام حجم را با فضاها جدا کنید):" dockerjuans
for dockerjuan in $dockerjuans; do
docker volume rm $dockerjuan
done
;;
3)
send_stats "همه حجم ها را حذف کنید"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker volume prune -f
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
7)
clear
send_stats "تمیز کردن داکر"
read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker system prune -af --volumes
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
8)
clear
send_stats "منبع"
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
;;
9)
clear
install nano
mkdir -p /etc/docker && nano /etc/docker/daemon.json
restart docker
;;
11)
clear
send_stats "Docker V6 باز است"
docker_ipv6_on
;;
12)
clear
send_stats "Docker V6 سطح"
docker_ipv6_off
;;
20)
clear
send_stats "داکر حذف نصب"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗(Y/N): ")" choice
case "$choice" in
[Yy])
docker ps -a -q | xargs -r docker rm -f && docker images -q | xargs -r docker rmi && docker network prune -f && docker volume prune -f
remove docker docker-compose docker-ce docker-ce-cli containerd.io
rm -f /etc/docker/daemon.json
hash -r
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_test() {
while true; do
clear
# send_stats "مجموعه اسکریپت تست"
echo -e "مجموعه اسکریپت تست"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}تشخیص وضعیت IP و باز کردن وضعیت"
echo -e "${gl_kjlan}1. ${gl_bai}تشخیص وضعیت قفل chatgpt"
echo -e "${gl_kjlan}2. ${gl_bai}تست قفل رسانه جریان منطقه"
echo -e "${gl_kjlan}3. ${gl_bai}Yeahwu Streaming Media Detection Ollock"
echo -e "${gl_kjlan}4. ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت IP Xykt${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}اندازه گیری سرعت شبکه"
echo -e "${gl_kjlan}11. ${gl_bai}BestTrace سه تست مسیریابی تأخیر Backhaul Network"
echo -e "${gl_kjlan}12. ${gl_bai}تست خط سه شبکه MTR_TRACE"
echo -e "${gl_kjlan}13. ${gl_bai}اندازه گیری سرعت سه شبکه فوق العاده"
echo -e "${gl_kjlan}14. ${gl_bai}اسکریپت تست Backhaul NxTrace"
echo -e "${gl_kjlan}15. ${gl_bai}NxTrace اسکریپت تست Backhaul IP را مشخص می کند"
echo -e "${gl_kjlan}16. ${gl_bai}آزمون خط سه شبکه Ludashi2020"
echo -e "${gl_kjlan}17. ${gl_bai}اسکریپت تست سرعت چند منظوره I-ABC"
echo -e "${gl_kjlan}18. ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت شبکه NetQuality${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}تست عملکرد سخت افزار"
echo -e "${gl_kjlan}21. ${gl_bai}تست عملکرد YABS"
echo -e "${gl_kjlan}22. ${gl_bai}اسکریپت تست عملکرد CPU IICU/GB5"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}تست جامع"
echo -e "${gl_kjlan}31. ${gl_bai}تست عملکرد نیمکت"
echo -e "${gl_kjlan}32. ${gl_bai}بررسی هیولا فیوژن SpiritySDX${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
clear
send_stats "تشخیص وضعیت قفل chatgpt"
bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh)
;;
2)
clear
send_stats "تست قفل رسانه جریان منطقه"
bash <(curl -L -s check.unlock.media)
;;
3)
clear
send_stats "Yeahwu Streaming Media Detection Ollock"
install wget
wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash
;;
4)
clear
send_stats "اسکریپت معاینه فیزیکی با کیفیت xykt_ip"
bash <(curl -Ls IP.Check.Place)
;;
11)
clear
send_stats "BestTrace سه تست مسیریابی تأخیر Backhaul Network"
install wget
wget -qO- git.io/besttrace | bash
;;
12)
clear
send_stats "MTR_TRACE سه تست خط بازگشت شبکه"
curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash
;;
13)
clear
send_stats "اندازه گیری سرعت سه شبکه فوق العاده"
bash <(curl -Lso- https://git.io/superspeed_uxh)
;;
14)
clear
send_stats "اسکریپت تست Backhaul NxTrace"
curl nxtrace.org/nt |bash
nexttrace --fast-trace --tcp
;;
15)
clear
send_stats "NxTrace اسکریپت تست Backhaul IP را مشخص می کند"
echo "لیست IP هایی که می توانند ارجاع شوند"
echo "------------------------"
echo "مخابرات پکن: 219.141.136.12"
echo "پکن یونیکوم: 202.106.50.1"
echo "موبایل پکن: 221.179.155.161"
echo "مخابرات شانگهای: 202.96.209.133"
echo "شانگهای یونیکوم: 210.22.97.1"
echo "موبایل شانگهای: 211.136.112.200"
echo "Telecom Guangzhou: 58.60.188.222"
echo "Guangzhou Unicom: 210.21.196.6"
echo "موبایل گوانگژو: 120.196.165.24"
echo "چنگدو از راه دور: 61.139.2.69"
echo "چنگدو یونیکوم: 119.6.6.6"
echo "Chengdu Mobile: 211.137.96.205"
echo "Hunan Telecom: 36.111.200.100"
echo "Hunan Unicom: 42.48.16.100"
echo "Hunan Mobile: 39.134.254.6"
echo "------------------------"
read -e -p "یک IP مشخص را وارد کنید:" testip
curl nxtrace.org/nt |bash
nexttrace $testip
;;
16)
clear
send_stats "آزمون خط سه شبکه Ludashi2020"
curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh
;;
17)
clear
send_stats "اسکریپت تست سرعت چند منظوره I-ABC"
bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh)
;;
18)
clear
send_stats "اسکریپت تست کیفیت شبکه"
bash <(curl -sL Net.Check.Place)
;;
21)
clear
send_stats "تست عملکرد YABS"
check_swap
curl -sL yabs.sh | bash -s -- -i -5
;;
22)
clear
send_stats "اسکریپت تست عملکرد CPU IICU/GB5"
check_swap
bash <(curl -sL bash.icu/gb5)
;;
31)
clear
send_stats "تست عملکرد نیمکت"
curl -Lso- bench.sh | bash
;;
32)
send_stats "بررسی هیولا فیوژن SpiritySDX"
clear
curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_Oracle() {
while true; do
clear
send_stats "مجموعه اسکریپت Oracle Cloud"
echo -e "مجموعه اسکریپت Oracle Cloud"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}اسکریپت فعال دستگاه بیکار را نصب کنید"
echo -e "${gl_kjlan}2. ${gl_bai}اسکریپت فعال دستگاه بیکار را حذف نصب کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}3. ${gl_bai}DD اسکریپت سیستم را دوباره نصب کنید"
echo -e "${gl_kjlan}4. ${gl_bai}کارآگاه r فیلمنامه را شروع کنید"
echo -e "${gl_kjlan}5. ${gl_bai}حالت ورود به سیستم رمز عبور را روشن کنید"
echo -e "${gl_kjlan}6. ${gl_bai}ابزار بازیابی IPv6"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
clear
echo "اسکریپت فعال: CPU 10-20 ٪ حافظه 20 ٪ اشغال می کند"
read -e -p "آیا مطمئناً آن را نصب می کنید؟ (y/n):" choice
case "$choice" in
[Yy])
install_docker
# مقادیر پیش فرض را تنظیم کنید
local DEFAULT_CPU_CORE=1
local DEFAULT_CPU_UTIL="10-20"
local DEFAULT_MEM_UTIL=20
local DEFAULT_SPEEDTEST_INTERVAL=120
# کاربر را وادار کنید تا تعداد هسته های CPU و درصد اشغال را وارد کند و در صورت ورود ، از مقدار پیش فرض استفاده کنید.
read -e -p "لطفاً تعداد هسته های CPU را وارد کنید [پیش فرض:$DEFAULT_CPU_CORE]: " cpu_core
local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE}
read -e -p "لطفاً محدوده درصد استفاده از CPU را وارد کنید (به عنوان مثال ، 10-20) [پیش فرض:$DEFAULT_CPU_UTIL]: " cpu_util
local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL}
read -e -p "لطفاً درصد استفاده از حافظه را وارد کنید [پیش فرض:$DEFAULT_MEM_UTIL]: " mem_util
local mem_util=${mem_util:-$DEFAULT_MEM_UTIL}
read -e -p "لطفاً زمان فاصله زمانی (ثانیه) را وارد کنید [پیش فرض:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval
local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL}
# ظرف داکر را اجرا کنید
docker run -itd --name=lookbusy --restart=always \
-e TZ=Asia/Shanghai \
-e CPU_UTIL="$cpu_util" \
-e CPU_CORE="$cpu_core" \
-e MEM_UTIL="$mem_util" \
-e SPEEDTEST_INTERVAL="$speedtest_interval" \
fogforest/lookbusy
send_stats "اسکریپت فعال نصب Oracle Cloud"
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
2)
clear
docker rm -f lookbusy
docker rmi fogforest/lookbusy
send_stats "Oracle Cloud اسکریپت فعال را حذف نصب کرد"
;;
3)
clear
echo "نصب مجدد سیستم"
echo "--------------------------------"
echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید."
read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice
case "$choice" in
[Yy])
while true; do
read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید: 1. Debian12 | 2. Ubuntu20.04:" sys_choice
case "$sys_choice" in
1)
local xitong="-d 12"
break # 结束循环
;;
2)
local xitong="-u 20.04"
break # 结束循环
;;
*)
echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید."
;;
esac
done
read -e -p "لطفاً رمز ورود مجدد خود را وارد کنید:" vpspasswd
install wget
bash <(wget --no-check-certificate -qO- "${gh_proxy}raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh") $xitong -v 64 -p $vpspasswd -port 22
send_stats "Oracle Cloud دوباره نصب اسکریپت سیستم"
;;
[Nn])
echo "لغو شده"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
4)
clear
echo "این ویژگی در مرحله توسعه است ، بنابراین با ما همراه باشید!"
;;
5)
clear
add_sshpasswd
;;
6)
clear
bash <(curl -L -s jhb.ovh/jb/v6.sh)
echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!"
send_stats "رفع IPv6"
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
docker_tato() {
local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
local image_count=$(docker images -q 2>/dev/null | wc -l)
local network_count=$(docker network ls -q 2>/dev/null | wc -l)
local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)
if command -v docker &> /dev/null; then
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_lv}محیط نصب شده است${gl_bai}ظرف:${gl_lv}$container_count${gl_bai}آینه:${gl_lv}$image_count${gl_bai}شبکه:${gl_lv}$network_count${gl_bai}رول:${gl_lv}$volume_count${gl_bai}"
fi
}
ldnmp_tato() {
local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l)
local output="站点: ${gl_lv}${cert_count}${gl_bai}"
local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml 2>/dev/null | tr -d '[:space:]')
if [ -n "$dbrootpasswd" ]; then
local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2>/dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l)
fi
local db_output="数据库: ${gl_lv}${db_count}${gl_bai}"
if command -v docker &>/dev/null; then
if docker ps --filter "name=nginx" --filter "status=running" | grep -q nginx; then
echo -e "${gl_huang}------------------------"
echo -e "${gl_lv}محیط نصب شده است${gl_bai} $output $db_output"
fi
fi
}
fix_phpfpm_conf() {
local container_name=$1
docker exec "$container_name" sh -c "mkdir -p /run/$container_name && chmod 777 /run/$container_name"
docker exec "$container_name" sh -c "sed -i '1i [global]\\ndaemonize = no' /usr/local/etc/php-fpm.d/www.conf"
docker exec "$container_name" sh -c "sed -i '/^listen =/d' /usr/local/etc/php-fpm.d/www.conf"
docker exec "$container_name" sh -c "echo -e '\nlisten = /run/$container_name/php-fpm.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0777' >> /usr/local/etc/php-fpm.d/www.conf"
docker exec "$container_name" sh -c "rm -f /usr/local/etc/php-fpm.d/zz-docker.conf"
find /home/web/conf.d/ -type f -name "*.conf" -exec sed -i "s#fastcgi_pass ${container_name}:9000;#fastcgi_pass unix:/run/${container_name}/php-fpm.sock;#g" {} \;
}
linux_ldnmp() {
while true; do
clear
# SEND_STATS "ساختمان وب سایت LDNMP"
echo -e "${gl_huang}ساختمان وب سایت LDNMP"
ldnmp_tato
echo -e "${gl_huang}------------------------"
echo -e "${gl_huang}1. ${gl_bai}محیط LDNMP را نصب کنید${gl_huang}${gl_bai} ${gl_huang}2. ${gl_bai}وردپرس را نصب کنید${gl_huang}${gl_bai}"
echo -e "${gl_huang}3. ${gl_bai}تالار گفتمان دیسکو را نصب کنید${gl_huang}4. ${gl_bai}دسک تاپ Kadao Cloud را نصب کنید"
echo -e "${gl_huang}5. ${gl_bai}ایستگاه فیلم و تلویزیون Apple CMS را نصب کنید${gl_huang}6. ${gl_bai}یک شبکه کارت دیجیتال Unicorn نصب کنید"
echo -e "${gl_huang}7. ${gl_bai}وب سایت Flarum Forum را نصب کنید${gl_huang}8. ${gl_bai}وب سایت وبلاگ سبک Typecho را نصب کنید"
echo -e "${gl_huang}9. ${gl_bai}بستر لینک مشترک Linkstack را نصب کنید${gl_huang}20. ${gl_bai}سایت پویا را سفارشی کنید"
echo -e "${gl_huang}------------------------"
echo -e "${gl_huang}21. ${gl_bai}فقط nginx را نصب کنید${gl_huang}${gl_bai} ${gl_huang}22. ${gl_bai}هدایت سایت"
echo -e "${gl_huang}23. ${gl_bai}پورت معکوس Proxy-IP+${gl_huang}${gl_bai} ${gl_huang}24. ${gl_bai}پروکسی معکوس سایت - نام دامنه"
echo -e "${gl_huang}25. ${gl_bai}بستر مدیریت رمز عبور Bitwarden را نصب کنید${gl_huang}26. ${gl_bai}وب سایت وبلاگ هاله را نصب کنید"
echo -e "${gl_huang}27. ${gl_bai}Generator Word Prompt Word Painting AI را نصب کنید${gl_huang}28. ${gl_bai}تعادل بار پروکسی معکوس سایت"
echo -e "${gl_huang}30. ${gl_bai}سایت استاتیک را سفارشی کنید"
echo -e "${gl_huang}------------------------"
echo -e "${gl_huang}31. ${gl_bai}مدیریت داده های سایت${gl_huang}${gl_bai} ${gl_huang}32. ${gl_bai}از کل داده های سایت پشتیبان تهیه کنید"
echo -e "${gl_huang}33. ${gl_bai}پشتیبان گیری از راه دور به موقع${gl_huang}34. ${gl_bai}کل داده های سایت را بازیابی کنید"
echo -e "${gl_huang}------------------------"
echo -e "${gl_huang}35. ${gl_bai}محافظت از محیط LDNMP${gl_huang}36. ${gl_bai}محیط LDNMP را بهینه کنید"
echo -e "${gl_huang}37. ${gl_bai}محیط LDNMP را به روز کنید${gl_huang}38. ${gl_bai}حذف محیط LDNMP"
echo -e "${gl_huang}------------------------"
echo -e "${gl_huang}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_huang}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
ldnmp_install_status_one
ldnmp_install_all
;;
2)
ldnmp_wp
;;
3)
clear
# تالار گفتمان
webname="Discuz论坛"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/discuz.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20240520.zip
unzip latest.zip
rm latest.zip
restart_ldnmp
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "پیشوند جدول: discuz_"
;;
4)
clear
# دسک تاپ کدا
webname="可道云桌面"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/kdy.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget -O latest.zip ${gh_proxy}github.com/kalcaddle/kodbox/archive/refs/tags/1.50.02.zip
unzip -o latest.zip
rm latest.zip
mv /home/web/html/$yuming/kodbox* /home/web/html/$yuming/kodbox
restart_ldnmp
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "نام بانک اطلاعاتی:$dbname"
echo "میزبان redis: redis"
;;
5)
clear
# CM Apple
webname="苹果CMS"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/maccms.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
# wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && rm maccms10.zip
wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && mv maccms10-*/* . && rm -r maccms10-* && rm maccms10.zip
cd /home/web/html/$yuming/template/ && wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/DYXS2.zip && unzip DYXS2.zip && rm /home/web/html/$yuming/template/DYXS2.zip
cp /home/web/html/$yuming/template/DYXS2/asset/admin/Dyxs2.php /home/web/html/$yuming/application/admin/controller
cp /home/web/html/$yuming/template/DYXS2/asset/admin/dycms.html /home/web/html/$yuming/application/admin/view/system
mv /home/web/html/$yuming/admin.php /home/web/html/$yuming/vip.php && wget -O /home/web/html/$yuming/application/extra/maccms.php ${gh_proxy}raw.githubusercontent.com/kejilion/Website_source_code/main/maccms.php
restart_ldnmp
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "درگاه پایگاه داده: 3306"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "پیشوند پایگاه داده: MAC_"
echo "------------------------"
echo "پس از موفقیت نصب ، وارد آدرس پس زمینه شوید"
echo "https://$yuming/vip.php"
;;
6)
clear
# کارت شمارش یک پا
webname="独脚数卡"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/dujiaoka.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget ${gh_proxy}github.com/assimon/dujiaoka/releases/download/2.0.6/2.0.6-antibody.tar.gz && tar -zxvf 2.0.6-antibody.tar.gz && rm 2.0.6-antibody.tar.gz
restart_ldnmp
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "درگاه پایگاه داده: 3306"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo ""
echo "آدرس redis: redis"
echo "رمز عبور redis: به طور پیش فرض پر نشده است"
echo "بندر ردیس: 6379"
echo ""
echo "URL وب سایت: https: //$yuming"
echo "مسیر ورود به سیستم پس زمینه: /مدیر"
echo "------------------------"
echo "نام کاربری: مدیر"
echo "رمز عبور: مدیر"
echo "------------------------"
echo "اگر Red Error0 هنگام ورود به سیستم در گوشه سمت راست بالا ظاهر می شود ، لطفاً از دستور زیر استفاده کنید:"
echo "من همچنین بسیار عصبانی هستم که کارت شماره یونیکورن بسیار مشکل ساز است و چنین مشکلاتی وجود خواهد داشت!"
echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env"
;;
7)
clear
# انجمن
webname="flarum论坛"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/flarum.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini
cd /home/web/html
mkdir $yuming
cd $yuming
docker exec php sh -c "php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\""
docker exec php sh -c "php composer-setup.php"
docker exec php sh -c "php -r \"unlink('composer-setup.php');\""
docker exec php sh -c "mv composer.phar /usr/local/bin/composer"
docker exec php composer create-project flarum/flarum /var/www/html/$yuming
docker exec php sh -c "cd /var/www/html/$yuming && composer require flarum-lang/chinese-simplified"
docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/polls"
docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/sitemap"
docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/oauth"
docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/best-answer:*"
docker exec php sh -c "cd /var/www/html/$yuming && composer require v17development/flarum-seo"
docker exec php sh -c "cd /var/www/html/$yuming && composer require clarkwinkelmann/flarum-ext-emojionearea"
restart_ldnmp
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "پیشوند جدول: flarum_"
echo "اطلاعات سرپرست توسط خودتان تنظیم شده است"
;;
8)
clear
# typecho
webname="typecho"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/typecho.com.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget -O latest.zip ${gh_proxy}github.com/typecho/typecho/releases/latest/download/typecho.zip
unzip latest.zip
rm latest.zip
restart_ldnmp
clear
ldnmp_web_on
echo "پیشوند پایگاه داده: typecho_"
echo "آدرس پایگاه داده: MySQL"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "نام بانک اطلاعاتی:$dbname"
;;
9)
clear
# LinkStack
webname="LinkStack"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/refs/heads/main/index_php.conf
sed -i "s|/var/www/html/yuming.com/|/var/www/html/yuming.com/linkstack|g" /home/web/conf.d/$yuming.conf
sed -i "s|yuming.com|$yuming|g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget -O latest.zip ${gh_proxy}github.com/linkstackorg/linkstack/releases/latest/download/linkstack.zip
unzip latest.zip
rm latest.zip
restart_ldnmp
clear
ldnmp_web_on
echo "آدرس پایگاه داده: MySQL"
echo "درگاه پایگاه داده: 3306"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
;;
20)
clear
webname="PHP动态站点"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
ldnmp_install_status
install_ssltls
certs_status
add_db
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/index_php.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
clear
echo -e "[${gl_huang}1/6${gl_bai}] کد منبع PHP را بارگذاری کنید"
echo "-------------"
echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست"
read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download
if [ -n "$url_download" ]; then
wget "$url_download"
fi
unzip $(ls -t *.zip | head -n 1)
rm -f $(ls -t *.zip | head -n 1)
clear
echo -e "[${gl_huang}2/6${gl_bai}] مسیری که در آن index.php قرار دارد"
echo "-------------"
# find "$(realpath .)" -name "index.php" -print
find "$(realpath .)" -name "index.php" -print | xargs -I {} dirname {}
read -e -p "لطفاً مسیر index.php را وارد کنید ، مشابه (/home/web/html/$yuming/wordpress/ " index_lujing
sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf
sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf
clear
echo -e "[${gl_huang}3/6${gl_bai}] لطفاً نسخه PHP را انتخاب کنید"
echo "-------------"
read -e -p "1. آخرین نسخه PHP | 2. PHP7.4:" pho_v
case "$pho_v" in
1)
sed -i "s#php:9000#php:9000#g" /home/web/conf.d/$yuming.conf
local PHP_Version="php"
;;
2)
sed -i "s#php:9000#php74:9000#g" /home/web/conf.d/$yuming.conf
local PHP_Version="php74"
;;
*)
echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید."
;;
esac
clear
echo -e "[${gl_huang}4/6${gl_bai}] پسوند مشخص شده را نصب کنید"
echo "-------------"
echo "پسوند نصب شده"
docker exec php php -m
read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 ")" php_extensions
if [ -n "$php_extensions" ]; then
docker exec $PHP_Version install-php-extensions $php_extensions
fi
clear
echo -e "[${gl_huang}5/6${gl_bai}] پیکربندی سایت را ویرایش کنید"
echo "-------------"
echo "برای ادامه هر کلید ، هر کلید را فشار دهید ، و می توانید پیکربندی سایت را با جزئیات ، مانند محتوای شبه استاتیک و غیره تنظیم کنید."
read -n 1 -s -r -p ""
install nano
nano /home/web/conf.d/$yuming.conf
clear
echo -e "[${gl_huang}6/6${gl_bai}] مدیریت پایگاه داده"
echo "-------------"
read -e -p "1. من یک سایت جدید می سازم. من یک سایت قدیمی می سازم و یک نسخه پشتیبان از پایگاه داده دارم:" use_db
case $use_db in
1)
echo
;;
2)
echo "پشتیبان گیری از پایگاه داده باید یک بسته فشرده شده .GZ-end باشد. لطفاً آن را در/خانه/فهرست قرار دهید تا از واردات داده های پشتیبان Pagoda/1Panel پشتیبانی کنید."
read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور داده های پشتیبان وارد کنید. مستقیماً Enter را فشار دهید از راه دور بارگیری می شود:" url_download_db
cd /home/
if [ -n "$url_download_db" ]; then
wget "$url_download_db"
fi
gunzip $(ls -t *.gz | head -n 1)
latest_sql=$(ls -t *.sql | head -n 1)
dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]')
docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname < "/home/$latest_sql"
echo "داده های جدول واردات پایگاه داده"
docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;"
rm -f *.sql
echo "واردات پایگاه داده تکمیل شد"
;;
*)
echo
;;
esac
docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini
restart_ldnmp
ldnmp_web_on
prefix="web$(shuf -i 10-99 -n 1)_"
echo "آدرس پایگاه داده: MySQL"
echo "نام بانک اطلاعاتی:$dbname"
echo "نام کاربری:$dbuse"
echo "رمز عبور:$dbusepasswd"
echo "پیشوند جدول:$prefix"
echo "اطلاعات ورود به سیستم توسط خود شما تنظیم شده است"
;;
21)
ldnmp_install_status_one
nginx_install_all
;;
22)
clear
webname="站点重定向"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
read -e -p "لطفاً نام دامنه پرش را وارد کنید:" reverseproxy
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/rewrite.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
sed -i "s/baidu.com/$reverseproxy/g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec nginx nginx -s reload
nginx_web_on
;;
23)
ldnmp_Proxy
;;
24)
clear
webname="反向代理-域名"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
echo -e "قالب نام دامنه:${gl_huang}google.com${gl_bai}"
read -e -p "لطفاً نام دامنه ضد نسل خود را وارد کنید:" fandai_yuming
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
sed -i "s|fandaicom|$fandai_yuming|g" /home/web/conf.d/$yuming.conf
nginx_http_on
docker exec nginx nginx -s reload
nginx_web_on
;;
25)
clear
webname="Bitwarden"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
nginx_install_status
install_ssltls
certs_status
docker run -d \
--name bitwarden \
--restart always \
-p 3280:80 \
-v /home/web/html/$yuming/bitwarden/data:/data \
vaultwarden/server
duankou=3280
reverse_proxy
nginx_web_on
;;
26)
clear
webname="halo"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
nginx_install_status
install_ssltls
certs_status
docker run -d --name halo --restart always -p 8010:8090 -v /home/web/html/$yuming/.halo2:/root/.halo2 halohub/halo:2
duankou=8010
reverse_proxy
nginx_web_on
;;
27)
clear
webname="AI绘画提示词生成器"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/ai_prompt_generator.zip
unzip $(ls -t *.zip | head -n 1)
rm -f $(ls -t *.zip | head -n 1)
docker exec nginx chmod -R nginx:nginx /var/www/html
docker exec nginx nginx -s reload
nginx_web_on
;;
28)
ldnmp_Proxy_backend
;;
30)
clear
webname="静态站点"
send_stats "نصب کردن$webname"
echo "استقرار را شروع کنید$webname"
add_yuming
repeat_add_yuming
nginx_install_status
install_ssltls
certs_status
wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf
sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf
nginx_http_on
cd /home/web/html
mkdir $yuming
cd $yuming
clear
echo -e "[${gl_huang}1/2${gl_bai}] کد منبع استاتیک را بارگذاری کنید"
echo "-------------"
echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست"
read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download
if [ -n "$url_download" ]; then
wget "$url_download"
fi
unzip $(ls -t *.zip | head -n 1)
rm -f $(ls -t *.zip | head -n 1)
clear
echo -e "[${gl_huang}2/2${gl_bai}] مسیری که در آن index.html واقع شده است"
echo "-------------"
# find "$(realpath .)" -name "index.html" -print
find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {}
read -e -p "لطفاً مسیر index.html را وارد کنید ، مشابه (/home/web/html/$yuming/index/ " index_lujing
sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf
sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf
docker exec nginx chmod -R nginx:nginx /var/www/html
docker exec nginx nginx -s reload
nginx_web_on
;;
31)
ldnmp_web_status
;;
32)
clear
send_stats "نسخه پشتیبان از محیط زیست LDNMP"
local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz"
echo -e "${gl_huang}پشتیبان گیری$backup_filename ...${gl_bai}"
cd /home/ && tar czvf "$backup_filename" web
while true; do
clear
echo "پرونده پشتیبان ایجاد شده است: /صفحه اصلی$backup_filename"
read -e -p "آیا می خواهید داده های پشتیبان را به یک سرور از راه دور منتقل کنید؟ (y/n):" choice
case "$choice" in
[Yy])
read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip
if [ -z "$remote_ip" ]; then
echo "خطا: لطفاً IP از راه دور سرور را وارد کنید."
continue
fi
local latest_tar=$(ls -t /home/*.tar.gz | head -1)
if [ -n "$latest_tar" ]; then
ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip"
sleep 2 # 添加等待时间
scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/"
echo "این پرونده به دایرکتوری خانه از راه دور سرور منتقل شده است."
else
echo "پرونده منتقل شده یافت نشد."
fi
break
;;
[Nn])
break
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
done
;;
33)
clear
send_stats "پشتیبان گیری از راه دور به موقع"
read -e -p "IP سرور از راه دور را وارد کنید:" useip
read -e -p "رمز ورود سرور از راه دور را وارد کنید:" usepasswd
cd ~
wget -O ${useip}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1
chmod +x ${useip}_beifen.sh
sed -i "s/0.0.0.0/$useip/g" ${useip}_beifen.sh
sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh
echo "------------------------"
echo "1. پشتیبان گیری هفتگی 2. پشتیبان گیری روزانه"
read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi
case $dingshi in
1)
check_crontab_installed
read -e -p "روز هفته را برای پشتیبان گیری هفتگی خود انتخاب کنید (0-6 ، 0 نشان دهنده یکشنبه):" weekday
(crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1
;;
2)
check_crontab_installed
read -e -p "زمان پشتیبان گیری روزانه (ساعت ، 0-23) را انتخاب کنید:" hour
(crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1
;;
*)
break # 跳出
;;
esac
install sshpass
;;
34)
root_use
send_stats "ترمیم محیط LDNMP"
echo "پشتیبان گیری سایت موجود"
echo "-------------------------"
ls -lt /home/*.gz | awk '{print $NF}'
echo ""
read -e -p "برای بازیابی آخرین نسخه پشتیبان وارد شوید ، نام فایل پشتیبان را وارد کنید تا نسخه پشتیبان تهیه شده را بازیابی کنید ، 0 را وارد کنید تا از آن خارج شوید:" filename
if [ "$filename" == "0" ]; then
break_end
linux_ldnmp
fi
# اگر کاربر نام پرونده را وارد نکرد ، از آخرین بسته فشرده شده استفاده کنید
if [ -z "$filename" ]; then
local filename=$(ls -t /home/*.tar.gz | head -1)
fi
if [ -n "$filename" ]; then
cd /home/web/ > /dev/null 2>&1
docker compose down > /dev/null 2>&1
rm -rf /home/web > /dev/null 2>&1
echo -e "${gl_huang}رفع فشار انجام می شود$filename ...${gl_bai}"
cd /home/ && tar -xzf "$filename"
check_port
install_dependency
install_docker
install_certbot
install_ldnmp
else
echo "هیچ بسته فشرده سازی یافت نشد."
fi
;;
35)
send_stats "دفاع محیط زیست LDNMP"
while true; do
check_waf_status
check_cf_mode
if [ -x "$(command -v fail2ban-client)" ] ; then
clear
remove fail2ban
rm -rf /etc/fail2ban
else
clear
docker_name="fail2ban"
check_docker_app
echo -e "برنامه دفاع وب سایت سرور${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}"
echo "------------------------"
echo "1. برنامه دفاع را نصب کنید"
echo "------------------------"
echo "5. مشاهده سابقه رهگیری SSH 6. مشاهده سابقه رهگیری وب سایت"
echo "7. لیست قوانین دفاعی را مشاهده کنید 8. مشاهده نظارت بر زمان واقعی سیاههها"
echo "------------------------"
echo "11. پیکربندی پارامترهای رهگیری 12. همه IP های مسدود شده را پاک کنید"
echo "------------------------"
echo "21. حالت Cloudflare 22. بار زیاد در 5 ثانیه سپر"
echo "------------------------"
echo "31. WAF 32 را روشن کنید. WAF را خاموش کنید"
echo "33. DDOS Defense 34 را روشن کنید. دفاع DDOS را خاموش کنید"
echo "------------------------"
echo "9. برنامه دفاعی را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
f2b_install_sshd
cd /path/to/fail2ban/config/fail2ban/filter.d
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf
cd /path/to/fail2ban/config/fail2ban/jail.d/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf
sed -i "/cloudflare/d" /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf
f2b_status
;;
5)
echo "------------------------"
f2b_sshd
echo "------------------------"
;;
6)
echo "------------------------"
local xxx="fail2ban-nginx-cc"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-418"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-bad-request"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-badbots"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-botsearch"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-deny"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-http-auth"
f2b_status_xxx
echo "------------------------"
local xxx="docker-nginx-unauthorized"
f2b_status_xxx
echo "------------------------"
local xxx="docker-php-url-fopen"
f2b_status_xxx
echo "------------------------"
;;
7)
docker exec -it fail2ban fail2ban-client status
;;
8)
tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log
;;
9)
docker rm -f fail2ban
rm -rf /path/to/fail2ban
crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null
echo "برنامه دفاعی Fail2ban حذف نشده است"
;;
11)
install nano
nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf
f2b_status
break
;;
12)
docker exec -it fail2ban fail2ban-client unban --all
;;
21)
send_stats "حالت CloudFlare"
echo "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و کلید جهانی API را بدست آورید"
echo "https://dash.cloudflare.com/login"
read -e -p "شماره حساب CF را وارد کنید:" cfuser
read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken
wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default11.conf
docker exec nginx nginx -s reload
cd /path/to/fail2ban/config/fail2ban/jail.d/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf
cd /path/to/fail2ban/config/fail2ban/action.d
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/cloudflare-docker.conf
sed -i "s/kejilion@outlook.com/$cfuser/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf
sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf
f2b_status
echo "حالت CloudFlare برای مشاهده سوابق رهگیری در پس زمینه CF ، سایت های امنیت-امنیت پیکربندی شده است"
;;
22)
send_stats "بار زیاد در سپر 5 ثانیه"
echo -e "${gl_huang}وب سایت به طور خودکار هر 5 دقیقه یکبار تشخیص می دهد. هنگامی که بار زیاد تشخیص داده می شود ، سپر به طور خودکار روشن می شود و بار کم به مدت 5 ثانیه به طور خودکار خاموش می شود.${gl_bai}"
echo "--------------"
echo "پارامترهای CF را دریافت کنید:"
echo -e "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و آن را بدست آورید${gl_huang}Global API Key${gl_bai}"
echo -e "برای دریافت به سمت راست پایین صفحه خلاصه نام دامنه پس زمینه CF بروید${gl_huang}شناسه منطقه${gl_bai}"
echo "https://dash.cloudflare.com/login"
echo "--------------"
read -e -p "شماره حساب CF را وارد کنید:" cfuser
read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken
read -e -p "شناسه منطقه نام دامنه را در CF وارد کنید:" cfzonID
cd ~
install jq bc
check_crontab_installed
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/CF-Under-Attack.sh
chmod +x CF-Under-Attack.sh
sed -i "s/AAAA/$cfuser/g" ~/CF-Under-Attack.sh
sed -i "s/BBBB/$cftoken/g" ~/CF-Under-Attack.sh
sed -i "s/CCCC/$cfzonID/g" ~/CF-Under-Attack.sh
local cron_job="*/5 * * * * ~/CF-Under-Attack.sh"
local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job")
if [ -z "$existing_cron" ]; then
(crontab -l 2>/dev/null; echo "$cron_job") | crontab -
echo "اسکریپت باز شدن محافظ اتوماتیک بار بالا اضافه شده است"
else
echo "اسکریپت Shield Automatic در حال حاضر وجود دارد ، نیازی به اضافه کردن آن نیست"
fi
;;
31)
nginx_waf on
echo "سایت WAF فعال است"
send_stats "سایت WAF فعال است"
;;
32)
nginx_waf off
echo "سایت WAF بسته شده است"
send_stats "سایت WAF بسته شده است"
;;
33)
enable_ddos_defense
;;
34)
disable_ddos_defense
;;
*)
break
;;
esac
fi
break_end
done
;;
36)
while true; do
clear
send_stats "محیط LDNMP را بهینه کنید"
echo "محیط LDNMP را بهینه کنید"
echo "------------------------"
echo "1. حالت استاندارد 2. حالت عملکرد بالا (توصیه می شود 2H2G یا بالاتر)"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "حالت استاندارد سایت"
# تنظیم nginx
sed -i 's/worker_connections.*/worker_connections 10240;/' /home/web/nginx.conf
sed -i 's/worker_processes.*/worker_processes 4;/' /home/web/nginx.conf
# تنظیم PHP
wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini
docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini
docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini
rm -rf /home/optimized_php.ini
# تنظیم PHP
wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www-1.conf
docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf
docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf
rm -rf /home/www.conf
fix_phpfpm_conf php
fix_phpfpm_conf php74
# تنظیم mysql
wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config-1.cnf
docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/
rm -rf /home/custom_mysql_config.cnf
cd /home/web && docker compose restart
restart_redis
optimize_balanced
echo "محیط LDNMP روی حالت استاندارد تنظیم شده است"
;;
2)
send_stats "حالت عملکرد بالا سایت"
# تنظیم nginx
sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf
sed -i 's/worker_processes.*/worker_processes 8;/' /home/web/nginx.conf
# تنظیم PHP
wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini
docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini
docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini
rm -rf /home/optimized_php.ini
# تنظیم PHP
wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www.conf
docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf
docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf
rm -rf /home/www.conf
fix_phpfpm_conf php
fix_phpfpm_conf php74
# تنظیم mysql
wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config.cnf
docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/
rm -rf /home/custom_mysql_config.cnf
cd /home/web && docker compose restart
restart_redis
optimize_web_server
echo "محیط LDNMP روی حالت عملکرد بالا تنظیم شده است"
;;
*)
break
;;
esac
break_end
done
;;
37)
root_use
while true; do
clear
send_stats "محیط LDNMP را به روز کنید"
echo "محیط LDNMP را به روز کنید"
echo "------------------------"
ldnmp_v
echo "نسخه جدیدی از قطعات را کشف کنید"
echo "------------------------"
check_docker_image_update nginx
if [ -n "$update_status" ]; then
echo -e "${gl_huang}nginx $update_status${gl_bai}"
fi
check_docker_image_update php
if [ -n "$update_status" ]; then
echo -e "${gl_huang}php $update_status${gl_bai}"
fi
check_docker_image_update mysql
if [ -n "$update_status" ]; then
echo -e "${gl_huang}mysql $update_status${gl_bai}"
fi
check_docker_image_update redis
if [ -n "$update_status" ]; then
echo -e "${gl_huang}redis $update_status${gl_bai}"
fi
echo "------------------------"
echo
echo "1. به روزرسانی Nginx 2. MySQL 3 را به روز کنید. PHP 4 را به روز کنید. Redis را به روز کنید"
echo "------------------------"
echo "5. محیط کامل را به روز کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
nginx_upgrade
;;
2)
local ldnmp_pods="mysql"
read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 8.0 8.3 8.4 9.0) (برای دریافت آخرین نسخه وارد شوید):" version
local version=${version:-latest}
cd /home/web/
cp /home/web/docker-compose.yml /home/web/docker-compose1.yml
sed -i "s/image: mysql/image: mysql:${version}/" /home/web/docker-compose.yml
docker rm -f $ldnmp_pods
docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
docker compose up -d --force-recreate $ldnmp_pods
docker restart $ldnmp_pods
cp /home/web/docker-compose1.yml /home/web/docker-compose.yml
send_stats "تمدید کردن$ldnmp_pods"
echo "تمدید کردن${ldnmp_pods}پایان"
;;
3)
local ldnmp_pods="php"
read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 7.4 8.0 8.1 8.2 8.3) (برای دریافت آخرین نسخه وارد شوید):" version
local version=${version:-8.3}
cd /home/web/
cp /home/web/docker-compose.yml /home/web/docker-compose1.yml
sed -i "s/kjlion\///g" /home/web/docker-compose.yml > /dev/null 2>&1
sed -i "s/image: php:fpm-alpine/image: php:${version}-fpm-alpine/" /home/web/docker-compose.yml
docker rm -f $ldnmp_pods
docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1
docker compose up -d --force-recreate $ldnmp_pods
docker exec php chown -R www-data:www-data /var/www/html
run_command docker exec php sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories > /dev/null 2>&1
docker exec php apk update
curl -sL ${gh_proxy}github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o /usr/local/bin/install-php-extensions
docker exec php mkdir -p /usr/local/bin/
docker cp /usr/local/bin/install-php-extensions php:/usr/local/bin/
docker exec php chmod +x /usr/local/bin/install-php-extensions
docker exec php install-php-extensions mysqli pdo_mysql gd intl zip exif bcmath opcache redis imagick
docker exec php sh -c 'echo "upload_max_filesize=50M " > /usr/local/etc/php/conf.d/uploads.ini' > /dev/null 2>&1
docker exec php sh -c 'echo "post_max_size=50M " > /usr/local/etc/php/conf.d/post.ini' > /dev/null 2>&1
docker exec php sh -c 'echo "memory_limit=256M" > /usr/local/etc/php/conf.d/memory.ini' > /dev/null 2>&1
docker exec php sh -c 'echo "max_execution_time=1200" > /usr/local/etc/php/conf.d/max_execution_time.ini' > /dev/null 2>&1
docker exec php sh -c 'echo "max_input_time=600" > /usr/local/etc/php/conf.d/max_input_time.ini' > /dev/null 2>&1
docker exec php sh -c 'echo "max_input_vars=5000" > /usr/local/etc/php/conf.d/max_input_vars.ini' > /dev/null 2>&1
fix_phpfpm_con $ldnmp_pods
docker restart $ldnmp_pods > /dev/null 2>&1
cp /home/web/docker-compose1.yml /home/web/docker-compose.yml
send_stats "تمدید کردن$ldnmp_pods"
echo "تمدید کردن${ldnmp_pods}پایان"
;;
4)
local ldnmp_pods="redis"
cd /home/web/
docker rm -f $ldnmp_pods
docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1
docker compose up -d --force-recreate $ldnmp_pods
docker restart $ldnmp_pods > /dev/null 2>&1
restart_redis
send_stats "تمدید کردن$ldnmp_pods"
echo "تمدید کردن${ldnmp_pods}پایان"
;;
5)
read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户请慎重更新LDNMP环境会有数据库更新失败的风险。确定更新LDNMP环境吗(Y/N): ")" choice
case "$choice" in
[Yy])
send_stats "محیط LDNMP را کاملاً به روز کنید"
cd /home/web/
docker compose down --rmi all
check_port
install_dependency
install_docker
install_certbot
install_ldnmp
;;
*)
;;
esac
;;
*)
break
;;
esac
break_end
done
;;
38)
root_use
send_stats "حذف محیط LDNMP"
read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据再卸载LDNMP环境。确定删除所有网站数据吗(Y/N): ")" choice
case "$choice" in
[Yy])
cd /home/web/
docker compose down --rmi all
docker compose -f docker-compose.phpmyadmin.yml down > /dev/null 2>&1
docker compose -f docker-compose.phpmyadmin.yml down --rmi all > /dev/null 2>&1
rm -rf /home/web
;;
[Nn])
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
esac
break_end
done
}
linux_panel() {
while true; do
clear
# send_stats "بازار برنامه"
echo -e "بازار کاربرد"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}نسخه رسمی پنل باوتا${gl_kjlan}2. ${gl_bai}نسخه بین المللی Aapanel"
echo -e "${gl_kjlan}3. ${gl_bai}پانل مدیریت نسل 1 پانل${gl_kjlan}4. ${gl_bai}پانل بصری nginxproxymanager"
echo -e "${gl_kjlan}5. ${gl_bai}برنامه لیست پرونده های چند فروشگاهی Alist${gl_kjlan}6. ${gl_bai}نسخه وب دسک تاپ Ubuntu از راه دور"
echo -e "${gl_kjlan}7. ${gl_bai}پانل نظارت Nezha Probe VPS${gl_kjlan}8. ${gl_bai}پانل بارگیری مغناطیسی QB آفلاین BT"
echo -e "${gl_kjlan}9. ${gl_bai}برنامه سرور پستی Poste.io${gl_kjlan}10. ${gl_bai}سیستم چت آنلاین چند نفره Rocketchat"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}نرم افزار مدیریت پروژه Zendao${gl_kjlan}12. ${gl_bai}پانل qinglong پانل مدیریت وظیفه به موقع"
echo -e "${gl_kjlan}13. ${gl_bai}دیسک شبکه CloudReve${gl_huang}${gl_bai} ${gl_kjlan}14. ${gl_bai}برنامه ساده مدیریت عکس تختخواب"
echo -e "${gl_kjlan}15. ${gl_bai}سیستم مدیریت چندرسانه ای Emby${gl_kjlan}16. ${gl_bai}پانل تست سرعت سرعت"
echo -e "${gl_kjlan}17. ${gl_bai}Adguardhome Adware${gl_kjlan}18. ${gl_bai}Office Office Office Office Office"
echo -e "${gl_kjlan}19. ${gl_bai}پانل فایروال Thunder Pool WAF${gl_kjlan}20. ${gl_bai}پانل مدیریت کانتینر Portainer"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}21. ${gl_bai}نسخه وب VScode${gl_kjlan}22. ${gl_bai}ابزار نظارت بر Uptimekuma"
echo -e "${gl_kjlan}23. ${gl_bai}یادداشت صفحه وب یادداشت${gl_kjlan}24. ${gl_bai}Webtop Remote Desktop Edition${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}25. ${gl_bai}دیسک شبکه NextCloud${gl_kjlan}26. ${gl_bai}چارچوب مدیریت وظیفه زمان بندی QD-Today"
echo -e "${gl_kjlan}27. ${gl_bai}پنل مدیریت پشته ظرف Dockge${gl_kjlan}28. ${gl_bai}ابزار تست سرعت Librespeed"
echo -e "${gl_kjlan}29. ${gl_bai}سایت جستجوی جمع آوری Searxng${gl_huang}${gl_bai} ${gl_kjlan}30. ${gl_bai}سیستم آلبوم خصوصی Photoprism"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}31. ${gl_bai}مجموعه ابزار stirlingpdf${gl_kjlan}32. ${gl_bai}نرم افزار نمودار آنلاین Drawio رایگان${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}33. ${gl_bai}پانل ناوبری آفتاب${gl_kjlan}34. ${gl_bai}پلت فرم اشتراک فایل Pingvin-Share"
echo -e "${gl_kjlan}35. ${gl_bai}دایره مینیمالیستی دوستان${gl_kjlan}36. ${gl_bai}وب سایت جمع آوری چت Lobechatai"
echo -e "${gl_kjlan}37. ${gl_bai}جعبه ابزار myip${gl_huang}${gl_bai} ${gl_kjlan}38. ${gl_bai}سطل خانوادگی شیایایا آلیست"
echo -e "${gl_kjlan}39. ${gl_bai}ابزار ضبط پخش زنده Bililive${gl_kjlan}40. ${gl_bai}نسخه وب وب سایت ابزار اتصال SSH"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}41. ${gl_bai}پنل مدیریت ماوس${gl_kjlan}42. ${gl_bai}ابزار اتصال از راه دور Nexte"
echo -e "${gl_kjlan}43. ${gl_bai}میز از راه دور Rustdesk (سرور)${gl_huang}${gl_bai} ${gl_kjlan}44. ${gl_bai}میز از راه دور Rustdesk (رله)${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}45. ${gl_bai}ایستگاه شتاب داکر${gl_kjlan}46. ${gl_bai}ایستگاه شتاب GitHub${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}47. ${gl_bai}نظارت بر پرومتئوس${gl_kjlan}48. ${gl_bai}پرومتئوس (نظارت میزبان)"
echo -e "${gl_kjlan}49. ${gl_bai}پرومتئوس (نظارت بر کانتینر)${gl_kjlan}50. ${gl_bai}ابزار نظارت دوباره پر کردن"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}51. ${gl_bai}پنل مرغ PVE${gl_kjlan}52. ${gl_bai}پنل مدیریت کانتینر dpanel"
echo -e "${gl_kjlan}53. ${gl_bai}LLAMA3 CHAT AI MODEL${gl_kjlan}54. ${gl_bai}پانل مدیریت ساختمان وب سایت میزبان AMH"
echo -e "${gl_kjlan}55. ${gl_bai}نفوذ اینترانت FRP (سمت سرور)${gl_huang}${gl_bai} ${gl_kjlan}56. ${gl_bai}نفوذ اینترانت FRP (مشتری)${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}57. ${gl_bai}Deepseek Chat AI مدل بزرگ${gl_kjlan}58. ${gl_bai}پایگاه دانش مدل بزرگ متفاوت${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}59. ${gl_bai}مدیریت دارایی مدل بزرگ Newapi${gl_kjlan}60. ${gl_bai}ماشین سنگر منبع باز Jumpserver"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}61. ${gl_bai}سرور ترجمه آنلاین${gl_kjlan}62. ${gl_bai}پایه دانش مدل بزرگ ragflow"
echo -e "${gl_kjlan}63. ${gl_bai}پلت فرم AI خود میزبان OpenWebui${gl_huang}${gl_bai} ${gl_kjlan}64. ${gl_bai}جعبه ابزار آن"
echo -e "${gl_kjlan}65. ${gl_bai}پلت فرم گردش کار اتوماسیون N8N${gl_huang}${gl_bai} ${gl_kjlan}66. ${gl_bai}ابزار بارگیری ویدیویی YT-DLP"
echo -e "${gl_kjlan}67. ${gl_bai}DDNS-GO ابزار مدیریت DNS DNS${gl_huang}${gl_bai} ${gl_kjlan}68. ${gl_bai}بستر مدیریت گواهینامه Allinssl"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
local lujing="[ -d "/www/server/panel" ]"
local panelname="宝塔面板"
local panelurl="https://www.bt.cn/new/index.html"
panel_app_install() {
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
}
panel_app_manage() {
bt
}
panel_app_uninstall() {
curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh
chmod +x bt-uninstall.sh
./bt-uninstall.sh
}
install_panel
;;
2)
local lujing="[ -d "/www/server/panel" ]"
local panelname="aapanel"
local panelurl="https://www.aapanel.com/new/index.html"
panel_app_install() {
URL=https://www.aapanel.com/script/install_7.0_en.sh && if [ -f /usr/bin/curl ];then curl -ksSO "$URL" ;else wget --no-check-certificate -O install_7.0_en.sh "$URL";fi;bash install_7.0_en.sh aapanel
}
panel_app_manage() {
bt
}
panel_app_uninstall() {
curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh
chmod +x bt-uninstall.sh
./bt-uninstall.sh
}
install_panel
;;
3)
local lujing="command -v 1pctl > /dev/null 2>&1"
local panelname="1Panel"
local panelurl="https://1panel.cn/"
panel_app_install() {
install bash
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
}
panel_app_manage() {
1pctl user-info
1pctl update password
}
panel_app_uninstall() {
1pctl uninstall
}
install_panel
;;
4)
local docker_name="npm"
local docker_img="jc21/nginx-proxy-manager:latest"
local docker_port=81
docker_rum() {
docker run -d \
--name=$docker_name \
-p ${docker_port}:81 \
-p 80:80 \
-p 443:443 \
-v /home/docker/npm/data:/data \
-v /home/docker/npm/letsencrypt:/etc/letsencrypt \
--restart=always \
$docker_img
}
local docker_describe="如果您已经安装了其他面板或者LDNMP建站环境建议先卸载再安装npm"
local docker_url="官网介绍: https://nginxproxymanager.com/"
local docker_use="echo \"初始用户名: admin@example.com\""
local docker_passwd="echo \"初始密码: changeme\""
local app_size="1"
docker_app
;;
5)
local docker_name="alist"
local docker_img="xhofe/alist-aria2:latest"
local docker_port=5244
docker_rum() {
docker run -d \
--restart=always \
-v /home/docker/alist:/opt/alist/data \
-p ${docker_port}:5244 \
-e PUID=0 \
-e PGID=0 \
-e UMASK=022 \
--name="alist" \
xhofe/alist-aria2:latest
}
local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动"
local docker_url="官网介绍: https://alist.nn.ci/zh/"
local docker_use="docker exec -it alist ./alist admin random"
local docker_passwd=""
local app_size="1"
docker_app
;;
6)
local docker_name="webtop-ubuntu"
local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde"
local docker_port=3006
docker_rum() {
docker run -d \
--name=webtop-ubuntu \
--security-opt seccomp=unconfined \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e SUBFOLDER=/ \
-e TITLE=Webtop \
-p ${docker_port}:3000 \
-v /home/docker/webtop/data:/config \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="1gb" \
--restart unless-stopped \
lscr.io/linuxserver/webtop:ubuntu-kde
}
local docker_describe="webtop基于Ubuntu的容器包含官方支持的完整桌面环境可通过任何现代 Web 浏览器访问"
local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/"
local docker_use=""
local docker_passwd=""
local app_size="2"
docker_app
;;
7)
clear
send_stats "Nezha بسازید"
local docker_name="nezha-dashboard"
local docker_port=8008
while true; do
check_docker_app
check_docker_image_update $docker_name
clear
echo -e "نظارت بر نزا$check_docker $update_status"
echo "منبع باز ، نظارت بر سرور سبک و کاربردی آسان و کاربردی و بهره برداری از سرور"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1"
if docker inspect "$docker_name" &>/dev/null; then
local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
check_docker_app_ip
fi
echo ""
echo "------------------------"
echo "1. استفاده کنید"
echo "------------------------"
echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید"
echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید."
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
check_disk_space 1
install unzip jq
install_docker
curl -sL ${gh_proxy}raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && ./nezha.sh
local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
check_docker_app_ip
;;
5)
echo "${docker_name}تنظیمات دسترسی دامنه"
send_stats "${docker_name}تنظیمات دسترسی دامنه"
add_yuming
ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
block_container_port "$docker_name" "$ipv4_address"
;;
6)
echo "فرمت نام دامنه مثال. com با https: // همراه نیست"
web_del
;;
7)
send_stats "دسترسی به IP${docker_name}"
clear_container_rules "$docker_name" "$ipv4_address"
;;
8)
send_stats "دسترسی به IP${docker_name}"
block_container_port "$docker_name" "$ipv4_address"
;;
*)
break
;;
esac
break_end
done
;;
8)
local docker_name="qbittorrent"
local docker_img="lscr.io/linuxserver/qbittorrent:latest"
local docker_port=8081
docker_rum() {
docker run -d \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e WEBUI_PORT=${docker_port} \
-e TORRENTING_PORT=56881 \
-p ${docker_port}:${docker_port} \
-p 56881:56881 \
-p 56881:56881/udp \
-v /home/docker/qbittorrent/config:/config \
-v /home/docker/qbittorrent/downloads:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/qbittorrent:latest
}
local docker_describe="qbittorrent离线BT磁力下载服务"
local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent"
local docker_use="sleep 3"
local docker_passwd="docker logs qbittorrent"
local app_size="1"
docker_app
;;
9)
send_stats "یک اداره پست بسازید"
clear
install telnet
local docker_name=“mailserver”
while true; do
check_docker_app
check_docker_image_update $docker_name
clear
echo -e "خدمات پستی$check_docker $update_status"
echo "Poste.io یک راه حل سرور Mail Source Source است."
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1"
echo ""
echo "تشخیص بندر"
port=25
timeout=3
if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then
echo -e "${gl_lv}بندر$portدر حال حاضر موجود است${gl_bai}"
else
echo -e "${gl_hong}بندر$portدر حال حاضر موجود نیست${gl_bai}"
fi
echo ""
if docker inspect "$docker_name" &>/dev/null; then
yuming=$(cat /home/docker/mail.txt)
echo "آدرس دسترسی:"
echo "https://$yuming"
fi
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
check_disk_space 2
read -e -p "لطفاً نام دامنه ایمیل را به عنوان مثال ، mail.yuming.com تنظیم کنید:" yuming
mkdir -p /home/docker
echo "$yuming" > /home/docker/mail.txt
echo "------------------------"
ip_address
echo "ابتدا این سوابق DNS را تجزیه کنید"
echo "A mail $ipv4_address"
echo "CNAME imap $yuming"
echo "CNAME pop $yuming"
echo "CNAME smtp $yuming"
echo "MX @ $yuming"
echo "TXT @ v=spf1 mx ~all"
echo "TXT ? ?"
echo ""
echo "------------------------"
echo "برای ادامه ... هر کلید را فشار دهید ..."
read -n 1 -s -r -p ""
install jq
install_docker
docker run \
--net=host \
-e TZ=Europe/Prague \
-v /home/docker/mail:/data \
--name "mailserver" \
-h "$yuming" \
--restart=always \
-d analogic/poste.io
clear
echo "poste.io نصب شده است"
echo "------------------------"
echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:"
echo "https://$yuming"
echo ""
;;
2)
docker rm -f mailserver
docker rmi -f analogic/poste.i
yuming=$(cat /home/docker/mail.txt)
docker run \
--net=host \
-e TZ=Europe/Prague \
-v /home/docker/mail:/data \
--name "mailserver" \
-h "$yuming" \
--restart=always \
-d analogic/poste.i
clear
echo "poste.io نصب شده است"
echo "------------------------"
echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:"
echo "https://$yuming"
echo ""
;;
3)
docker rm -f mailserver
docker rmi -f analogic/poste.io
rm /home/docker/mail.txt
rm -rf /home/docker/mail
echo "برنامه حذف شده است"
;;
*)
break
;;
esac
break_end
done
;;
10)
local app_name="Rocket.Chat聊天系统"
local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能,"
local app_url="官方介绍: https://www.rocket.chat/"
local docker_name="rocketchat"
local docker_port="3897"
local app_size="2"
docker_app_install() {
docker run --name db -d --restart=always \
-v /home/docker/mongo/dump:/dump \
mongo:latest --replSet rs5 --oplogSize 256
sleep 1
docker exec -it db mongosh --eval "printjson(rs.initiate())"
sleep 5
docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat
clear
ip_address
echo "نصب شده"
check_docker_app_ip
}
docker_app_update() {
docker rm -f rocketchat
docker rmi -f rocket.chat:latest
docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat
clear
ip_address
echo "Rocket.Chat نصب شده است"
check_docker_app_ip
}
docker_app_uninstall() {
docker rm -f rocketchat
docker rmi -f rocket.chat
docker rm -f db
docker rmi -f mongo:latest
rm -rf /home/docker/mongo
echo "برنامه حذف شده است"
}
docker_app_plus
;;
11)
local docker_name="zentao-server"
local docker_img="idoop/zentao:latest"
local docker_port=82
docker_rum() {
docker run -d -p ${docker_port}:80 \
-e ADMINER_USER="root" -e ADMINER_PASSWD="password" \
-e BIND_ADDRESS="false" \
-v /home/docker/zentao-server/:/opt/zbox/ \
--add-host smtp.exmail.qq.com:163.177.90.125 \
--name zentao-server \
--restart=always \
idoop/zentao:latest
}
local docker_describe="禅道是通用的项目管理软件"
local docker_url="官网介绍: https://www.zentao.net/"
local docker_use="echo \"初始用户名: admin\""
local docker_passwd="echo \"初始密码: 123456\""
local app_size="2"
docker_app
;;
12)
local docker_name="qinglong"
local docker_img="whyour/qinglong:latest"
local docker_port=5700
docker_rum() {
docker run -d \
-v /home/docker/qinglong/data:/ql/data \
-p ${docker_port}:5700 \
--name qinglong \
--hostname qinglong \
--restart unless-stopped \
whyour/qinglong:latest
}
local docker_describe="青龙面板是一个定时任务管理平台"
local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
13)
local app_name="cloudreve网盘"
local app_text="cloudreve是一个支持多家云存储的网盘系统"
local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1"
local docker_name="cloudreve"
local docker_port="5212"
local app_size="2"
docker_app_install() {
cd /home/ && mkdir -p docker/cloud && cd docker/cloud && mkdir temp_data && mkdir -vp cloudreve/{uploads,avatar} && touch cloudreve/conf.ini && touch cloudreve/cloudreve.db && mkdir -p aria2/config && mkdir -p data/aria2 && chmod -R 777 data/aria2
curl -o /home/docker/cloud/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/cloudreve-docker-compose.yml
sed -i "s/5212:5212/${docker_port}:5212/g" /home/docker/cloud/docker-compose.yml
cd /home/docker/cloud/
docker compose up -d
clear
echo "نصب شده"
check_docker_app_ip
}
docker_app_update() {
cd /home/docker/cloud/ && docker compose down --rmi all
cd /home/docker/cloud/ && docker compose up -d
}
docker_app_uninstall() {
cd /home/docker/cloud/ && docker compose down --rmi all
rm -rf /home/docker/cloud
echo "برنامه حذف شده است"
}
docker_app_plus
;;
14)
local docker_name="easyimage"
local docker_img="ddsderek/easyimage:latest"
local docker_port=85
docker_rum() {
docker run -d \
--name easyimage \
-p ${docker_port}:80 \
-e TZ=Asia/Shanghai \
-e PUID=1000 \
-e PGID=1000 \
-v /home/docker/easyimage/config:/app/web/config \
-v /home/docker/easyimage/i:/app/web/i \
--restart unless-stopped \
ddsderek/easyimage:latest
}
local docker_describe="简单图床是一个简单的图床程序"
local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
15)
local docker_name="emby"
local docker_img="linuxserver/emby:latest"
local docker_port=8096
docker_rum() {
docker run -d --name=emby --restart=always \
-v /home/docker/emby/config:/config \
-v /home/docker/emby/share1:/mnt/share1 \
-v /home/docker/emby/share2:/mnt/share2 \
-v /mnt/notify:/mnt/notify \
-p ${docker_port}:8096 \
-e UID=1000 -e GID=100 -e GIDLIST=100 \
linuxserver/emby:latest
}
local docker_describe="emby是一个主从式架构的媒体服务器软件可以用来整理服务器上的视频和音频并将音频和视频流式传输到客户端设备"
local docker_url="官网介绍: https://emby.media/"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
16)
local docker_name="looking-glass"
local docker_img="wikihostinc/looking-glass-server"
local docker_port=89
docker_rum() {
docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server
}
local docker_describe="Speedtest测速面板是一个VPS网速测试工具多项测试功能还可以实时监控VPS进出站流量"
local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
17)
local docker_name="adguardhome"
local docker_img="adguard/adguardhome"
local docker_port=3000
docker_rum() {
docker run -d \
--name adguardhome \
-v /home/docker/adguardhome/work:/opt/adguardhome/work \
-v /home/docker/adguardhome/conf:/opt/adguardhome/conf \
-p 53:53/tcp \
-p 53:53/udp \
-p ${docker_port}:3000/tcp \
--restart always \
adguard/adguardhome
}
local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件未来将不止是一个DNS服务器。"
local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
18)
local docker_name="onlyoffice"
local docker_img="onlyoffice/documentserver"
local docker_port=8082
docker_rum() {
docker run -d -p ${docker_port}:80 \
--restart=always \
--name onlyoffice \
-v /home/docker/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /home/docker/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
onlyoffice/documentserver
}
local docker_describe="onlyoffice是一款开源的在线office工具太强大了"
local docker_url="官网介绍: https://www.onlyoffice.com/"
local docker_use=""
local docker_passwd=""
local app_size="2"
docker_app
;;
19)
send_stats "یک استخر رعد و برق بسازید"
local docker_name=safeline-mgt
local docker_port=9443
while true; do
check_docker_app
clear
echo -e "سرویس استخر تندر$check_docker"
echo "لی چی یک صفحه برنامه فایروال سایت WAF است که توسط Changting Technology ساخته شده است که می تواند سایت آژانس را برای دفاع خودکار معکوس کند."
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mz421t74c؟t=0.1"
if docker inspect "$docker_name" &>/dev/null; then
check_docker_app_ip
fi
echo ""
echo "------------------------"
echo "1. نصب 2. بروزرسانی 3. تنظیم مجدد رمز عبور 4. حذف نصب کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
install_docker
check_disk_space 5
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
clear
echo "پانل Whunder Pool WAF نصب شده است"
check_docker_app_ip
docker exec safeline-mgt resetadmin
;;
2)
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"
docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}')
echo ""
clear
echo "پانل WAF THIRDER POOL WAF به روز شده است"
check_docker_app_ip
;;
3)
docker exec safeline-mgt resetadmin
;;
4)
cd /data/safeline
docker compose down --rmi all
echo "اگر شما فهرست نصب پیش فرض هستید ، این پروژه اکنون حذف نشده است. اگر دایرکتوری نصب را سفارشی می کنید ، برای اجرای آن باید به دایرکتوری نصب بروید:"
echo "docker compose down && docker compose down --rmi all"
;;
*)
break
;;
esac
break_end
done
;;
20)
local docker_name="portainer"
local docker_img="portainer/portainer"
local docker_port=9050
docker_rum() {
docker run -d \
--name portainer \
-p ${docker_port}:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/docker/portainer:/data \
--restart always \
portainer/portainer
}
local docker_describe="portainer是一个轻量级的docker容器管理面板"
local docker_url="官网介绍: https://www.portainer.io/"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
21)
local docker_name="vscode-web"
local docker_img="codercom/code-server"
local docker_port=8180
docker_rum() {
docker run -d -p ${docker_port}:8080 -v /home/docker/vscode-web:/home/coder/.local/share/code-server --name vscode-web --restart always codercom/code-server
}
local docker_describe="VScode是一款强大的在线代码编写工具"
local docker_url="官网介绍: ${gh_proxy}github.com/coder/code-server"
local docker_use="sleep 3"
local docker_passwd="docker exec vscode-web cat /home/coder/.config/code-server/config.yaml"
local app_size="1"
docker_app
;;
22)
local docker_name="uptime-kuma"
local docker_img="louislam/uptime-kuma:latest"
local docker_port=3003
docker_rum() {
docker run -d \
--name=uptime-kuma \
-p ${docker_port}:3001 \
-v /home/docker/uptime-kuma/uptime-kuma-data:/app/data \
--restart=always \
louislam/uptime-kuma:latest
}
local docker_describe="Uptime Kuma 易于使用的自托管监控工具"
local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
23)
local docker_name="memos"
local docker_img="ghcr.io/usememos/memos:latest"
local docker_port=5230
docker_rum() {
docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart always ghcr.io/usememos/memos:latest
}
local docker_describe="Memos是一款轻量级、自托管的备忘录中心"
local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
24)
local docker_name="webtop"
local docker_img="lscr.io/linuxserver/webtop:latest"
local docker_port=3083
docker_rum() {
docker run -d \
--name=webtop \
--security-opt seccomp=unconfined \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e SUBFOLDER=/ \
-e TITLE=Webtop \
-e LC_ALL=zh_CN.UTF-8 \
-e DOCKER_MODS=linuxserver/mods:universal-package-install \
-e INSTALL_PACKAGES=font-noto-cjk \
-p ${docker_port}:3000 \
-v /home/docker/webtop/data:/config \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="1gb" \
--restart unless-stopped \
lscr.io/linuxserver/webtop:latest
}
local docker_describe="webtop基于 Alpine、Ubuntu、Fedora 和 Arch 的容器,包含官方支持的完整桌面环境,可通过任何现代 Web 浏览器访问"
local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/"
local docker_use=""
local docker_passwd=""
local app_size="2"
docker_app
;;
25)
local docker_name="nextcloud"
local docker_img="nextcloud:latest"
local docker_port=8989
local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
docker_rum() {
docker run -d --name nextcloud --restart=always -p ${docker_port}:80 -v /home/docker/nextcloud:/var/www/html -e NEXTCLOUD_ADMIN_USER=nextcloud -e NEXTCLOUD_ADMIN_PASSWORD=$rootpasswd nextcloud
}
local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台"
local docker_url="官网介绍: https://nextcloud.com/"
local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\""
local docker_passwd=""
local app_size="3"
docker_app
;;
26)
local docker_name="qd"
local docker_img="qdtoday/qd:latest"
local docker_port=8923
docker_rum() {
docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd
}
local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架"
local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
27)
local docker_name="dockge"
local docker_img="louislam/dockge:latest"
local docker_port=5003
docker_rum() {
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
}
local docker_describe="dockge是一个可视化的docker-compose容器管理面板"
local docker_url="官网介绍: ${gh_proxy}github.com/louislam/dockge"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
28)
local docker_name="speedtest"
local docker_img="ghcr.io/librespeed/speedtest"
local docker_port=8028
docker_rum() {
docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest
}
local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具即开即用"
local docker_url="官网介绍: ${gh_proxy}github.com/librespeed/speedtest"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
29)
local docker_name="searxng"
local docker_img="alandoyle/searxng:latest"
local docker_port=8700
docker_rum() {
docker run --name=searxng \
-d --init \
--restart=unless-stopped \
-v /home/docker/searxng/config:/etc/searxng \
-v /home/docker/searxng/templates:/usr/local/searxng/searx/templates/simple \
-v /home/docker/searxng/theme:/usr/local/searxng/searx/static/themes/simple \
-p ${docker_port}:8080/tcp \
alandoyle/searxng:latest
}
local docker_describe="searxng是一个私有且隐私的搜索引擎站点"
local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
30)
local docker_name="photoprism"
local docker_img="photoprism/photoprism:latest"
local docker_port=2342
local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
docker_rum() {
docker run -d \
--name photoprism \
--restart always \
--security-opt seccomp=unconfined \
--security-opt apparmor=unconfined \
-p ${docker_port}:2342 \
-e PHOTOPRISM_UPLOAD_NSFW="true" \
-e PHOTOPRISM_ADMIN_PASSWORD="$rootpasswd" \
-v /home/docker/photoprism/storage:/photoprism/storage \
-v /home/docker/photoprism/Pictures:/photoprism/originals \
photoprism/photoprism
}
local docker_describe="photoprism非常强大的私有相册系统"
local docker_url="官网介绍: https://www.photoprism.app/"
local docker_use="echo \"账号: admin 密码: $rootpasswd\""
local docker_passwd=""
local app_size="1"
docker_app
;;
31)
local docker_name="s-pdf"
local docker_img="frooodle/s-pdf:latest"
local docker_port=8020
docker_rum() {
docker run -d \
--name s-pdf \
--restart=always \
-p ${docker_port}:8080 \
-v /home/docker/s-pdf/trainingData:/usr/share/tesseract-ocr/5/tessdata \
-v /home/docker/s-pdf/extraConfigs:/configs \
-v /home/docker/s-pdf/logs:/logs \
-e DOCKER_ENABLE_SECURITY=false \
frooodle/s-pdf:latest
}
local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。"
local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
32)
local docker_name="drawio"
local docker_img="jgraph/drawio"
local docker_port=7080
docker_rum() {
docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio
}
local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画"
local docker_url="官网介绍: https://www.drawio.com/"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
33)
local docker_name="sun-panel"
local docker_img="hslr/sun-panel"
local docker_port=3009
docker_rum() {
docker run -d --restart=always -p ${docker_port}:3002 \
-v /home/docker/sun-panel/conf:/app/conf \
-v /home/docker/sun-panel/uploads:/app/uploads \
-v /home/docker/sun-panel/database:/app/database \
--name sun-panel \
hslr/sun-panel
}
local docker_describe="Sun-Panel服务器、NAS导航面板、Homepage、浏览器首页"
local docker_url="官网介绍: https://doc.sun-panel.top/zh_cn/"
local docker_use="echo \"账号: admin@sun.cc 密码: 12345678\""
local docker_passwd=""
local app_size="1"
docker_app
;;
34)
local docker_name="pingvin-share"
local docker_img="stonith404/pingvin-share"
local docker_port=3060
docker_rum() {
docker run -d \
--name pingvin-share \
--restart always \
-p ${docker_port}:3000 \
-v /home/docker/pingvin-share/data:/opt/app/backend/data \
stonith404/pingvin-share
}
local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品"
local docker_url="官网介绍: ${gh_proxy}github.com/stonith404/pingvin-share"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
35)
local docker_name="moments"
local docker_img="kingwrcy/moments:latest"
local docker_port=8035
docker_rum() {
docker run -d --restart unless-stopped \
-p ${docker_port}:3000 \
-v /home/docker/moments/data:/app/data \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
--name moments \
kingwrcy/moments:latest
}
local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活"
local docker_url="معرفی رسمی وب سایت:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file"
local docker_use="echo \"账号: admin 密码: a123456\""
local docker_passwd=""
local app_size="1"
docker_app
;;
36)
local docker_name="lobe-chat"
local docker_img="lobehub/lobe-chat:latest"
local docker_port=8036
docker_rum() {
docker run -d -p ${docker_port}:3210 \
--name lobe-chat \
--restart=always \
lobehub/lobe-chat
}
local docker_describe="LobeChat聚合市面上主流的AI大模型ChatGPT/Claude/Gemini/Groq/Ollama"
local docker_url="官网介绍: ${gh_proxy}github.com/lobehub/lobe-chat"
local docker_use=""
local docker_passwd=""
local app_size="2"
docker_app
;;
37)
local docker_name="myip"
local docker_img="jason5ng32/myip:latest"
local docker_port=8037
docker_rum() {
docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest
}
local docker_describe="是一个多功能IP工具箱可以查看自己IP信息及连通性用网页面板呈现"
local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
38)
send_stats "سطل خانوادگی شیایایا"
clear
install_docker
check_disk_space 1
bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"
;;
39)
if [ ! -d /home/docker/bililive-go/ ]; then
mkdir -p /home/docker/bililive-go/ > /dev/null 2>&1
wget -O /home/docker/bililive-go/config.yml ${gh_proxy}raw.githubusercontent.com/hr3lxphr6j/bililive-go/master/config.yml > /dev/null 2>&1
fi
local docker_name="bililive-go"
local docker_img="chigusa/bililive-go"
local docker_port=8039
docker_rum() {
docker run --restart=always --name bililive-go -v /home/docker/bililive-go/config.yml:/etc/bililive-go/config.yml -v /home/docker/bililive-go/Videos:/srv/bililive -p ${docker_port}:8080 -d chigusa/bililive-go
}
local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具"
local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/bililive-go"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
40)
local docker_name="webssh"
local docker_img="jrohy/webssh"
local docker_port=8040
docker_rum() {
docker run -d -p ${docker_port}:5032 --restart always --name webssh -e TZ=Asia/Shanghai jrohy/webssh
}
local docker_describe="简易在线ssh连接工具和sftp工具"
local docker_url="官网介绍: ${gh_proxy}github.com/Jrohy/webssh"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
41)
local lujing="[ -d "/www/server/panel" ]"
local panelname="耗子面板"
local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel"
panel_app_install() {
mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o install.sh https://dl.cdn.haozi.net/panel/install.sh && bash install.sh
cd ~
}
panel_app_manage() {
panel-cli
}
panel_app_uninstall() {
mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o uninstall.sh https://dl.cdn.haozi.net/panel/uninstall.sh && bash uninstall.sh
cd ~
}
install_panel
;;
42)
local docker_name="nexterm"
local docker_img="germannewsmaker/nexterm:latest"
local docker_port=8042
docker_rum() {
docker run -d \
--name nexterm \
-p ${docker_port}:6989 \
-v /home/docker/nexterm:/app/data \
--restart unless-stopped \
germannewsmaker/nexterm:latest
}
local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。"
local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
43)
local docker_name="hbbs"
local docker_img="rustdesk/rustdesk-server"
local docker_port=0000
docker_rum() {
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
}
local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。"
local docker_url="官网介绍: https://rustdesk.com/zh-cn/"
local docker_use="docker logs hbbs"
local docker_passwd="echo \"把你的IP和key记录下会在远程桌面客户端中用到。去44选项装中继端吧\""
local app_size="1"
docker_app
;;
44)
local docker_name="hbbr"
local docker_img="rustdesk/rustdesk-server"
local docker_port=0000
docker_rum() {
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
}
local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。"
local docker_url="官网介绍: https://rustdesk.com/zh-cn/"
local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\""
local docker_passwd=""
local app_size="1"
docker_app
;;
45)
local docker_name="registry"
local docker_img="registry:2"
local docker_port=8045
docker_rum() {
docker run -d \
-p ${docker_port}:5000 \
--name registry \
-v /home/docker/registry:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
--restart always \
registry:2
}
local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。"
local docker_url="官网介绍: https://hub.docker.com/_/registry"
local docker_use=""
local docker_passwd=""
local app_size="2"
docker_app
;;
46)
local docker_name="ghproxy"
local docker_img="wjqserver/ghproxy:latest"
local docker_port=8046
docker_rum() {
docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest
}
local docker_describe="使用Go实现的GHProxy用于加速部分地区Github仓库的拉取。"
local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
47)
local app_name="普罗米修斯监控"
local app_text="Prometheus+Grafana企业级监控系统"
local app_url="官网介绍: https://prometheus.io"
local docker_name="grafana"
local docker_port="8047"
local app_size="2"
docker_app_install() {
prometheus_install
clear
ip_address
echo "نصب شده"
check_docker_app_ip
echo "نام کاربری و رمز عبور اولیه عبارتند از: مدیر"
}
docker_app_update() {
docker rm -f node-exporter prometheus grafana
docker rmi -f prom/node-exporter
docker rmi -f prom/prometheus:latest
docker rmi -f grafana/grafana:latest
docker_app_install
}
docker_app_uninstall() {
docker rm -f node-exporter prometheus grafana
docker rmi -f prom/node-exporter
docker rmi -f prom/prometheus:latest
docker rmi -f grafana/grafana:latest
rm -rf /home/docker/monitoring
echo "برنامه حذف شده است"
}
docker_app_plus
;;
48)
local docker_name="node-exporter"
local docker_img="prom/node-exporter"
local docker_port=8048
docker_rum() {
docker run -d \
--name=node-exporter \
-p ${docker_port}:9100 \
--restart unless-stopped \
prom/node-exporter
}
local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。"
local docker_url="官网介绍: https://github.com/prometheus/node_exporter"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
49)
local docker_name="cadvisor"
local docker_img="gcr.io/cadvisor/cadvisor:latest"
local docker_port=8049
docker_rum() {
docker run -d \
--name=cadvisor \
--restart unless-stopped \
-p ${docker_port}:8080 \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
gcr.io/cadvisor/cadvisor:latest \
-housekeeping_interval=10s \
-docker_only=true
}
local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。"
local docker_url="官网介绍: https://github.com/google/cadvisor"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
50)
local docker_name="changedetection"
local docker_img="dgtlmoon/changedetection.io:latest"
local docker_port=8050
docker_rum() {
docker run -d --restart always -p ${docker_port}:5000 \
-v /home/docker/datastore:/datastore \
--name changedetection dgtlmoon/changedetection.io:latest
}
local docker_describe="这是一款网站变化检测、补货监控和通知的小工具"
local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
51)
clear
send_stats "مرغ"
check_disk_space 1
curl -L ${gh_proxy}raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh
;;
52)
local docker_name="dpanel"
local docker_img="dpanel/dpanel:lite"
local docker_port=8052
docker_rum() {
docker run -it -d --name dpanel --restart=always \
-p ${docker_port}:8080 -e APP_NAME=dpanel \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/docker/dpanel:/dpanel \
dpanel/dpanel:lite
}
local docker_describe="Docker可视化面板系统提供完善的docker管理功能。"
local docker_url="官网介绍: https://github.com/donknap/dpanel"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
53)
local docker_name="ollama"
local docker_img="ghcr.io/open-webui/open-webui:ollama"
local docker_port=8053
docker_rum() {
docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama
}
local docker_describe="OpenWebUI一款大语言模型网页框架接入全新的llama3大语言模型"
local docker_url="官网介绍: https://github.com/open-webui/open-webui"
local docker_use="docker exec ollama ollama run llama3.2:1b"
local docker_passwd=""
local app_size="5"
docker_app
;;
54)
local lujing="[ -d "/www/server/panel" ]"
local panelname="AMH面板"
local panelurl="官方地址: https://amh.sh/index.htm?amh"
panel_app_install() {
cd ~
wget https://dl.amh.sh/amh.sh && bash amh.sh
}
panel_app_manage() {
panel_app_install
}
panel_app_uninstall() {
panel_app_install
}
install_panel
;;
55)
frps_panel
;;
56)
frpc_panel
;;
57)
local docker_name="ollama"
local docker_img="ghcr.io/open-webui/open-webui:ollama"
local docker_port=8053
docker_rum() {
docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama
}
local docker_describe="OpenWebUI一款大语言模型网页框架接入全新的DeepSeek R1大语言模型"
local docker_url="官网介绍: https://github.com/open-webui/open-webui"
local docker_use="docker exec ollama ollama run deepseek-r1:1.5b"
local docker_passwd=""
local app_size="5"
docker_app
;;
58)
local app_name="Dify知识库"
local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成"
local app_url="官方网站: https://docs.dify.ai/zh-hans"
local docker_name="docker-nginx-1"
local docker_port="8058"
local app_size="3"
docker_app_install() {
install git
mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env
# sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env
sed -i "s/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/" /home/docker/dify/docker/.env
docker compose up -d
clear
echo "نصب شده"
check_docker_app_ip
}
docker_app_update() {
cd /home/docker/dify/docker/ && docker compose down --rmi all
cd /home/docker/dify/
git pull origin main
sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=8058/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env
cd /home/docker/dify/docker/ && docker compose up -d
}
docker_app_uninstall() {
cd /home/docker/dify/docker/ && docker compose down --rmi all
rm -rf /home/docker/dify
echo "برنامه حذف شده است"
}
docker_app_plus
;;
59)
local app_name="New API"
local app_text="新一代大模型网关与AI资产管理系统"
local app_url="官方网站: https://github.com/Calcium-Ion/new-api"
local docker_name="new-api"
local docker_port="8059"
local app_size="3"
docker_app_install() {
install git
mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/Calcium-Ion/new-api.git && cd new-api
sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \
-e 's/container_name: redis/container_name: redis-new-api/g' \
-e 's/container_name: mysql/container_name: mysql-new-api/g' \
docker-compose.yml
docker compose up -d
clear
echo "نصب شده"
check_docker_app_ip
}
docker_app_update() {
cd /home/docker/new-api/ && docker compose down --rmi all
cd /home/docker/new-api/
git pull origin main
sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \
-e 's/container_name: redis/container_name: redis-new-api/g' \
-e 's/container_name: mysql/container_name: mysql-new-api/g' \
docker-compose.yml
docker compose up -d
clear
echo "نصب شده"
check_docker_app_ip
}
docker_app_uninstall() {
cd /home/docker/new-api/ && docker compose down --rmi all
rm -rf /home/docker/new-api
echo "برنامه حذف شده است"
}
docker_app_plus
;;
60)
local app_name="JumpServer开源堡垒机"
local app_text="是一个开源的特权访问管理 (PAM) 工具该程序占用80端口不支持添加域名访问了"
local app_url="官方介绍: https://github.com/jumpserver/jumpserver"
local docker_name="jms_web"
local docker_port="80"
local app_size="2"
docker_app_install() {
curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
clear
echo "نصب شده"
check_docker_app_ip
echo "نام کاربری اولیه: مدیر"
echo "رمز عبور اولیه: Changeme"
}
docker_app_update() {
cd /opt/jumpserver-installer*/
./jmsctl.sh upgrade
echo "برنامه به روز شده است"
}
docker_app_uninstall() {
cd /opt/jumpserver-installer*/
./jmsctl.sh uninstall
cd /opt
rm -rf jumpserver-installer*/
rm -rf jumpserver
echo "برنامه حذف شده است"
}
docker_app_plus
;;
61)
local docker_name="libretranslate"
local docker_img="libretranslate/libretranslate:latest"
local docker_port=8061
docker_rum() {
docker run -d \
-p ${docker_port}:5000 \
--name libretranslate \
libretranslate/libretranslate \
--load-only ko,zt,zh,en,ja,pt,es,fr,de,ru
}
local docker_describe="免费开源机器翻译 API完全自托管它的翻译引擎由开源Argos Translate库提供支持。"
local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate"
local docker_use=""
local docker_passwd=""
local app_size="5"
docker_app
;;
62)
local app_name="RAGFlow知识库"
local app_text="基于深度文档理解的开源 RAG检索增强生成引擎"
local app_url="官方网站: https://github.com/infiniflow/ragflow"
local docker_name="ragflow-server"
local docker_port="8062"
local app_size="8"
docker_app_install() {
install git
mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker
sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml
docker compose up -d
clear
echo "نصب شده"
check_docker_app_ip
}
docker_app_update() {
cd /home/docker/ragflow/docker/ && docker compose down --rmi all
cd /home/docker/ragflow/
git pull origin main
cd /home/docker/ragflow/docker/
sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml
docker compose up -d
}
docker_app_uninstall() {
cd /home/docker/ragflow/docker/ && docker compose down --rmi all
rm -rf /home/docker/ragflow
echo "برنامه حذف شده است"
}
docker_app_plus
;;
63)
local docker_name="open-webui"
local docker_img="ghcr.io/open-webui/open-webui:main"
local docker_port=8063
docker_rum() {
docker run -d -p ${docker_port}:8080 -v /home/docker/open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
}
local docker_describe="OpenWebUI一款大语言模型网页框架官方精简版本支持各大模型API接入"
local docker_url="官网介绍: https://github.com/open-webui/open-webui"
local docker_use=""
local docker_passwd=""
local app_size="3"
docker_app
;;
64)
local docker_name="it-tools"
local docker_img="corentinth/it-tools:latest"
local docker_port=8064
docker_rum() {
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
}
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
local docker_url="官网介绍: https://github.com/CorentinTh/it-tools"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
65)
local docker_name="n8n"
local docker_img="docker.n8n.io/n8nio/n8n"
local docker_port=8065
docker_rum() {
add_yuming
mkdir -p /home/docker/n8n
chmod -R 777 /home/docker/n8n
docker run -d --name n8n \
--restart always \
-p ${docker_port}:5678 \
-v /home/docker/n8n:/home/node/.n8n \
-e N8N_HOST=${yuming} \
-e N8N_PORT=5678 \
-e N8N_PROTOCOL=https \
-e N8N_WEBHOOK_URL=https://${yuming}/ \
docker.n8n.io/n8nio/n8n
ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port}
block_container_port "$docker_name" "$ipv4_address"
}
local docker_describe="是一款功能强大的自动化工作流平台"
local docker_url="官网介绍: https://github.com/n8n-io/n8n"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
66)
yt_menu_pro
;;
67)
local docker_name="ddns-go"
local docker_img="jeessy/ddns-go"
local docker_port=9876
docker_rum() {
docker run -d \
--name ddns-go \
--restart=always \
-p ${docker_port}:9876 \
-v /home/docker/ddns-go:/root \
jeessy/ddns-go
}
local docker_describe="自动将你的公网 IPIPv4/IPv6实时更新到各大 DNS 服务商,实现动态域名解析。"
local docker_url="官网介绍: https://github.com/CorentinTh/it-tools"
local docker_use=""
local docker_passwd=""
local app_size="1"
docker_app
;;
68)
local docker_name="allinssl"
local docker_img="allinssl/allinssl:latest"
local docker_port=7979
docker_rum() {
docker run -itd --name allinssl -p ${docker_port}:8888 -v /home/docker/allinssl/data:/www/allinssl/data -e ALLINSSL_USER=allinssl -e ALLINSSL_PWD=allinssldocker -e ALLINSSL_URL=allinssl allinssl/allinssl:latest
}
local docker_describe="开源免费的 SSL 证书自动化管理平台"
local docker_url="官网介绍: https://allinssl.com"
local docker_use="echo \"初始用户名: allinssl\""
local docker_passwd="echo \"初始密码: allinssldocker\""
local app_size="1"
docker_app
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_work() {
while true; do
clear
send_stats "فضای کاری من"
echo -e "فضای کاری من"
echo -e "این سیستم فضای کاری را در اختیار شما قرار می دهد که می تواند روی پس زمینه اجرا شود ، که می توانید برای انجام کارهای بلند مدت از آن استفاده کنید."
echo -e "حتی اگر SSH را قطع کنید ، وظایف موجود در فضای کاری قطع نمی شود و وظایف موجود در پس زمینه مقیم خواهد شد."
echo -e "${gl_huang}نکته:${gl_bai}پس از ورود به فضای کاری ، از Ctrl+B استفاده کنید و D را به تنهایی فشار دهید تا از فضای کاری خارج شوید!"
echo -e "${gl_kjlan}------------------------"
echo "لیست فضاهای کاری موجود موجود"
echo -e "${gl_kjlan}------------------------"
tmux list-sessions
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}فضای کاری شماره 1"
echo -e "${gl_kjlan}2. ${gl_bai}فضای کاری شماره 2"
echo -e "${gl_kjlan}3. ${gl_bai}فضای کاری شماره 3"
echo -e "${gl_kjlan}4. ${gl_bai}فضای کاری شماره 4"
echo -e "${gl_kjlan}5. ${gl_bai}فضای کاری شماره 5"
echo -e "${gl_kjlan}6. ${gl_bai}فضای کاری شماره 6"
echo -e "${gl_kjlan}7. ${gl_bai}فضای کاری شماره 7"
echo -e "${gl_kjlan}8. ${gl_bai}فضای کاری شماره 8"
echo -e "${gl_kjlan}9. ${gl_bai}فضای کاری شماره 9"
echo -e "${gl_kjlan}10. ${gl_bai}فضای کاری شماره 10"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}21. ${gl_bai}حالت مقیم SSH${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}22. ${gl_bai}فضای کاری را ایجاد و وارد کنید"
echo -e "${gl_kjlan}23. ${gl_bai}دستورات را به فضای کاری پس زمینه تزریق کنید"
echo -e "${gl_kjlan}24. ${gl_bai}فضای کاری مشخص شده را حذف کنید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
clear
install tmux
local SESSION_NAME="work1"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
2)
clear
install tmux
local SESSION_NAME="work2"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
3)
clear
install tmux
local SESSION_NAME="work3"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
4)
clear
install tmux
local SESSION_NAME="work4"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
5)
clear
install tmux
local SESSION_NAME="work5"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
6)
clear
install tmux
local SESSION_NAME="work6"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
7)
clear
install tmux
local SESSION_NAME="work7"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
8)
clear
install tmux
local SESSION_NAME="work8"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
9)
clear
install tmux
local SESSION_NAME="work9"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
10)
clear
install tmux
local SESSION_NAME="work10"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
tmux_run
;;
21)
while true; do
clear
if grep -q 'tmux attach-session -t sshd || tmux new-session -s sshd' ~/.bashrc; then
local tmux_sshd_status="${gl_lv}开启${gl_bai}"
else
local tmux_sshd_status="${gl_hui}关闭${gl_bai}"
fi
send_stats "حالت مقیم SSH"
echo -e "حالت مقیم SSH${tmux_sshd_status}"
echo "پس از فعال شدن اتصال SSH ، مستقیماً وارد حالت مقیم شده و به حالت کار قبلی باز می گردد."
echo "------------------------"
echo "1. روشن را روشن کنید. خاموش کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" gongzuoqu_del
case "$gongzuoqu_del" in
1)
install tmux
local SESSION_NAME="sshd"
send_stats "فضای کاری را شروع کنید$SESSION_NAME"
grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\ n# به طور خودکار جلسه tmux \ nif را وارد کنید [[-z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc
source ~/.bashrc
tmux_run
;;
2)
sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc
tmux kill-window -t sshd
;;
*)
break
;;
esac
done
;;
22)
read -e -p "لطفاً نام فضای کاری را که ایجاد کرده اید یا وارد کرده اید ، مانند 1001 KJ001 Work1 وارد کنید:" SESSION_NAME
tmux_run
send_stats "فضای کاری سفارشی"
;;
23)
read -e -p "لطفاً دستور مورد نظر خود را در پس زمینه وارد کنید ، مانند: curl -fssl https://get.docker.com | sh:" tmuxd
tmux_run_d
send_stats "دستورات را به فضای کاری پس زمینه تزریق کنید"
;;
24)
read -e -p "لطفاً نام فضای کاری را که می خواهید حذف کنید وارد کنید:" gongzuoqu_name
tmux kill-window -t $gongzuoqu_name
send_stats "فضای کاری را حذف کنید"
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_Settings() {
while true; do
clear
# SEND_STATS "ابزارهای سیستم"
echo -e "ابزار سیستم"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}کلیدهای میانبر راه اندازی اسکریپت را تنظیم کنید${gl_kjlan}2. ${gl_bai}رمز ورود ورود به سیستم را تغییر دهید"
echo -e "${gl_kjlan}3. ${gl_bai}حالت ورود به سیستم رمز عبور${gl_kjlan}4. ${gl_bai}نسخه مشخص شده پایتون را نصب کنید"
echo -e "${gl_kjlan}5. ${gl_bai}همه بنادر را باز کنید${gl_kjlan}6. ${gl_bai}پورت اتصال SSH را اصلاح کنید"
echo -e "${gl_kjlan}7. ${gl_bai}优化DNS地址 ${gl_kjlan}8. ${gl_bai}سیستم نصب مجدد یک کلیک${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}9. ${gl_bai}禁用ROOT账户创建新账户 ${gl_kjlan}10. ${gl_bai}اولویت IPv4/IPv6 را تغییر دهید"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}查看端口占用状态 ${gl_kjlan}12. ${gl_bai}اندازه حافظه مجازی را تغییر دهید"
echo -e "${gl_kjlan}13. ${gl_bai}مدیریت کاربر${gl_kjlan}14. ${gl_bai}ژنراتور کاربر/رمز عبور"
echo -e "${gl_kjlan}15. ${gl_bai}تنظیم منطقه زمانی سیستم${gl_kjlan}16. ${gl_bai}شتاب BBR3 را تنظیم کنید"
echo -e "${gl_kjlan}17. ${gl_bai}فایروال مدیر پیشرفته${gl_kjlan}18. ${gl_bai}نام میزبان را تغییر دهید"
echo -e "${gl_kjlan}19. ${gl_bai}منبع به روزرسانی سیستم سوئیچ${gl_kjlan}20. ${gl_bai}مدیریت وظیفه زمان بندی"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}21. ${gl_bai}تجزیه میزبان بومی${gl_kjlan}22. ${gl_bai}SSH防御程序"
echo -e "${gl_kjlan}23. ${gl_bai}خاموش کردن خودکار از حد فعلی${gl_kjlan}24. ${gl_bai}حالت ورود به سیستم کلید خصوصی"
echo -e "${gl_kjlan}25. ${gl_bai}نظارت بر سیستم TG-BOT و هشدار زودهنگام${gl_kjlan}26. ${gl_bai}رفع آسیب پذیری های پرخطر Openssh (Xiuyuan)"
echo -e "${gl_kjlan}27. ${gl_bai}ارتقاء هسته Red Hat Linux${gl_kjlan}28. ${gl_bai}بهینه سازی پارامترهای هسته در سیستم لینوکس${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}29. ${gl_bai}ابزار اسکن ویروس${gl_huang}${gl_bai} ${gl_kjlan}30. ${gl_bai}مدیر پرونده"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}31. ${gl_bai}سوئیچ زبان سیستم${gl_kjlan}32. ${gl_bai}ابزار زیباسازی خط فرمان${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}33. ${gl_bai}سطل بازیافت سیستم را تنظیم کنید${gl_kjlan}34. ${gl_bai}تهیه نسخه پشتیبان از سیستم و بازیابی"
echo -e "${gl_kjlan}35. ${gl_bai}ابزار اتصال از راه دور SSH${gl_kjlan}36. ${gl_bai}ابزار مدیریت پارتیشن دیسک سخت"
echo -e "${gl_kjlan}37. ${gl_bai}تاریخ خط فرمان${gl_kjlan}38. ${gl_bai}ابزار همگام سازی از راه دور RSYNC"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}41. ${gl_bai}صفحه پیام${gl_kjlan}66. ${gl_bai}بهینه سازی سیستم یک مرحله ای${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}99. ${gl_bai}سرور را مجدداً راه اندازی کنید${gl_kjlan}100. ${gl_bai}حریم خصوصی و امنیت"
echo -e "${gl_kjlan}101. ${gl_bai}استفاده پیشرفته از فرمان k${gl_huang}${gl_bai} ${gl_kjlan}102. ${gl_bai}حذف اسکریپت شیر ​​فناوری"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
while true; do
clear
read -e -p "لطفاً کلید میانبر خود را وارد کنید (0 را برای خروج وارد کنید):" kuaijiejian
if [ "$kuaijiejian" == "0" ]; then
break_end
linux_Settings
fi
find /usr/local/bin/ -type l -exec bash -c 'test "$(readlink -f {})" = "/usr/local/bin/k" && rm -f {}' \;
ln -s /usr/local/bin/k /usr/local/bin/$kuaijiejian
echo "کلیدهای میانبر تنظیم شده اند"
send_stats "کلیدهای میانبر اسکریپت تنظیم شده اند"
break_end
linux_Settings
done
;;
2)
clear
send_stats "رمز ورود ورود خود را تنظیم کنید"
echo "رمز ورود ورود خود را تنظیم کنید"
passwd
;;
3)
root_use
send_stats "حالت رمز عبور"
add_sshpasswd
;;
4)
root_use
send_stats "مدیریت نسخه PY"
echo "مدیریت نسخه پایتون"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1pm42157ck؟t=0.1"
echo "---------------------------------------"
echo "این ویژگی یکپارچه هر نسخه ای را که به طور رسمی توسط پایتون پشتیبانی می شود نصب می کند!"
local VERSION=$(python3 -V 2>&1 | awk '{print $2}')
echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}"
echo "------------"
echo "نسخه توصیه شده: 3.12 3.11 3.10 3.9 3.8 2.7"
echo "پرس و جو نسخه های بیشتر: https://www.python.org/downloads/"
echo "------------"
read -e -p "شماره نسخه Python را که می خواهید نصب کنید وارد کنید (0 را برای خروج وارد کنید):" py_new_v
if [[ "$py_new_v" == "0" ]]; then
send_stats "مدیریت اسکریپت PY"
break_end
linux_Settings
fi
if ! grep -q 'export PYENV_ROOT="\$HOME/.pyenv"' ~/.bashrc; then
if command -v yum &>/dev/null; then
yum update -y && yum install git -y
yum groupinstall "Development Tools" -y
yum install openssl-devel bzip2-devel libffi-devel ncurses-devel zlib-devel readline-devel sqlite-devel xz-devel findutils -y
curl -O https://www.openssl.org/source/openssl-1.1.1u.tar.gz
tar -xzf openssl-1.1.1u.tar.gz
cd openssl-1.1.1u
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make
make install
echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf
ldconfig -v
cd ..
export LDFLAGS="-L/usr/local/openssl/lib"
export CPPFLAGS="-I/usr/local/openssl/include"
export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"
elif command -v apt &>/dev/null; then
apt update -y && apt install git -y
apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev -y
elif command -v apk &>/dev/null; then
apk update && apk add git
apk add --no-cache bash gcc musl-dev libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev libc6-compat linux-headers make xz-dev build-base ncurses-dev
else
echo "مدیر بسته ناشناخته!"
return
fi
curl https://pyenv.run | bash
cat << EOF >> ~/.bashrc
export PYENV_ROOT="\$HOME/.pyenv"
if [[ -d "\$PYENV_ROOT/bin" ]]; then
export PATH="\$PYENV_ROOT/bin:\$PATH"
fi
eval "\$(pyenv init --path)"
eval "\$(pyenv init -)"
eval "\$(pyenv virtualenv-init -)"
EOF
fi
sleep 1
source ~/.bashrc
sleep 1
pyenv install $py_new_v
pyenv global $py_new_v
rm -rf /tmp/python-build.*
rm -rf $(pyenv root)/cache/*
local VERSION=$(python -V 2>&1 | awk '{print $2}')
echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}"
send_stats "نسخه PY SCRIPT SCRIPT"
;;
5)
root_use
send_stats "بندر"
iptables_open
remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1
echo "همه درگاه ها باز هستند"
;;
6)
root_use
send_stats "درگاه SSH را اصلاح کنید"
while true; do
clear
sed -i 's/#Port/Port/' /etc/ssh/sshd_config
# شماره پورت SSH فعلی را بخوانید
local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
# شماره پورت SSH فعلی را چاپ کنید
echo -e "شماره پورت SSH فعلی:${gl_huang}$current_port ${gl_bai}"
echo "------------------------"
echo "اعداد با شماره پورت از 1 تا 65535. (برای خروج 0 را وارد کنید)"
# کاربر را وادار به وارد کردن شماره پورت SSH جدید کنید
read -e -p "لطفاً شماره پورت جدید SSH را وارد کنید:" new_port
# تعیین کنید که آیا شماره پورت در محدوده معتبر است
if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字
if [[ $new_port -ge 1 && $new_port -le 65535 ]]; then
send_stats "درگاه SSH اصلاح شده است"
new_ssh_port
elif [[ $new_port -eq 0 ]]; then
send_stats "از اصلاح بندر SSH خارج شوید"
break
else
echo "شماره پورت نامعتبر است ، لطفاً یک عدد بین 1 تا 65535 وارد کنید."
send_stats "ورودی پورت SSH نامعتبر است"
break_end
fi
else
echo "ورودی نامعتبر است ، لطفاً شماره را وارد کنید."
send_stats "ورودی پورت SSH نامعتبر است"
break_end
fi
done
;;
7)
set_dns_ui
;;
8)
dd_xitong
;;
9)
root_use
send_stats "کاربران جدید ریشه را غیرفعال می کنند"
read -e -p "لطفاً نام کاربری جدید را وارد کنید (برای خروج 0 را وارد کنید):" new_username
if [ "$new_username" == "0" ]; then
break_end
linux_Settings
fi
useradd -m -s /bin/bash "$new_username"
passwd "$new_username"
echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers
passwd -l root
echo "این عملیات به پایان رسیده است."
;;
10)
root_use
send_stats "اولویت V4/V6 را تنظیم کنید"
while true; do
clear
echo "اولویت V4/V6 را تنظیم کنید"
echo "------------------------"
local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6)
if [ "$ipv6_disabled" -eq 1 ]; then
echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv4${gl_bai}اولویت"
else
echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv6${gl_bai}اولویت"
fi
echo ""
echo "------------------------"
echo "1. اولویت IPv4 2. اولویت IPv6 3. ابزار تعمیر IPv6"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "یک شبکه ترجیحی را انتخاب کنید:" choice
case $choice in
1)
sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1
echo "به اولویت IPv4 تبدیل شد"
send_stats "به اولویت IPv4 تبدیل شد"
;;
2)
sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1
echo "به اولویت IPv6 تغییر یافته است"
send_stats "به اولویت IPv6 تغییر یافته است"
;;
3)
clear
bash <(curl -L -s jhb.ovh/jb/v6.sh)
echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!"
send_stats "رفع IPv6"
;;
*)
break
;;
esac
done
;;
11)
clear
ss -tulnape
;;
12)
root_use
send_stats "حافظه مجازی را تنظیم کنید"
while true; do
clear
echo "حافظه مجازی را تنظیم کنید"
local swap_used=$(free -m | awk 'NR==3{print $3}')
local swap_total=$(free -m | awk 'NR==3{print $2}')
local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}')
echo -e "حافظه مجازی فعلی:${gl_huang}$swap_info${gl_bai}"
echo "------------------------"
echo "1. 1024m 2 را اختصاص دهید. 2048m 3 را اختصاص دهید. 4096m را اختصاص دهید. اندازه سفارشی"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case "$choice" in
1)
send_stats "حافظه مجازی 1G تنظیم شده است"
add_swap 1024
;;
2)
send_stats "2G حافظه مجازی تنظیم شده است"
add_swap 2048
;;
3)
send_stats "حافظه مجازی 4G تنظیم شده است"
add_swap 4096
;;
4)
read -e -p "لطفاً اندازه حافظه مجازی (واحد M) را وارد کنید:" new_swap
add_swap "$new_swap"
send_stats "حافظه مجازی سفارشی تنظیم شده است"
;;
*)
break
;;
esac
done
;;
13)
while true; do
root_use
send_stats "مدیریت کاربر"
echo "لیست کاربری"
echo "----------------------------------------------------------------------------"
printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限"
while IFS=: read -r username _ userid groupid _ _ homedir shell; do
local groups=$(groups "$username" | cut -d : -f 2)
local sudo_status=$(sudo -n -lU "$username" 2>/dev/null | grep -q '(ALL : ALL)' && echo "Yes" || echo "No")
printf "%-20s %-30s %-20s %-10s\n" "$username" "$homedir" "$groups" "$sudo_status"
done < /etc/passwd
echo ""
echo "عملیات حساب"
echo "------------------------"
echo "1. یک حساب عادی ایجاد کنید. یک حساب حق بیمه ایجاد کنید"
echo "------------------------"
echo "3. بالاترین مجوزها را بدهید 4. بالاترین مجوزها را لغو کنید"
echo "------------------------"
echo "5. حساب را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
# کاربر را وادار به وارد کردن نام کاربری جدید کند
read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username
# یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید
useradd -m -s /bin/bash "$new_username"
passwd "$new_username"
echo "این عملیات به پایان رسیده است."
;;
2)
# کاربر را وادار به وارد کردن نام کاربری جدید کند
read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username
# یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید
useradd -m -s /bin/bash "$new_username"
passwd "$new_username"
# به کاربران جدید مجوزهای سودو را اعطا کنید
echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers
echo "این عملیات به پایان رسیده است."
;;
3)
read -e -p "لطفا نام کاربری خود را وارد کنید:" username
# به کاربران جدید مجوزهای سودو را اعطا کنید
echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers
;;
4)
read -e -p "لطفا نام کاربری خود را وارد کنید:" username
# مجوزهای سودو کاربر را از پرونده sudoers حذف کنید
sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers
;;
5)
read -e -p "لطفاً برای حذف نام کاربری را وارد کنید:" username
# کاربر و فهرست خانه آن را حذف کنید
userdel -r "$username"
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
14)
clear
send_stats "تولید کننده اطلاعات کاربر"
echo "نام کاربری تصادفی"
echo "------------------------"
for i in {1..5}; do
username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)"
echo "نام کاربری تصادفی$i: $username"
done
echo ""
echo "نام تصادفی"
echo "------------------------"
local first_names=("John" "Jane" "Michael" "Emily" "David" "Sophia" "William" "Olivia" "James" "Emma" "Ava" "Liam" "Mia" "Noah" "Isabella")
local last_names=("Smith" "Johnson" "Brown" "Davis" "Wilson" "Miller" "Jones" "Garcia" "Martinez" "Williams" "Lee" "Gonzalez" "Rodriguez" "Hernandez")
# 5 نام کاربری تصادفی ایجاد کنید
for i in {1..5}; do
local first_name_index=$((RANDOM % ${#first_names[@]}))
local last_name_index=$((RANDOM % ${#last_names[@]}))
local user_name="${first_names[$first_name_index]} ${last_names[$last_name_index]}"
echo "نام کاربری تصادفی$i: $user_name"
done
echo ""
echo "uuid تصادفی"
echo "------------------------"
for i in {1..5}; do
uuid=$(cat /proc/sys/kernel/random/uuid)
echo "uuid تصادفی$i: $uuid"
done
echo ""
echo "رمز عبور تصادفی 16 بیتی"
echo "------------------------"
for i in {1..5}; do
local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
echo "رمز عبور تصادفی$i: $password"
done
echo ""
echo "رمز عبور تصادفی 32 بیتی"
echo "------------------------"
for i in {1..5}; do
local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)
echo "رمز عبور تصادفی$i: $password"
done
echo ""
;;
15)
root_use
send_stats "تغییر منطقه زمانی"
while true; do
clear
echo "اطلاعات زمان سیستم"
# منطقه زمانی سیستم فعلی را دریافت کنید
local timezone=$(current_timezone)
# زمان فعلی سیستم را دریافت کنید
local current_time=$(date +"%Y-%m-%d %H:%M:%S")
# منطقه زمانی و زمان را نشان دهید
echo "منطقه زمانی فعلی سیستم:$timezone"
echo "زمان فعلی سیستم:$current_time"
echo ""
echo "سوئیچینگ منطقه زمانی"
echo "------------------------"
echo "آسیا"
echo "1. زمان شانگهای در چین 2. زمان هنگ کنگ در چین"
echo "3 زمان توکیو در ژاپن 4. زمان سئول در کره جنوبی"
echo "5. زمان سنگاپور 6. زمان کلکته در هند"
echo "7. زمان دبی در امارات 8. زمان سیدنی در استرالیا"
echo "9. زمان در بانکوک ، تایلند"
echo "------------------------"
echo "اروپا"
echo "11. زمان لندن در انگلستان 12. زمان پاریس در فرانسه"
echo "13. برلین زمان ، آلمان 14. زمان مسکو ، روسیه"
echo "15. زمان اوترخت در هلند 16. زمان مادرید در اسپانیا"
echo "------------------------"
echo "آمریکا"
echo "21. زمان غربی 22. زمان شرقی"
echo "23. زمان کانادا 24. زمان مکزیک"
echo "25. زمان برزیل 26. زمان آرژانتین"
echo "------------------------"
echo "31. UTC زمان استاندارد جهانی"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1) set_timedate Asia/Shanghai ;;
2) set_timedate Asia/Hong_Kong ;;
3) set_timedate Asia/Tokyo ;;
4) set_timedate Asia/Seoul ;;
5) set_timedate Asia/Singapore ;;
6) set_timedate Asia/Kolkata ;;
7) set_timedate Asia/Dubai ;;
8) set_timedate Australia/Sydney ;;
9) set_timedate Asia/Bangkok ;;
11) set_timedate Europe/London ;;
12) set_timedate Europe/Paris ;;
13) set_timedate Europe/Berlin ;;
14) set_timedate Europe/Moscow ;;
15) set_timedate Europe/Amsterdam ;;
16) set_timedate Europe/Madrid ;;
21) set_timedate America/Los_Angeles ;;
22) set_timedate America/New_York ;;
23) set_timedate America/Vancouver ;;
24) set_timedate America/Mexico_City ;;
25) set_timedate America/Sao_Paulo ;;
26) set_timedate America/Argentina/Buenos_Aires ;;
31) set_timedate UTC ;;
*) break ;;
esac
done
;;
16)
bbrv3
;;
17)
iptables_panel
;;
18)
root_use
send_stats "نام میزبان را تغییر دهید"
while true; do
clear
local current_hostname=$(uname -n)
echo -e "نام میزبان فعلی:${gl_huang}$current_hostname${gl_bai}"
echo "------------------------"
read -e -p "لطفاً نام میزبان جدید را وارد کنید (0 را برای خروج وارد کنید):" new_hostname
if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then
if [ -f /etc/alpine-release ]; then
# Alpine
echo "$new_hostname" > /etc/hostname
hostname "$new_hostname"
else
# سیستم های دیگر مانند Debian ، Ubuntu ، Centos و غیره
hostnamectl set-hostname "$new_hostname"
sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname
systemctl restart systemd-hostnamed
fi
if grep -q "127.0.0.1" /etc/hosts; then
sed -i "s/127.0.0.1 .*/127.0.0.1 $new_hostname localhost localhost.localdomain/g" /etc/hosts
else
echo "127.0.0.1 $new_hostname localhost localhost.localdomain" >> /etc/hosts
fi
if grep -q "^::1" /etc/hosts; then
sed -i "s/^::1 .*/::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback/g" /etc/hosts
else
echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts
fi
echo "نام میزبان به:$new_hostname"
send_stats "نام میزبان تغییر کرده است"
sleep 1
else
echo "خارج شده ، نام میزبان تغییر نکرده است."
break
fi
done
;;
19)
root_use
send_stats "منبع بروزرسانی سیستم را تغییر دهید"
clear
echo "منطقه منبع بروزرسانی را انتخاب کنید"
echo "برای تغییر منبع به روزرسانی سیستم به LinuxMirrors متصل شوید"
echo "------------------------"
echo "1. سرزمین اصلی چین [پیش فرض] 2. سرزمین اصلی چین [شبکه آموزش] 3 مناطق خارج از کشور"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "انتخاب خود را وارد کنید:" choice
case $choice in
1)
send_stats "منبع پیش فرض در سرزمین اصلی چین"
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
;;
2)
send_stats "منبع آموزش در سرزمین اصلی چین"
bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu
;;
3)
send_stats "مبداء خارج از کشور"
bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad
;;
*)
echo "لغو شده"
;;
esac
;;
20)
send_stats "مدیریت وظیفه زمان بندی"
while true; do
clear
check_crontab_installed
clear
echo "لیست کار به موقع"
crontab -l
echo ""
echo "عمل کردن"
echo "------------------------"
echo "1. اضافه کردن وظایف زمان بندی 2. کارهای زمان بندی را حذف کنید."
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
read -e -p "لطفاً دستور اجرای کار جدید را وارد کنید:" newquest
echo "------------------------"
echo "1. وظایف ماهانه 2. وظایف هفتگی"
echo "3 وظایف روزانه 4. وظایف ساعتی"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi
case $dingshi in
1)
read -e -p "انتخاب کنید چه روز از هر ماه برای انجام وظایف؟ (1-30):" day
(crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1
;;
2)
read -e -p "انتخاب کنید که چه هفته ای برای انجام کار انجام شود؟ (0-6 ، 0 نشان دهنده یکشنبه):" weekday
(crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1
;;
3)
read -e -p "انتخاب کنید که هر روز چه زمانی انجام دهید؟ (ساعت ، 0-23):" hour
(crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1
;;
4)
read -e -p "برای انجام کار کدام دقیقه از ساعت را وارد کنید؟ (دقیقه ، 0-60):" minute
(crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1
;;
*)
break # 跳出
;;
esac
send_stats "کارهای به موقع اضافه کنید"
;;
2)
read -e -p "لطفاً کلمات کلیدی را که باید حذف شوند وارد کنید:" kquest
crontab -l | grep -v "$kquest" | crontab -
send_stats "کارهای زمان بندی را حذف کنید"
;;
3)
crontab -e
send_stats "کارهای زمان بندی را ویرایش کنید"
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
21)
root_use
send_stats "تجزیه میزبان محلی"
while true; do
clear
echo "لیست تجزیه میزبان بومی"
echo "اگر مسابقات پارس را در اینجا اضافه کنید ، دیگر از تجزیه پویا استفاده نمی شود"
cat /etc/hosts
echo ""
echo "عمل کردن"
echo "------------------------"
echo "1. یک تجزیه جدید را اضافه کنید. آدرس تجزیه را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns
case $host_dns in
1)
read -e -p "لطفاً یک فرمت جدید تجزیه و تحلیل را وارد کنید: 110.25.5.5.33 Kejilion.pro:" addhost
echo "$addhost" >> /etc/hosts
send_stats "تجزیه میزبان محلی اضافه شده است"
;;
2)
read -e -p "لطفاً کلمات کلیدی محتوای تجزیه کننده را که باید حذف شوند وارد کنید:" delhost
sed -i "/$delhost/d" /etc/hosts
send_stats "تجزیه و حذف میزبان محلی"
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
22)
root_use
send_stats "دفاع SSH"
while true; do
if [ -x "$(command -v fail2ban-client)" ] ; then
clear
remove fail2ban
rm -rf /etc/fail2ban
else
clear
docker_name="fail2ban"
check_docker_app
echo -e "برنامه دفاعی SSH$check_docker"
echo "Fail2ban ابزاری SSH برای جلوگیری از نیروی بی رحمانه است"
echo "معرفی رسمی وب سایت:${gh_proxy}github.com/fail2ban/fail2ban"
echo "------------------------"
echo "1. برنامه دفاع را نصب کنید"
echo "------------------------"
echo "2. مشاهده سوابق رهگیری SSH"
echo "3. نظارت بر ورود به سیستم در زمان واقعی"
echo "------------------------"
echo "9. برنامه دفاعی را حذف کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
install_docker
f2b_install_sshd
cd ~
f2b_status
break_end
;;
2)
echo "------------------------"
f2b_sshd
echo "------------------------"
break_end
;;
3)
tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log
break
;;
9)
docker rm -f fail2ban
rm -rf /path/to/fail2ban
echo "برنامه دفاعی Fail2ban حذف نشده است"
;;
*)
break
;;
esac
fi
done
;;
23)
root_use
send_stats "عملکرد خاموش محدودیت فعلی"
while true; do
clear
echo "عملکرد خاموش محدودیت فعلی"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mc411j7qd؟t=0.1"
echo "------------------------------------------------"
echo "استفاده فعلی ترافیک ، راه اندازی مجدد محاسبه ترافیک سرور پاک می شود!"
output_status
echo "$output"
# بررسی کنید که آیا پرونده Limiting_shut_down.sh وجود دارد
if [ -f ~/Limiting_Shut_down.sh ]; then
# مقدار آستانه_ gb را دریافت کنید
local rx_threshold_gb=$(grep -oP 'rx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh)
local tx_threshold_gb=$(grep -oP 'tx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh)
echo -e "${gl_lv}آستانه محدودیت جریان ورودی جریان فعلی: این است:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}"
echo -e "${gl_lv}آستانه محدودیت جریان خروجی فعلی:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}"
else
echo -e "${gl_hui}عملکرد خاموش محدود فعلی فعال نیست${gl_bai}"
fi
echo
echo "------------------------------------------------"
echo "این سیستم تشخیص می دهد که آیا ترافیک واقعی هر دقیقه به آستانه می رسد و سرور پس از رسیدن به طور خودکار خاموش می شود!"
echo "------------------------"
echo "1. عملکرد خاموش کردن محدودیت فعلی را روشن کنید. عملکرد خاموش کردن محدودیت فعلی را غیرفعال کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting
case "$Limiting" in
1)
# اندازه حافظه مجازی جدید را وارد کنید
echo "اگر سرور واقعی دارای 100 گرم ترافیک باشد ، می توان آستانه را روی 95 گرم تنظیم کرده و از قبل برق را خاموش کرد تا از خطاهای ترافیکی یا سرریز جلوگیری شود."
read -e -p "لطفاً آستانه ترافیک دریافتی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" rx_threshold_gb
rx_threshold_gb=${rx_threshold_gb:-100}
read -e -p "لطفاً آستانه ترافیک برون مرزی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" tx_threshold_gb
tx_threshold_gb=${tx_threshold_gb:-100}
read -e -p "لطفاً تاریخ تنظیم مجدد ترافیک را وارد کنید (تنظیم مجدد پیش فرض در اول هر ماه):" cz_day
cz_day=${cz_day:-1}
cd ~
curl -Ss -o ~/Limiting_Shut_down.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/Limiting_Shut_down1.sh
chmod +x ~/Limiting_Shut_down.sh
sed -i "s/110/$rx_threshold_gb/g" ~/Limiting_Shut_down.sh
sed -i "s/120/$tx_threshold_gb/g" ~/Limiting_Shut_down.sh
check_crontab_installed
crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
(crontab -l ; echo "* * * * * ~/Limiting_Shut_down.sh") | crontab - > /dev/null 2>&1
crontab -l | grep -v 'reboot' | crontab -
(crontab -l ; echo "0 1 $cz_day * * reboot") | crontab - > /dev/null 2>&1
echo "خاموش کردن محدودیت فعلی تنظیم شده است"
send_stats "خاموش کردن محدودیت فعلی تنظیم شده است"
;;
2)
check_crontab_installed
crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
crontab -l | grep -v 'reboot' | crontab -
rm ~/Limiting_Shut_down.sh
echo "عملکرد خاموش کردن محدودیت فعلی خاموش شده است"
;;
*)
break
;;
esac
done
;;
24)
root_use
send_stats "ورود به سیستم خصوصی"
while true; do
clear
echo "حالت ورود به سیستم کلید خصوصی"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1q4421x78n؟t=209.4"
echo "------------------------------------------------"
echo "یک جفت کلیدی تولید می شود ، یک روش امن تر برای ورود به سیستم SSH"
echo "------------------------"
echo "1. یک کلید جدید را تولید کنید. یک کلید موجود را وارد کنید 3. کلید بومی را مشاهده کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns
case $host_dns in
1)
send_stats "یک کلید جدید ایجاد کنید"
add_sshkey
break_end
;;
2)
send_stats "یک کلید عمومی موجود را وارد کنید"
import_sshkey
break_end
;;
3)
send_stats "کلید مخفی محلی را مشاهده کنید"
echo "------------------------"
echo "اطلاعات کلیدی عمومی"
cat ~/.ssh/authorized_keys
echo "------------------------"
echo "اطلاعات کلید خصوصی"
cat ~/.ssh/sshkey
echo "------------------------"
break_end
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
25)
root_use
send_stats "هشدار تلگرام"
echo "نظارت بر TG-BOT و عملکرد هشدار زودهنگام"
echo "مقدمه ویدیویی: https://youtu.be/vll-eb3z_ty"
echo "------------------------------------------------"
echo "برای دریافت هشدارهای اولیه برای تحقق نظارت بر زمان واقعی و هشدار زودهنگام CPU ، حافظه ، هارد دیسک ، ترافیک و ورود به سیستم SSH ، باید API TG Robot و ID کاربر را پیکربندی کنید."
echo "پس از رسیدن به آستانه ، کاربر به کاربر ارسال می شود"
echo -e "${gl_hui}- در مورد ترافیک ، راه اندازی مجدد سرور دوباره محاسبه می شود-${gl_bai}"
read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice
case "$choice" in
[Yy])
send_stats "هشدار تلگرام فعال است"
cd ~
install nano tmux bc jq
check_crontab_installed
if [ -f ~/TG-check-notify.sh ]; then
chmod +x ~/TG-check-notify.sh
nano ~/TG-check-notify.sh
else
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-check-notify.sh
chmod +x ~/TG-check-notify.sh
nano ~/TG-check-notify.sh
fi
tmux kill-session -t TG-check-notify > /dev/null 2>&1
tmux new -d -s TG-check-notify "~/TG-check-notify.sh"
crontab -l | grep -v '~/TG-check-notify.sh' | crontab - > /dev/null 2>&1
(crontab -l ; echo "@reboot tmux new -d -s TG-check-notify '~/TG-check-notify.sh'") | crontab - > /dev/null 2>&1
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-SSH-check-notify.sh > /dev/null 2>&1
sed -i "3i$(grep '^TELEGRAM_BOT_TOKEN=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh > /dev/null 2>&1
sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh
chmod +x ~/TG-SSH-check-notify.sh
# به پرونده ~/.profile اضافه کنید
if ! grep -q 'bash ~/TG-SSH-check-notify.sh' ~/.profile > /dev/null 2>&1; then
echo 'bash ~/TG-SSH-check-notify.sh' >> ~/.profile
if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
echo 'source ~/.profile' >> ~/.bashrc
fi
fi
source ~/.profile
clear
echo "سیستم هشدار زودهنگام TG-BOT آغاز شده است"
echo -e "${gl_hui}You can also place the TG-check-notify.sh warning file in the root directory on other machines and use it directly!${gl_bai}"
;;
[Nn])
echo "لغو شده"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
26)
root_use
send_stats "آسیب پذیری های پرخطر را در SSH رفع کنید"
cd ~
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh
chmod +x ~/upgrade_openssh9.8p1.sh
~/upgrade_openssh9.8p1.sh
rm -f ~/upgrade_openssh9.8p1.sh
;;
27)
elrepo
;;
28)
Kernel_optimize
;;
29)
clamav
;;
30)
linux_file
;;
31)
linux_language
;;
32)
shell_bianse
;;
33)
linux_trash
;;
34)
linux_backup
;;
35)
ssh_manager
;;
36)
disk_manager
;;
37)
clear
send_stats "تاریخ خط فرمان"
get_history_file() {
for file in "$HOME"/.bash_history "$HOME"/.ash_history "$HOME"/.zsh_history "$HOME"/.local/share/fish/fish_history; do
[ -f "$file" ] && { echo "$file"; return; }
done
return 1
}
history_file=$(get_history_file) && cat -n "$history_file"
;;
38)
rsync_manager
;;
41)
clear
send_stats "صفحه پیام"
echo "صفحه پیام Lion Technology به جامعه رسمی منتقل شده است! لطفاً پیامی را در جامعه رسمی بگذارید!"
echo "https://bbs.kejilion.pro/"
;;
66)
root_use
send_stats "تنظیم یک مرحله"
echo "بهینه سازی سیستم یک مرحله ای"
echo "------------------------------------------------"
echo "موارد زیر اداره و بهینه می شود"
echo "1. سیستم را به جدیدترین به روز کنید"
echo "2. پرونده های ناخواسته سیستم را تمیز کنید"
echo -e "3. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}"
echo -e "4. شماره پورت SSH را روی آن تنظیم کنید${gl_huang}5522${gl_bai}"
echo -e "5. همه درگاه ها را باز کنید"
echo -e "6. روشن کنید${gl_huang}BBR${gl_bai}تسریع کردن"
echo -e "7. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}"
echo -e "8. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}خارج از کشور: 1.1.1.1 8.8.8.8 داخلی: 223.5.5.5${gl_bai}"
echo -e "9. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}"
echo -e "10. بهینه سازی پارامتر هسته در سیستم لینوکس را تغییر دهید${gl_huang}حالت بهینه سازی متعادل${gl_bai}"
echo "------------------------------------------------"
read -e -p "آیا مطمئناً تعمیر و نگهداری یک کلیک دارید؟ (y/n):" choice
case "$choice" in
[Yy])
clear
send_stats "شروع تنظیم یک مرحله ای"
echo "------------------------------------------------"
linux_update
echo -e "[${gl_lv}OK${gl_bai}] 1/10. سیستم را به آخرین به روز کنید"
echo "------------------------------------------------"
linux_clean
echo -e "[${gl_lv}OK${gl_bai}] 2/10. پرونده های ناخواسته سیستم را تمیز کنید"
echo "------------------------------------------------"
add_swap 1024
echo -e "[${gl_lv}OK${gl_bai}] 3/10. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}"
echo "------------------------------------------------"
local new_port=5522
new_ssh_port
echo -e "[${gl_lv}OK${gl_bai}] 4/10. شماره پورت SSH را روی تنظیم کنید${gl_huang}5522${gl_bai}"
echo "------------------------------------------------"
echo -e "[${gl_lv}OK${gl_bai}] 5/10. همه بنادر را باز کنید"
echo "------------------------------------------------"
bbr_on
echo -e "[${gl_lv}OK${gl_bai}] 6/10. باز${gl_huang}BBR${gl_bai}تسریع کردن"
echo "------------------------------------------------"
set_timedate Asia/Shanghai
echo -e "[${gl_lv}OK${gl_bai}] 7/10. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}"
echo "------------------------------------------------"
local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
local dns1_ipv4="223.5.5.5"
local dns2_ipv4="183.60.83.19"
local dns1_ipv6="2400:3200::1"
local dns2_ipv6="2400:da00::6666"
else
local dns1_ipv4="1.1.1.1"
local dns2_ipv4="8.8.8.8"
local dns1_ipv6="2606:4700:4700::1111"
local dns2_ipv6="2001:4860:4860::8888"
fi
set_dns
echo -e "[${gl_lv}OK${gl_bai}] 8/10. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}${gl_bai}"
echo "------------------------------------------------"
install_docker
install wget sudo tar unzip socat btop nano vim
echo -e "[${gl_lv}OK${gl_bai}] 9/10. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}"
echo "------------------------------------------------"
echo "------------------------------------------------"
optimize_balanced
echo -e "[${gl_lv}OK${gl_bai}] 10/10. بهینه سازی پارامترهای هسته برای سیستم لینوکس"
echo -e "${gl_lv}تنظیم سیستم یک مرحله ای به پایان رسیده است${gl_bai}"
;;
[Nn])
echo "لغو شده"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
99)
clear
send_stats "سیستم را مجدداً راه اندازی کنید"
server_reboot
;;
100)
root_use
while true; do
clear
if grep -q '^ENABLE_STATS="true"' /usr/local/bin/k > /dev/null 2>&1; then
local status_message="${gl_lv}正在采集数据${gl_bai}"
elif grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then
local status_message="${gl_hui}采集已关闭${gl_bai}"
else
local status_message="无法确定的状态"
fi
echo "حریم خصوصی و امنیت"
echo "اسکریپت داده هایی را در مورد توابع کاربر جمع آوری می کند ، تجربه اسکریپت را بهینه می کند و عملکردهای سرگرم کننده و مفید تری ایجاد می کند."
echo "شماره نسخه اسکریپت ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکرد مورد استفاده را جمع آوری می کند."
echo "------------------------------------------------"
echo -e "وضعیت فعلی:$status_message"
echo "--------------------"
echo "1. مجموعه را روشن کنید"
echo "2. مجموعه را ببندید"
echo "--------------------"
echo "0. به منوی قبلی برگردید"
echo "--------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
cd ~
sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' /usr/local/bin/k
sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' ~/kejilion.sh
echo "مجموعه فعال شده است"
send_stats "جمع آوری حریم خصوصی و امنیت فعال شده است"
;;
2)
cd ~
sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' /usr/local/bin/k
sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh
echo "مجموعه بسته"
send_stats "حریم خصوصی و امنیت برای جمع آوری بسته شده است"
;;
*)
break
;;
esac
done
;;
101)
clear
k_info
;;
102)
clear
send_stats "حذف اسکریپت شیر ​​فناوری"
echo "حذف اسکریپت شیر ​​فناوری"
echo "------------------------------------------------"
echo "اسکریپت kejilion را کاملاً حذف کرده و بر عملکردهای دیگر شما تأثیر نمی گذارد"
read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice
case "$choice" in
[Yy])
clear
(crontab -l | grep -v "kejilion.sh") | crontab -
rm -f /usr/local/bin/k
rm ~/kejilion.sh
echo "فیلمنامه حذف شده است ، خداحافظ!"
break_end
clear
exit
;;
[Nn])
echo "لغو شده"
;;
*)
echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید."
;;
esac
;;
0)
kejilion
;;
*)
echo "ورودی نامعتبر!"
;;
esac
break_end
done
}
linux_file() {
root_use
send_stats "مدیر پرونده"
while true; do
clear
echo "مدیر پرونده"
echo "------------------------"
echo "مسیر فعلی"
pwd
echo "------------------------"
ls --color=auto -x
echo "------------------------"
echo "1. دایرکتوری را وارد کنید 2. دایرکتوری را ایجاد کنید. مجوزهای فهرست را تغییر دهید."
echo "5. فهرست را حذف کنید 6. به فهرست منو قبلی برگردید"
echo "------------------------"
echo "11. یک پرونده 12 ایجاد کنید. یک پرونده را ویرایش کنید."
echo "15. پرونده را حذف کنید"
echo "------------------------"
echo "21. دایرکتوری پرونده فشرده 22. فهرست پرونده unzip 23. فهرست پرونده های پرونده 24. کپی کردن دایرکتوری پرونده"
echo "25. پرونده را به سرور دیگری منتقل کنید"
echo "------------------------"
echo "0. به منوی قبلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting
case "$Limiting" in
1) # 进入目录
read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname
cd "$dirname" 2>/dev/null || echo "ورود به دایرکتوری امکان پذیر نیست"
send_stats "به دایرکتوری بروید"
;;
2) # 创建目录
read -e -p "لطفاً نام دایرکتوری را وارد کنید تا ایجاد کنید:" dirname
mkdir -p "$dirname" && echo "دایرکتوری ایجاد شده است" || echo "آفرینش شکست خورد"
send_stats "دایرکتوری ایجاد کنید"
;;
3) # 修改目录权限
read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname
read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm
chmod "$perm" "$dirname" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد"
send_stats "مجوزهای فهرست را اصلاح کنید"
;;
4) # 重命名目录
read -e -p "لطفاً نام فهرست فعلی را وارد کنید:" current_name
read -e -p "لطفاً نام دایرکتوری جدید را وارد کنید:" new_name
mv "$current_name" "$new_name" && echo "دایرکتوری تغییر نام داده است" || echo "تغییر نام انجام نشد"
send_stats "تغییر نام دایرکتوری"
;;
5) # 删除目录
read -e -p "لطفاً نام دایرکتوری را وارد کنید تا حذف شود:" dirname
rm -rf "$dirname" && echo "فهرست حذف شده است" || echo "حذف انجام نشد"
send_stats "فهرست را حذف کنید"
;;
6) # 返回上一级选单目录
cd ..
send_stats "به فهرست منوی قبلی برگردید"
;;
11) # 创建文件
read -e -p "لطفاً نام پرونده را برای ایجاد وارد کنید:" filename
touch "$filename" && echo "پرونده ایجاد شده است" || echo "آفرینش شکست خورد"
send_stats "یک فایل ایجاد کنید"
;;
12) # 编辑文件
read -e -p "لطفاً نام پرونده را برای ویرایش وارد کنید:" filename
install nano
nano "$filename"
send_stats "پرونده ها را ویرایش کنید"
;;
13) # 修改文件权限
read -e -p "لطفاً نام پرونده را وارد کنید:" filename
read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm
chmod "$perm" "$filename" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد"
send_stats "مجوزهای پرونده را اصلاح کنید"
;;
14) # 重命名文件
read -e -p "لطفاً نام پرونده فعلی را وارد کنید:" current_name
read -e -p "لطفاً یک نام پرونده جدید وارد کنید:" new_name
mv "$current_name" "$new_name" && echo "پرونده تغییر نام داد" || echo "تغییر نام انجام نشد"
send_stats "تغییر نام پرونده"
;;
15) # 删除文件
read -e -p "لطفاً نام پرونده را وارد کنید تا حذف شود:" filename
rm -f "$filename" && echo "پرونده حذف شده است" || echo "حذف انجام نشد"
send_stats "پرونده ها را حذف کنید"
;;
21) # 压缩文件/目录
read -e -p "لطفاً نام پرونده/دایرکتوری را وارد کنید تا فشرده شود:" name
install tar
tar -czvf "$name.tar.gz" "$name" && echo "فشرده به$name.tar.gz" || echo "فشرده سازی انجام نشد"
send_stats "پرونده ها/دایرکتوری های فشرده شده"
;;
22) # 解压文件/目录
read -e -p "لطفاً نام پرونده را وارد کنید (.tar.gz):" filename
install tar
tar -xzvf "$filename" && echo "فشرده شده$filename" || echo "رفع فشار انجام نشد"
send_stats "پرونده ها/دایرکتوری ها"
;;
23) # 移动文件或目录
read -e -p "لطفاً برای حرکت پرونده یا مسیر دایرکتوری را وارد کنید:" src_path
if [ ! -e "$src_path" ]; then
echo "خطا: پرونده یا فهرست وجود ندارد."
send_stats "جابجایی پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد"
continue
fi
read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path
if [ -z "$dest_path" ]; then
echo "خطا: لطفاً مسیر هدف را وارد کنید."
send_stats "فایل یا فهرست جابجایی انجام نشد: مسیر مقصد مشخص نشده است"
continue
fi
mv "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری به$dest_path" || echo "جابجایی پرونده ها یا دایرکتوری ها انجام نشد"
send_stats "جابجایی پرونده ها یا دایرکتوری ها"
;;
24) # 复制文件目录
read -e -p "لطفاً برای کپی کردن پرونده یا مسیر دایرکتوری را وارد کنید:" src_path
if [ ! -e "$src_path" ]; then
echo "خطا: پرونده یا فهرست وجود ندارد."
send_stats "کپی کردن یک پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد"
continue
fi
read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path
if [ -z "$dest_path" ]; then
echo "خطا: لطفاً مسیر هدف را وارد کنید."
send_stats "کپی کردن پرونده یا دایرکتوری انجام نشد: مسیر مقصد مشخص نشده است"
continue
fi
# از گزینه -r برای کپی مجدد دایرکتوری استفاده کنید
cp -r "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری در آن کپی شده است$dest_path" || echo "کپی کردن یک پرونده یا فهرست انجام نشد"
send_stats "کپی کردن پرونده ها یا دایرکتوری ها"
;;
25) # 传送文件至远端服务器
read -e -p "لطفاً مسیر فایل را برای انتقال وارد کنید:" file_to_transfer
if [ ! -f "$file_to_transfer" ]; then
echo "خطا: پرونده وجود ندارد."
send_stats "انتقال پرونده انجام نشد: پرونده وجود ندارد"
continue
fi
read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip
if [ -z "$remote_ip" ]; then
echo "خطا: لطفاً IP از راه دور سرور را وارد کنید."
send_stats "انتقال پرونده انجام نشد: IP از راه دور سرور وارد نشده است"
continue
fi
read -e -p "لطفاً نام کاربری سرور از راه دور (ریشه پیش فرض) را وارد کنید:" remote_user
remote_user=${remote_user:-root}
read -e -p "لطفاً رمز عبور سرور از راه دور را وارد کنید:" -s remote_password
echo
if [ -z "$remote_password" ]; then
echo "خطا: لطفاً رمز عبور سرور از راه دور را وارد کنید."
send_stats "انتقال پرونده انجام نشد: رمز عبور سرور از راه دور وارد نشده است"
continue
fi
read -e -p "لطفاً درگاه ورود را وارد کنید (پیش فرض 22):" remote_port
remote_port=${remote_port:-22}
# ورودی های قدیمی را برای میزبان های شناخته شده پاک کنید
ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip"
sleep 2 # 等待时间
# انتقال پرونده ها با استفاده از SCP
scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" <<EOF
$remote_password
EOF
if [ $? -eq 0 ]; then
echo "این پرونده به دایرکتوری خانه از راه دور سرور منتقل شده است."
send_stats "انتقال پرونده با موفقیت"
else
echo "انتقال پرونده انجام نشد."
send_stats "انتقال پرونده انجام نشد"
fi
break_end
;;
0) # 返回上一级选单
send_stats "به منوی منوی قبلی برگردید"
break
;;
*) # 处理无效输入
echo "انتخاب نامعتبر ، لطفا دوباره وارد شوید"
send_stats "انتخاب نامعتبر"
;;
esac
done
}
cluster_python3() {
install python3 python3-paramiko
cd ~/cluster/
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/python-for-vps/main/cluster/$py_task
python3 ~/cluster/$py_task
}
run_commands_on_servers() {
install sshpass
local SERVERS_FILE="$HOME/cluster/servers.py"
local SERVERS=$(grep -oP '{"name": "\K[^"]+|"hostname": "\K[^"]+|"port": \K[^,]+|"username": "\K[^"]+|"password": "\K[^"]+' "$SERVERS_FILE")
# تبدیل اطلاعات استخراج شده به یک آرایه
IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS"
# از طریق سرور تکرار کنید و دستورات را اجرا کنید
for ((i=0; i<${#SERVER_ARRAY[@]}; i+=5)); do
local name=${SERVER_ARRAY[i]}
local hostname=${SERVER_ARRAY[i+1]}
local port=${SERVER_ARRAY[i+2]}
local username=${SERVER_ARRAY[i+3]}
local password=${SERVER_ARRAY[i+4]}
echo
echo -e "${gl_huang}وصل کردن به$name ($hostname)...${gl_bai}"
# sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1"
sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1"
done
echo
break_end
}
linux_cluster() {
mkdir cluster
if [ ! -f ~/cluster/servers.py ]; then
cat > ~/cluster/servers.py << EOF
servers = [
]
EOF
fi
while true; do
clear
send_stats "مرکز کنترل خوشه"
echo "کنترل خوشه سرور"
cat ~/cluster/servers.py
echo
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}مدیریت لیست سرور${gl_bai}"
echo -e "${gl_kjlan}1. ${gl_bai}یک سرور اضافه کنید${gl_kjlan}2. ${gl_bai}سرور را حذف کنید${gl_kjlan}3. ${gl_bai}ویرایش سرور"
echo -e "${gl_kjlan}4. ${gl_bai}خوشه${gl_kjlan}5. ${gl_bai}بازگرداندن خوشه"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}وظایف را در دسته ها انجام دهید${gl_bai}"
echo -e "${gl_kjlan}11. ${gl_bai}اسکریپت شیر ​​فنی را نصب کنید${gl_kjlan}12. ${gl_bai}سیستم را به روز کنید${gl_kjlan}13. ${gl_bai}سیستم را تمیز کنید"
echo -e "${gl_kjlan}14. ${gl_bai}داکر را نصب کنید${gl_kjlan}15. ${gl_bai}BBR3 را نصب کنید${gl_kjlan}16. ${gl_bai}حافظه مجازی 1G را تنظیم کنید"
echo -e "${gl_kjlan}17. ${gl_bai}منطقه زمانی را به شانگهای تنظیم کنید${gl_kjlan}18. ${gl_bai}همه بنادر را باز کنید${gl_kjlan}51. ${gl_bai}دستورات سفارشی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice
case $sub_choice in
1)
send_stats "یک سرور خوشه اضافه کنید"
read -e -p "نام سرور:" server_name
read -e -p "IP سرور:" server_ip
read -e -p "درگاه سرور (22):" server_port
local server_port=${server_port:-22}
read -e -p "نام کاربری سرور (ریشه):" server_username
local server_username=${server_username:-root}
read -e -p "رمز عبور کاربر سرور:" server_password
sed -i "/servers = \[/a\ {\"name\": \"$server_name\", \"hostname\": \"$server_ip\", \"port\": $server_port, \"username\": \"$server_username\", \"password\": \"$server_password\", \"remote_path\": \"/home/\"}," ~/cluster/servers.py
;;
2)
send_stats "سرور خوشه را حذف کنید"
read -e -p "لطفاً کلمات کلیدی مورد نیاز برای حذف را وارد کنید:" rmserver
sed -i "/$rmserver/d" ~/cluster/servers.py
;;
3)
send_stats "سرور خوشه را ویرایش کنید"
install nano
nano ~/cluster/servers.py
;;
4)
clear
send_stats "خوشه"
echo -e "لطفا${gl_huang}/root/cluster/servers.py${gl_bai}فایل را بارگیری کنید و نسخه پشتیبان تهیه کنید!"
break_end
;;
5)
clear
send_stats "بازگرداندن خوشه"
echo "لطفاً Servers.py خود را بارگذاری کرده و برای شروع بارگذاری ، هر کلید را فشار دهید!"
echo -e "لطفا خود را بارگذاری کنید${gl_huang}servers.py${gl_bai}پرونده به${gl_huang}/root/cluster/${gl_bai}بازیابی را کامل کنید!"
break_end
;;
11)
local py_task="install_kejilion.py"
cluster_python3
;;
12)
run_commands_on_servers "k update"
;;
13)
run_commands_on_servers "k clean"
;;
14)
run_commands_on_servers "k docker install"
;;
15)
run_commands_on_servers "k bbr3"
;;
16)
run_commands_on_servers "k swap 1024"
;;
17)
run_commands_on_servers "k time Asia/Shanghai"
;;
18)
run_commands_on_servers "k iptables_open"
;;
51)
send_stats "اجرای دستورات را سفارشی کنید"
read -e -p "لطفاً دستور اجرای دسته را وارد کنید:" mingling
run_commands_on_servers "${mingling}"
;;
*)
kejilion
;;
esac
done
}
kejilion_Affiliates() {
clear
send_stats "ستون تبلیغاتی"
echo "ستون تبلیغاتی"
echo "------------------------"
echo "این یک تجربه تبلیغی و خرید ساده تر و زیبا تر را در اختیار کاربران قرار می دهد!"
echo ""
echo -e "پیشنهادات سرور"
echo "------------------------"
echo -e "${gl_lan}Leica Cloud Hong Kong CN2 GIA کره جنوبی دوتایی ISP US CN2 GIA تخفیف${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.lcayun.com/aff/zexuqbim${gl_bai}"
echo "------------------------"
echo -e "${gl_lan}Racknerd 10.99 دلار در سال ایالات متحده 1 هسته اصلی 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://my.racknerd.com/aff.php؟aff=5501&pid=879${gl_bai}"
echo "------------------------"
echo -e "${gl_zi}Hostinger 52.7 دلار در سال ایالات متحده 1 Core 4g Memory 50G هارد 4T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f؟_ga=GA1.3.942352702.1711283207${gl_bai}"
echo "------------------------"
echo -e "${gl_huang}آجر کننده ، 49 دلار در هر سه ماهه ، CN2GIA ایالات متحده ، ژاپن Softbank ، 2 هسته ، حافظه 1 گرم ، هارد 20 گرم ، ترافیک 1T در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://bandwagonhost.com/aff.php؟aff=69004&pid=87${gl_bai}"
echo "------------------------"
echo -e "${gl_lan}DMIT 28 دلار در هر سه ماهه CN2GIA 1 CORE 2G حافظه 20G هارد 800 گرم ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.dmit.io/aff.php؟aff=4966&pid=100${gl_bai}"
echo "------------------------"
echo -e "${gl_zi}V.PS 6.9 دلار در هر ماه توکیو SoftBank 2 هسته 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}"
echo -e "${gl_bai}وب سایت: https://vps.hosting/cart/tokyo-cloud-kvm-vps/؟id=148&؟affid=1355&؟affid=1355${gl_bai}"
echo "------------------------"
echo -e "${gl_kjlan}پیشنهادات VPS محبوب تر${gl_bai}"
echo -e "${gl_bai}وب سایت: https://kejilion.pro/topvps/${gl_bai}"
echo "------------------------"
echo ""
echo -e "تخفیف نام دامنه"
echo "------------------------"
echo -e "${gl_lan}GNAME 8.8 دلار نام دامنه COM سال اول 6.68 دلار نام دامنه CC سال اول${gl_bai}"
echo -e "${gl_bai}وب سایت: https://www.gname.com/register؟tt=86836&ttcode=kejilion86836&ttbj=sh${gl_bai}"
echo "------------------------"
echo ""
echo -e "شیر فناوری اطراف"
echo "------------------------"
echo -e "${gl_kjlan}ایستگاه ب:${gl_bai}https://b23.tv/2mqnQyh ${gl_kjlan}لوله روغن:${gl_bai}https://www.youtube.com/@kejilion${gl_bai}"
echo -e "${gl_kjlan}وب سایت رسمی:${gl_bai}https://kejilion.pro/ ${gl_kjlan}ناوبری:${gl_bai}https://dh.kejilion.pro/${gl_bai}"
echo -e "${gl_kjlan}وبلاگ:${gl_bai}https://blog.kejilion.pro/ ${gl_kjlan}مرکز نرم افزار:${gl_bai}https://app.kejilion.pro/${gl_bai}"
echo "------------------------"
echo ""
}
kejilion_update() {
send_stats "به روزرسانی اسکریپت"
cd ~
while true; do
clear
echo "گزارش به روزرسانی"
echo "------------------------"
echo "همه گزارش ها:${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt"
echo "------------------------"
curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt | tail -n 30
local sh_v_new=$(curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh | grep -o 'sh_v="[0-9.]*"' | cut -d '"' -f 2)
if [ "$sh_v" = "$sh_v_new" ]; then
echo -e "${gl_lv}شما در حال حاضر آخرین نسخه هستید!${gl_huang}v$sh_v${gl_bai}"
send_stats "اسکریپت به روز است و به روزرسانی لازم نیست"
else
echo "نسخه جدیدی را کشف کنید!"
echo -e "نسخه فعلی V$sh_vآخرین نسخه${gl_huang}v$sh_v_new${gl_bai}"
fi
local cron_job="kejilion.sh"
local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job")
if [ -n "$existing_cron" ]; then
echo "------------------------"
echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}"
fi
echo "------------------------"
echo "1. به روز کنید اکنون 2. بروزرسانی خودکار را روشن کنید. به روزرسانی خودکار را خاموش کنید"
echo "------------------------"
echo "0. به منوی اصلی برگردید"
echo "------------------------"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case "$choice" in
1)
clear
local country=$(curl -s ipinfo.io/country)
if [ "$country" = "CN" ]; then
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/cn/kejilion.sh && chmod +x kejilion.sh
else
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh
fi
canshu_v6
CheckFirstRun_true
yinsiyuanquan2
cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1
echo -e "${gl_lv}اسکریپت به آخرین نسخه به روز شده است!${gl_huang}v$sh_v_new${gl_bai}"
send_stats "فیلمنامه به روز است$sh_v_new"
break_end
~/kejilion.sh
exit
;;
2)
clear
local country=$(curl -s ipinfo.io/country)
local ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb)
if [ "$country" = "CN" ]; then
SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"CN\"/g' ./kejilion.sh"
elif [ -n "$ipv6_address" ]; then
SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"V6\"/g' ./kejilion.sh"
else
SH_Update_task="curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh"
fi
check_crontab_installed
(crontab -l | grep -v "kejilion.sh") | crontab -
# (crontab -l 2>/dev/null; echo "0 2 * * * bash -c \"$SH_Update_task\"") | crontab -
(crontab -l 2>/dev/null; echo "$(shuf -i 0-59 -n 1) 2 * * * bash -c \"$SH_Update_task\"") | crontab -
echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}"
send_stats "بروزرسانی خودکار اسکریپت را روشن کنید"
break_end
;;
3)
clear
(crontab -l | grep -v "kejilion.sh") | crontab -
echo -e "${gl_lv}به روزرسانی خودکار بسته است${gl_bai}"
send_stats "به روزرسانی خودکار اسکریپت را ببندید"
break_end
;;
*)
kejilion_sh
;;
esac
done
}
kejilion_sh() {
while true; do
clear
echo -e "${gl_kjlan}"
echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦"
echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣"
echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩"
echo -e "جعبه ابزار Script Lion Technology V$sh_v"
echo -e "ورودی خط فرمان${gl_huang}k${gl_kjlan}سریع اسکریپت ها را شروع کنید${gl_bai}"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}1. ${gl_bai}پرس و جو اطلاعاتی سیستم"
echo -e "${gl_kjlan}2. ${gl_bai}بروزرسانی سیستم"
echo -e "${gl_kjlan}3. ${gl_bai}پاکسازی سیستم"
echo -e "${gl_kjlan}4. ${gl_bai}ابزارهای اساسی"
echo -e "${gl_kjlan}5. ${gl_bai}مدیریت BBR"
echo -e "${gl_kjlan}6. ${gl_bai}مدیریت داکر"
echo -e "${gl_kjlan}7. ${gl_bai}مدیریت پیچ و خم"
echo -e "${gl_kjlan}8. ${gl_bai}مجموعه اسکریپت تست"
echo -e "${gl_kjlan}9. ${gl_bai}مجموعه اسکریپت Oracle Cloud"
echo -e "${gl_huang}10. ${gl_bai}ساختمان وب سایت LDNMP"
echo -e "${gl_kjlan}11. ${gl_bai}بازار کاربرد"
echo -e "${gl_kjlan}12. ${gl_bai}فضای کاری من"
echo -e "${gl_kjlan}13. ${gl_bai}ابزار سیستم"
echo -e "${gl_kjlan}14. ${gl_bai}کنترل خوشه سرور"
echo -e "${gl_kjlan}15. ${gl_bai}ستون تبلیغاتی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}p. ${gl_bai}اسکریپت افتتاح سرور Palu Palu Phantom Beast"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}00. ${gl_bai}به روزرسانی اسکریپت"
echo -e "${gl_kjlan}------------------------${gl_bai}"
echo -e "${gl_kjlan}0. ${gl_bai}اسکریپت خروجی"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "لطفا انتخاب خود را وارد کنید:" choice
case $choice in
1) linux_ps ;;
2) clear ; send_stats "بروزرسانی سیستم" ; linux_update ;;
3) clear ; send_stats "پاکسازی سیستم" ; linux_clean ;;
4) linux_tools ;;
5) linux_bbr ;;
6) linux_docker ;;
7) clear ; send_stats "مدیریت پیچ و خم" ; install wget
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token]
;;
8) linux_test ;;
9) linux_Oracle ;;
10) linux_ldnmp ;;
11) linux_panel ;;
12) linux_work ;;
13) linux_Settings ;;
14) linux_cluster ;;
15) kejilion_Affiliates ;;
p) send_stats "اسکریپت افتتاح سرور Palu Palu Phantom Beast" ; cd ~
curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh
exit
;;
00) kejilion_update ;;
0) clear ; exit ;;
*) echo "ورودی نامعتبر!" ;;
esac
break_end
done
}
k_info() {
send_stats "k مورد استفاده مرجع فرمان"
echo "-------------------"
echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1ib421e7it؟t=0.1"
echo "موارد زیر مورد استفاده مرجع فرمان K است:"
echo "شروع اسکریپت k"
echo "نصب بسته نرم افزاری k نصب nano wget | k اضافه کردن نانو wget | k نصب نانو wget"
echo "بسته بندی k حذف nano wget | K Del Nano Wget | k حذف نانو wget | k حذف نانو wget"
echo "به روزرسانی سیستم K به روزرسانی | k به روزرسانی"
echo "زباله های سیستم تمیز K Clean | k تمیز"
echo "نصب مجدد صفحه سیستم k dd | k نصب مجدد"
echo "کنترل پنل BBR3 K BBR3 | k bbrv3"
echo "پنل تنظیم هسته K NHYH | بهینه سازی هسته"
echo "تنظیم حافظه مجازی k مبادله 2048"
echo "تنظیم منطقه زمانی مجازی k زمان آسیا/شانگهای | k منطقه زمانی آسیا/شانگهای"
echo "سطل زباله بازیافت سیستم | K HSZ | سطل بازیافت k"
echo "عملکرد پشتیبان گیری از سیستم K Backup | k bf | پشتیبان گیری K"
echo "ابزار اتصال از راه دور SSH K SSH | k اتصال از راه دور"
echo "ابزار همگام سازی از راه دور RSYNC K RSYNC | k هماهنگ سازی از راه دور"
echo "ابزار مدیریت دیسک سخت دیسک k | مدیریت دیسک سخت"
echo "نفوذ Intranet (سمت سرور) K FRPS"
echo "نفوذ Intranet (مشتری) K FRPC"
echo "نرم افزار شروع K شروع SSHD | k شروع SSHD"
echo "نرم افزار STOP K STOP SSHD | k متوقف SSHD"
echo "راه اندازی مجدد نرم افزار K Restart SSHD | k راه اندازی مجدد SSHD"
echo "مشاهده وضعیت نرم افزار وضعیت K SSHD | K وضعیت SSHD"
echo "نرم افزار بوت K فعال کردن Docker | k autostart docke | k Docker Startup"
echo "گواهی نام دامنه برنامه K SSL"
echo "نام دامنه گواهینامه انقضاء k ssl ps"
echo "نصب محیط Docker نصب K Docker | K Docker نصب"
echo "Docker Container Management K Docker PS | K Docker Container"
echo "docker镜像管理 k docker img |k docker 镜像"
echo "مدیریت سایت LDNMP K وب"
echo "پاک کردن حافظه پنهان LDNMP k حافظه نهان"
echo "نصب وردپرس k wp | k وردپرس | k wp xxx.com"
echo "پروکسی معکوس k fd | k rp | k anti-generation | k fd xxx.com"
echo "نصب بار تعادل K LoadBalance | K متعادل کننده بار"
echo "صفحه فایروال K FHQ | K فایروال"
echo "Open Port K DKDK 8080 | K درگاه باز 8080"
echo "بستن بندر K GBDK 7800 | K نزدیک بندر 7800"
echo "انتشار IP K fxip 127.0.0.0/8 | k نسخه IP 127.0.0.0/8"
echo "Block IP K Zzip 177.5.25.36 | K بلوک IP 177.5.25.36"
}
if [ "$#" -eq 0 ]; then
# اگر پارامتری وجود ندارد ، منطق تعاملی را اجرا کنید
kejilion_sh
else
# اگر پارامترهایی وجود دارد ، عملکرد مربوطه را اجرا کنید
case $1 in
install|add|安装)
shift
send_stats "نصب نرم افزار"
install "$@"
;;
remove|del|uninstall|卸载)
shift
send_stats "نرم افزار را حذف نصب کنید"
remove "$@"
;;
update|更新)
linux_update
;;
clean|清理)
linux_clean
;;
dd|重装)
dd_xitong
;;
bbr3|bbrv3)
bbrv3
;;
nhyh|内核优化)
Kernel_optimize
;;
trash|hsz|回收站)
linux_trash
;;
backup|bf|备份)
linux_backup
;;
ssh|远程连接)
ssh_manager
;;
rsync|远程同步)
rsync_manager
;;
rsync_run)
shift
send_stats "همگام سازی RSYNC به موقع"
run_task "$@"
;;
disk|硬盘管理)
disk_manager
;;
wp|wordpress)
shift
ldnmp_wp "$@"
;;
fd|rp|反代)
shift
ldnmp_Proxy "$@"
;;
loadbalance|负载均衡)
ldnmp_Proxy_backend
;;
swap)
shift
send_stats "به سرعت حافظه مجازی را تنظیم کنید"
add_swap "$@"
;;
time|时区)
shift
send_stats "به سرعت منطقه زمانی را تنظیم کنید"
set_timedate "$@"
;;
iptables_open)
iptables_open
;;
frps)
frps_panel
;;
frpc)
frpc_panel
;;
打开端口|dkdk)
shift
open_port "$@"
;;
关闭端口|gbdk)
shift
close_port "$@"
;;
放行IP|fxip)
shift
allow_ip "$@"
;;
阻止IP|zzip)
shift
block_ip "$@"
;;
防火墙|fhq)
iptables_panel
;;
status|状态)
shift
send_stats "نمای وضعیت نرم افزار"
status "$@"
;;
start|启动)
shift
send_stats "راه اندازی نرم افزار"
start "$@"
;;
stop|停止)
shift
send_stats "مکث نرم افزاری"
stop "$@"
;;
restart|重启)
shift
send_stats "راه اندازی مجدد نرم افزار"
restart "$@"
;;
enable|autostart|开机启动)
shift
send_stats "چکمه های نرم افزاری بالا"
enable "$@"
;;
ssl)
shift
if [ "$1" = "ps" ]; then
send_stats "وضعیت گواهی را بررسی کنید"
ssl_ps
elif [ -z "$1" ]; then
add_ssl
send_stats "به سرعت برای یک گواهی درخواست کنید"
elif [ -n "$1" ]; then
add_ssl "$1"
send_stats "به سرعت برای یک گواهی درخواست کنید"
else
k_info
fi
;;
docker)
shift
case $1 in
install|安装)
send_stats "داکر را به سرعت نصب کنید"
install_docker
;;
ps|容器)
send_stats "مدیریت سریع کانتینر"
docker_ps
;;
img|镜像)
send_stats "مدیریت سریع آینه"
docker_image
;;
*)
k_info
;;
esac
;;
web)
shift
if [ "$1" = "cache" ]; then
web_cache
elif [ -z "$1" ]; then
ldnmp_web_status
else
k_info
fi
;;
*)
k_info
;;
esac
fi