作者:小傅哥
大家好,我是技術(shù)UP主小傅哥。
說(shuō)實(shí)話,做項(xiàng)目不上線,等于吃面不配蒜??,效果少一半!面試官也說(shuō):“所有做Java編程項(xiàng)目,沒(méi)有上線云服務(wù)器的,一律當(dāng)玩具看!” 是呀,做完項(xiàng)目不上線,是不你做的項(xiàng)目沒(méi)法運(yùn)行,是個(gè)小卡拉米練手的??? 那怎么辦?
啥是云服務(wù)器?
云服務(wù)器,就等同于自己的另外一個(gè)電腦,在另外一臺(tái)電腦部署 redis、mysql、mq等,本地電腦連接過(guò)去使用。尤其是 Windows 電腦用戶,真心建議搞個(gè)云服務(wù)器,否則你會(huì)浪費(fèi)非常多的時(shí)間這套 Windows 適配問(wèn)題。
這樣有了云服務(wù)器,就可以不用嚯嚯本地電腦了,安裝了卸,卸了安裝,把自己本機(jī)電腦環(huán)境弄的亂碼起糟,全是費(fèi)時(shí)費(fèi)力的事。有這精力,不如用一臺(tái)云服務(wù)器部署環(huán)境,開(kāi)發(fā)完成項(xiàng)目后,再上線云服務(wù)器。既節(jié)省本地電腦資源,又鍛煉了云服務(wù)器操作,起步一舉兩得!
不過(guò),放心!別擔(dān)心你不會(huì)用云服務(wù)器,因?yàn)樾「蹈缫呀?jīng)給你準(zhǔn)備了一件安裝云服務(wù)器環(huán)境的腳本,和各類部署環(huán)境和構(gòu)建項(xiàng)目的視頻。即使是小卡拉米,也能跟著學(xué)習(xí)下來(lái)。
一、優(yōu)惠云服務(wù)器地址
我適合買哪個(gè)服務(wù)器?
- 2c2g 1年,28¥,可部署一套 docker、mysql、redis、SpringBoot 單體項(xiàng)目,用于替代本地電腦的環(huán)境部署。2c4g 1年(非常推薦3年),109¥,可部署一套 docker、mysql、redis、rabbitmq、xxl-job、SpringBoot 分布式微服務(wù)項(xiàng)目。2c8g 1年,328¥,適合部署小傅哥星球社群大部分項(xiàng)目,可以完成多個(gè)微服務(wù)項(xiàng)目部署。
注意:購(gòu)買選擇系統(tǒng)時(shí),推薦系統(tǒng)鏡像,centos 7.9
如果自己賬號(hào)不是新人身份,可以自己注冊(cè)個(gè)新賬號(hào),用家里人JD掃碼認(rèn)證一下即可。
二、一鍵部署腳本
小傅哥,這里為你準(zhǔn)備一鍵安裝 Docker 環(huán)境的腳本文件,你可以非常省心的完成 Docker 部署。使用方式如下。
1. 腳本文件
地址
-
- :https://github.com/fuzhengwei/xfg-dev-tech-docker-install
地址
- :https://gitcode.com/Yao__Shun__Yu/xfg-dev-tech-docker-install
2. 腳本說(shuō)明
2.1 install_docker.sh
#!/bin/bash
# 安裝Docker的Shell腳本
# 作者:xiaofuge
# 版本:1.0
# 創(chuàng)建日期:$(date +"%Y-%m-%d")
# 設(shè)置顏色輸出
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[0;33m'
NC='33[0m'?# No Color
# 輸出帶顏色的信息函數(shù)
info() {
? ? echo -e?"${GREEN}[INFO]${NC} $1"
}
warning() {
? ? echo -e?"${YELLOW}[WARNING]${NC} $1"
}
error() {
? ? echo -e?"${RED}[ERROR]${NC} $1"
? ? exit?1
}
# 檢查是否以root用戶運(yùn)行
if?[?"$(id -u)"?-ne?0?]; then
? ? warning?"此腳本需要root權(quán)限運(yùn)行,將嘗試使用sudo"
? ? # 如果不是root用戶,則使用sudo重新運(yùn)行此腳本
? ? exec sudo?"$0""$@"
? ? exit $?
fi
info?"docker 環(huán)境安裝腳本 By xiaofuge,建議使用 https://618.gaga.plus 優(yōu)惠購(gòu)買服務(wù)器,安裝 centos 7.9 系統(tǒng)。"
# 顯示系統(tǒng)信息
info?"開(kāi)始安裝 Docker 環(huán)境..."
info?"檢查系統(tǒng)信息..."
echo?"內(nèi)核版本: $(uname -r)"
echo?"操作系統(tǒng): $(cat /etc/os-release | grep PRETTY_NAME | cut -d '"' -f 2)"
# 檢查是否已安裝Docker
if command -v docker &> /dev/null; then
? ? INSTALLED_DOCKER_VERSION=$(docker --version | cut -d '' -f3 | cut -d ',' -f1)
? ? warning "檢測(cè)到系統(tǒng)已安裝Docker,版本為: $INSTALLED_DOCKER_VERSION"
? ??
? ? # 詢問(wèn)用戶是否卸載已安裝的Docker
? ? read -p "是否卸載已安裝的Docker并安裝新版本?(y/n): " UNINSTALL_DOCKER
? ??
? ? if [[ "$UNINSTALL_DOCKER" =~ ^[Yy]$ ]]; then
? ? ? ? info "開(kāi)始卸載已安裝的Docker..."
? ? ? ? systemctl stop docker &> /dev/null
? ? ? ? yum remove -y docker-ce docker-ce-cli containerd.io docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine &> /dev/null
? ? ? ? rm -rf /var/lib/docker
? ? ? ? info "Docker卸載完成"
? ? else
? ? ? ? info "用戶選擇保留已安裝的Docker,退出安裝程序"
? ? ? ? exit 0
? ? fi
fi
# 更新系統(tǒng)包
info "更新系統(tǒng)包..."
yum update -y || error "系統(tǒng)更新失敗"
# 安裝依賴包
info "安裝Docker依賴包..."
yum install -y yum-utils device-mapper-persistent-data lvm2 || error "依賴包安裝失敗"
# 添加Docker倉(cāng)庫(kù)
info "添加Docker倉(cāng)庫(kù)..."
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || error "添加Docker倉(cāng)庫(kù)失敗"
# 安裝Docker
info "安裝Docker CE 25.0.5..."
yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io || error "Docker安裝失敗"
# 安裝Docker Compose
info "安裝Docker Compose v2.24.1..."
curl -L https://gitee.com/fustack/docker-compose/releases/download/v2.24.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose || error "Docker Compose下載失敗"
chmod +x /usr/local/bin/docker-compose || error "無(wú)法設(shè)置Docker Compose可執(zhí)行權(quán)限"
# 啟動(dòng)Docker服務(wù)
info "啟動(dòng)Docker服務(wù)..."
systemctl start docker || error "Docker服務(wù)啟動(dòng)失敗"
# 設(shè)置Docker開(kāi)機(jī)自啟
info "設(shè)置Docker開(kāi)機(jī)自啟..."
systemctl enable docker || error "設(shè)置Docker開(kāi)機(jī)自啟失敗"
# 重啟Docker服務(wù)
info "重啟Docker服務(wù)..."
systemctl restart docker || error "Docker服務(wù)重啟失敗"
# 配置Docker鏡像加速
info "配置Docker鏡像加速..."
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
? "registry-mirrors": [
? ? "https://docker.1ms.run",
? ? "https://docker.1panel.live",
? ? "https://docker.ketches.cn"
? ]
}
EOF
# 再次重啟Docker服務(wù)以應(yīng)用鏡像加速配置
info "重啟Docker服務(wù)以應(yīng)用鏡像加速配置..."
systemctl restart docker || error "應(yīng)用鏡像加速配置后Docker重啟失敗"
# 驗(yàn)證Docker安裝
info "驗(yàn)證Docker安裝..."
DOCKER_VERSION=$(docker --version)
echo "Docker版本: $DOCKER_VERSION"
DOCKER_COMPOSE_VERSION=$(docker-compose --version)
echo "Docker Compose版本: $DOCKER_COMPOSE_VERSION"
info "Docker環(huán)境安裝完成!"
info "鏡像加速已配置為:"
echo " ?- https://docker.1ms.run"
echo " ?- https://docker.1panel.live"
echo " ?- https://docker.ketches.cn"
info "您的Docker已經(jīng)安裝完畢,版本為:$DOCKER_VERSION"
info "提示,如果鏡像不可用,可以進(jìn)入鏈接,按照說(shuō)明,重新設(shè)置鏡像;https://status.1panel.top/status/docker"
- 本腳本,就是這套腳本里的腳本:https://bugstack.cn/md/road-map/docker.html 文檔里有詳細(xì)的介紹。通過(guò)教程里的執(zhí)行步驟,編寫了自動(dòng)執(zhí)行腳本 shell 文件。這份腳本我放到了網(wǎng)絡(luò)上,會(huì)被 run_install_docker 下載執(zhí)行。后續(xù)有更新也更加方便。
2.2 run_install_docker_local
#!/bin/bash
# 設(shè)置顏色輸出
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[0;33m'
NC='33[0m'?# No Color
# 輸出帶顏色的信息函數(shù)
info() {
? ? echo -e?"${GREEN}[INFO]${NC} $1"
}
warning() {
? ? echo -e?"${YELLOW}[WARNING]${NC} $1"
}
error() {
? ? echo -e?"${RED}[ERROR]${NC} $1"
? ? exit?1
}
# 定義本地腳本文件名
LOCAL_SCRIPT_NAME="install_docker.sh"
info?"使用本地Docker安裝腳本: $LOCAL_SCRIPT_NAME"
# 檢查本地腳本是否存在
if?[ ! -f?"$LOCAL_SCRIPT_NAME"?]; then
? ? error?"本地腳本文件 $LOCAL_SCRIPT_NAME 不存在"
fi
# 設(shè)置可執(zhí)行權(quán)限
info?"設(shè)置可執(zhí)行權(quán)限..."
chmod +x?"$LOCAL_SCRIPT_NAME"
# 執(zhí)行安裝腳本
info?"開(kāi)始執(zhí)行Docker安裝腳本..."
info?"注意:安裝過(guò)程可能需要root權(quán)限,如果需要會(huì)自動(dòng)請(qǐng)求"
echo?"-----------------------------------------------------------"
./$LOCAL_SCRIPT_NAME
# 檢查安裝腳本的退出狀態(tài)
if?[ $? -eq?0?]; then
? ? info?"Docker安裝腳本執(zhí)行完成"
? ??
? ? # 詢問(wèn)用戶是否安裝Portainer
? ? read -p?"是否安裝Portainer容器管理界面?(y/n): "?INSTALL_PORTAINER
? ??
? ??if?[[?"$INSTALL_PORTAINER"?=~ ^[Yy]$ ]]; then
? ? ? ? info?"開(kāi)始安裝Portainer..."
? ? ? ? docker run -d --restart=always --name portainer -p?9000:9000?-v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
? ? ? ??
? ? ? ??if?[ $? -eq?0?]; then
? ? ? ? ? ? info?"Portainer安裝成功!"
? ? ? ? ? ? warning?"重要提示:請(qǐng)確保您的云服務(wù)器已開(kāi)放9000端口!"
? ? ? ? ? ? echo?"-----------------------------------------------------------"
? ? ? ? ? ? echo?"Portainer訪問(wèn)方式:"
? ? ? ? ? ? echo?"1. 通過(guò)公網(wǎng)訪問(wèn):http://您的服務(wù)器公網(wǎng)IP:9000"
? ? ? ? ? ? echo?"2. 首次訪問(wèn)需要設(shè)置管理員賬號(hào)和密碼"
? ? ? ? ? ? echo?"3. 登錄后即可通過(guò)Web界面管理Docker容器"
? ? ? ? ? ? echo?"-----------------------------------------------------------"
? ? ? ? ? ? info?"您可以使用Portainer來(lái)方便地管理Docker容器、鏡像、網(wǎng)絡(luò)和卷等資源"
? ? ? ??else
? ? ? ? ? ? warning?"Portainer安裝失敗,請(qǐng)手動(dòng)安裝或檢查Docker狀態(tài)"
? ? ? ? fi
? ??else
? ? ? ? info?"用戶選擇不安裝Portainer"
? ? fi
else
? ? error?"Docker安裝腳本執(zhí)行失敗,請(qǐng)查看上面的錯(cuò)誤信息"
fi
- run_install_docker、run_install_docker_local,推薦使用 run_install_docker_local這是最終執(zhí)行安裝的腳本,安裝完成 docker 后,還會(huì)提示是否安裝 docker 管理工具 portainer。
2.3 run_install_software
#!/bin/bash
# 設(shè)置顏色輸出
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[0;33m'
BLUE='33[0;34m'
NC='33[0m'?# No Color
# 輸出帶顏色的信息函數(shù)
info() {
? ? echo -e?"${GREEN}[INFO]${NC} $1"
}
warning() {
? ? echo -e?"${YELLOW}[WARNING]${NC} $1"
}
error() {
? ? echo -e?"${RED}[ERROR]${NC} $1"
? ? exit?1
}
header() {
? ? echo -e?"${BLUE}[HEADER]${NC} $1"
}
# 檢查是否以root用戶運(yùn)行
if?[?"$(id -u)"?-ne?0?]; then
? ? warning?"此腳本需要root權(quán)限運(yùn)行,將嘗試使用sudo"
? ? # 如果不是root用戶,則使用sudo重新運(yùn)行此腳本
? ? exec sudo?"$0""$@"
? ? exit $?
fi
# 檢查Docker是否已安裝
if?! command -v docker &> /dev/null; then
? ? error?"Docker未安裝,請(qǐng)先運(yùn)行install_docker.sh安裝Docker"
fi
# 檢查docker-compose是否已安裝
if?! command -v docker-compose &> /dev/null; then
? ? info?"正在安裝docker-compose..."
? ? curl -L?"https://gitee.com/fustack/docker-compose/releases/download/v2.24.1/docker-compose-$(uname -s)-$(uname -m)"?-o /usr/local/bin/docker-compose
? ? chmod +x /usr/local/bin/docker-compose
? ??if?! command -v docker-compose &> /dev/null; then
? ? ? ? error?"docker-compose安裝失敗,請(qǐng)手動(dòng)安裝"
? ??else
? ? ? ? info?"docker-compose安裝成功"
? ? fi
fi
# 檢查software目錄是否存在
if?[ ! -d?"$(pwd)/software"?]; then
? ? error?"software目錄不存在,請(qǐng)從 https://github.com/fuzhengwei/xfg-dev-tech-docker-install 下載項(xiàng)目,并上傳到云服務(wù)器 / 根目錄下"
fi
# 檢查docker-compose-software.yml文件是否存在
if?[ ! -f?"$(pwd)/software/docker-compose-software.yml"?]; then
? ? error?"docker-compose-software.yml文件不存在,請(qǐng)檢查software目錄是否完整"
fi
# 檢查docker-compose-software-aliyun.yml文件是否存在
if?[ ! -f?"$(pwd)/software/docker-compose-software-aliyun.yml"?]; then
? ? error?"docker-compose-software-aliyun.yml文件不存在,請(qǐng)檢查software目錄是否完整"
fi
# 獲取當(dāng)前磁盤空間信息
disk_info=$(df -h / | tail -1)
disk_total=$(echo $disk_info | awk?'{print $2}')
disk_used=$(echo $disk_info | awk?'{print $3}')
disk_avail=$(echo $disk_info | awk?'{print $4}')
disk_used_percent=$(echo $disk_info | awk?'{print $5}')
info?"當(dāng)前磁盤空間信息:總空間 ${disk_total},已使用 ${disk_used},可用 ${disk_avail},使用率 ${disk_used_percent}"
# 定義軟件列表及其大小估計(jì)(單位:MB)
declare -A software_sizes=(
? ? ["nacos"]=500
? ? ["mysql"]=600
? ? ["phpmyadmin"]=100
? ? ["redis"]=50
? ? ["redis-admin"]=50
? ? ["rabbitmq"]=300
? ? ["elasticsearch"]=500
? ? ["logstash"]=300
? ? ["kibana"]=200
? ? ["xxl-job-admin"]=150
? ? ["prometheus"]=100
? ? ["grafana"]=100
)
# 定義軟件的賬號(hào)密碼信息
declare -A software_credentials=(
? ? ["nacos"]="賬號(hào):nacos 密碼:nacos 訪問(wèn)地址:http://服務(wù)器IP:8848/nacos"
? ? ["mysql"]="賬號(hào):root 密碼:123456 端口:13306"
? ? ["phpmyadmin"]="訪問(wèn)地址:http://服務(wù)器IP:8899 (連接到MySQL)"
? ? ["redis"]="端口:16379"
? ? ["redis-admin"]="賬號(hào):admin 密碼:admin 訪問(wèn)地址:http://服務(wù)器IP:8081"
? ? ["rabbitmq"]="賬號(hào):admin 密碼:admin 訪問(wèn)地址:http://服務(wù)器IP:15672"
? ? ["elasticsearch"]="訪問(wèn)地址:http://服務(wù)器IP:9200"
? ? ["logstash"]="端口:4560,50000,9600"
? ? ["kibana"]="訪問(wèn)地址:http://服務(wù)器IP:5601"
? ? ["xxl-job-admin"]="賬號(hào):admin 密碼:123456 訪問(wèn)地址:http://服務(wù)器IP:9090/xxl-job-admin"
? ? ["prometheus"]="訪問(wèn)地址:http://服務(wù)器IP:9090"
? ? ["grafana"]="訪問(wèn)地址:http://服務(wù)器IP:4000"
)
# 檢查已安裝的軟件
check_installed() {
? ? local software=$1
? ??if?docker ps -a --format?'{{.Names}}'?| grep -q?"^${software}$"; then
? ? ? ??return0?# 已安裝
? ??else
? ? ? ??return1?# 未安裝
? ? fi
}
# 選擇使用哪個(gè)配置文件
echo?"-----------------------------------------------------------"
header?"選擇配置文件:"
echo?"-----------------------------------------------------------"
echo?"1. 使用原始配置文件 (推薦,但可能需要從Docker Hub拉取鏡像)"
echo?"2. 使用阿里云鏡像配置文件 (國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境推薦)"
echo?"-----------------------------------------------------------"
read -p?"請(qǐng)選擇配置文件 [1/2] (默認(rèn): 1): "?config_choice
config_choice=${config_choice:-1}
if?[?"$config_choice"?=?"1"?]; then
? ? compose_file="$(pwd)/software/docker-compose-software.yml"
? ? info?"已選擇使用原始配置文件"
else
? ? compose_file="$(pwd)/software/docker-compose-software-aliyun.yml"
? ? info?"已選擇使用阿里云鏡像配置文件"
fi
# 列出可安裝的軟件
echo?"-----------------------------------------------------------"
header?"可安裝的軟件列表:"
echo?"-----------------------------------------------------------"
# 創(chuàng)建軟件選擇數(shù)組
software_list=("nacos""mysql""phpmyadmin""redis""redis-admin""rabbitmq""elasticsearch""logstash""kibana")
# 如果選擇了原始配置文件,添加只在原始配置中存在的軟件
if?[?"$config_choice"?=?"1"?]; then
? ? software_list+=("xxl-job-admin""prometheus""grafana")
fi
declare -A software_selected
# 顯示軟件列表及其狀態(tài)
for?((i=0; i<${#software_list[@]}; i++));?do
? ? software=${software_list[$i]}
? ? size=${software_sizes[$software]}
? ??
? ??if?check_installed?"$software"; then
? ? ? ? echo?"$((i+1)). $software [已安裝] (預(yù)計(jì)占用空間: ${size}MB)"
? ??else
? ? ? ? echo?"$((i+1)). $software (預(yù)計(jì)占用空間: ${size}MB)"
? ? fi
done
echo?"-----------------------------------------------------------"
echo?"請(qǐng)選擇要安裝的軟件(多選,用空格分隔,如:1 3 5):"
read -a selections
# 處理用戶選擇
total_size=0
for?selection in?"${selections[@]}";?do
? ? # 檢查輸入是否為數(shù)字
? ??if?! [[?"$selection"?=~ ^[0-9]+$ ]]; then
? ? ? ? warning?"無(wú)效的選擇: $selection,已跳過(guò)"
? ? ? ??continue
? ? fi
? ??
? ? # 檢查選擇是否在范圍內(nèi)
? ??if?[?"$selection"?-lt?1?] || [?"$selection"?-gt?"${#software_list[@]}"?]; then
? ? ? ? warning?"選擇超出范圍: $selection,已跳過(guò)"
? ? ? ??continue
? ? fi
? ??
? ? index=$((selection-1))
? ? software=${software_list[$index]}
? ? software_selected[$software]=1
? ? size=${software_sizes[$software]}
? ? total_size=$((total_size + size))
done
if?[ ${#software_selected[@]} -eq?0?]; then
? ? error?"未選擇任何軟件,安裝已取消"
fi
# 顯示選擇的軟件及總空間
echo?"-----------------------------------------------------------"
header?"您選擇了以下軟件:"
for?software in?"${!software_selected[@]}";?do
? ? echo?"- $software (預(yù)計(jì)占用空間: ${software_sizes[$software]}MB)"
done
echo?"總計(jì)預(yù)計(jì)占用空間: ${total_size}MB"
echo?"-----------------------------------------------------------"
# MySQL初始化提示
if?[[ -n?"${software_selected[mysql]}"?]]; then
? ? echo?"-----------------------------------------------------------"
? ? header?"MySQL初始化提示:"
? ? echo?"-----------------------------------------------------------"
? ? info?"您選擇了安裝MySQL,安裝完成后可以使用phpmyadmin進(jìn)行管理"
? ? info?"如果您希望在初始化時(shí)創(chuàng)建數(shù)據(jù)庫(kù)和表,可以將SQL腳本放在以下目錄:"
? ? echo?" ?$(pwd)/software/mysql/sql/"
? ? info?"目前該目錄已包含以下SQL文件:"
? ? ls -1"$(pwd)/software/mysql/sql/"?| grep?".sql"?|?while?read -r sql_file;?do
? ? ? ? echo?" ?- $sql_file"
? ? done
? ? info?"您可以添加自己的SQL文件到該目錄,它們將在MySQL初始化時(shí)自動(dòng)執(zhí)行"
? ? echo?"-----------------------------------------------------------"
fi
# Prometheus配置提示
if?[[ -n?"${software_selected[prometheus]}"?]]; then
? ? echo?"-----------------------------------------------------------"
? ? header?"Prometheus配置提示:"
? ? echo?"-----------------------------------------------------------"
? ? info?"您選擇了安裝Prometheus,請(qǐng)確保:"
? ? info?"1. 在安裝前配置您的應(yīng)用監(jiān)控設(shè)置:"
? ? echo?" ?$(pwd)/software/prometheus/prometheus.yml"
? ? info?"2. 確保被監(jiān)控的應(yīng)用端口已在防火墻中開(kāi)放"
? ? info?"3. 當(dāng)前配置文件中的目標(biāo)應(yīng)用為:'system-app:8091'"
? ? info?"4. 如需監(jiān)控其他應(yīng)用,請(qǐng)修改配置文件中的targets部分"
? ? echo?"-----------------------------------------------------------"
fi
# 確認(rèn)安裝
read -p?"確認(rèn)安裝以上軟件?(y/n): "?confirm
if?[[ !?"$confirm"?=~ ^[Yy]$ ]]; then
? ? info?"安裝已取消"
? ? exit?0
fi
# 創(chuàng)建臨時(shí)的docker-compose文件
temp_compose_file="$(pwd)/software/docker-compose-temp.yml"
cp?"$compose_file""$temp_compose_file"
# 處理已安裝的軟件
for?software in?"${!software_selected[@]}";?do
? ??if?check_installed?"$software"; then
? ? ? ? read -p?"$software 已安裝,是否重新安裝?(y/n): "?reinstall
? ? ? ??if?[[?"$reinstall"?=~ ^[Yy]$ ]]; then
? ? ? ? ? ? info?"將重新安裝 $software"
? ? ? ? ? ? docker rm -f?"$software"?&> /dev/null
? ? ? ??else
? ? ? ? ? ? info?"跳過(guò)安裝 $software"
? ? ? ? ? ? unset software_selected[$software]
? ? ? ? fi
? ? fi
done
# 如果沒(méi)有軟件需要安裝,則退出
if?[ ${#software_selected[@]} -eq?0?]; then
? ? info?"沒(méi)有需要安裝的軟件,安裝已取消"
? ? rm -f?"$temp_compose_file"
? ? exit?0
fi
# 修改臨時(shí)docker-compose文件,只保留選中的服務(wù)
sed -i?'/^services:/,$d'"$temp_compose_file"
echo?"services:"?>>?"$temp_compose_file"
# 從原始文件中提取選中的服務(wù)配置
original_file="$compose_file"
for?software in?"${!software_selected[@]}";?do
? ? # 提取服務(wù)配置塊
? ? awk -v service="$software:"'BEGIN {flag=0; found=0;}
? ? $0 ~ "^ ?"service {flag=1; found=1;}
? ? flag && /^ ?[a-zA-Z]/ && $0 !~ "^ ?"service {flag=0;}
? ? flag {print;}
? ? END {exit !found;}'"$original_file"?>>?"$temp_compose_file"
? ??
? ? # 如果是依賴于其他服務(wù)的,確保依賴的服務(wù)也被安裝
? ??if?grep -q?"depends_on:"?<<<?"$(awk -v service="$software:" 'BEGIN {flag=0;}
? ? $0 ~ "^ ?"service {flag=1;}
? ? flag && /^ ?[a-zA-Z]/ && $0 !~ "^ ?"service {flag=0;}
? ? flag {print;}' "$original_file")"; then
? ? ? ? # 提取依賴服務(wù)
? ? ? ? depends=$(awk -v service="$software:"'BEGIN {flag=0;}
? ? ? ? $0 ~ "^ ?"service {flag=1;}
? ? ? ? flag && /depends_on:/ {flag=2;}
? ? ? ? flag==2 && /^ ? ? ?[a-zA-Z]/ {print $1;}
? ? ? ? flag && /^ ?[a-zA-Z]/ && $0 !~ "^ ?"service {flag=0;}'"$original_file")
? ? ? ??
? ? ? ??for?dep in $depends;?do
? ? ? ? ? ??if?[ -z?"${software_selected[$dep]}"?]; then
? ? ? ? ? ? ? ? warning?"$software 依賴于 $dep,但 $dep 未被選中安裝"
? ? ? ? ? ? ? ? read -p?"是否同時(shí)安裝 $dep?(y/n): "?install_dep
? ? ? ? ? ? ? ??if?[[?"$install_dep"?=~ ^[Yy]$ ]]; then
? ? ? ? ? ? ? ? ? ? info?"將同時(shí)安裝 $dep"
? ? ? ? ? ? ? ? ? ? software_selected[$dep]=1
? ? ? ? ? ? ? ? ? ? # 提取依賴服務(wù)配置塊
? ? ? ? ? ? ? ? ? ? awk -v service="$dep:"'BEGIN {flag=0; found=0;}
? ? ? ? ? ? ? ? ? ? $0 ~ "^ ?"service {flag=1; found=1;}
? ? ? ? ? ? ? ? ? ? flag && /^ ?[a-zA-Z]/ && $0 !~ "^ ?"service {flag=0;}
? ? ? ? ? ? ? ? ? ? flag {print;}
? ? ? ? ? ? ? ? ? ? END {exit !found;}'"$original_file"?>>?"$temp_compose_file"
? ? ? ? ? ? ? ??else
? ? ? ? ? ? ? ? ? ? warning?"$software 可能無(wú)法正常工作,因?yàn)槿鄙僖蕾?$dep"
? ? ? ? ? ? ? ? fi
? ? ? ? ? ? fi
? ? ? ? done
? ? fi
done
# 添加網(wǎng)絡(luò)配置
echo?""?>>?"$temp_compose_file"
awk?'/^networks:/,0'"$original_file"?>>?"$temp_compose_file"
# 執(zhí)行docker-compose
info?"開(kāi)始安裝選中的軟件..."
cd?"$(pwd)/software"
docker-compose -f docker-compose-temp.yml up -d
# 檢查安裝結(jié)果
if?[ $? -eq?0?]; then
? ? info?"軟件安裝完成!"
? ? echo?"-----------------------------------------------------------"
? ? header?"已安裝的軟件及訪問(wèn)信息:"
? ??for?software in?"${!software_selected[@]}";?do
? ? ? ??if?check_installed?"$software"; then
? ? ? ? ? ? echo?"- $software: ${software_credentials[$software]}"
? ? ? ? ? ??
? ? ? ? ? ? # MySQL安裝后的提示
? ? ? ? ? ??if?[?"$software"?=?"mysql"?]; then
? ? ? ? ? ? ? ? info?"MySQL已安裝成功,您可以使用phpmyadmin進(jìn)行管理"
? ? ? ? ? ? ? ? info?"初始化SQL腳本已自動(dòng)執(zhí)行,包括:"
? ? ? ? ? ? ? ? ls -1"$(pwd)/mysql/sql/"?| grep?".sql"?|?while?read -r sql_file;?do
? ? ? ? ? ? ? ? ? ? echo?" ?- $sql_file"
? ? ? ? ? ? ? ? done
? ? ? ? ? ? fi
? ? ? ? ? ??
? ? ? ? ? ? # Prometheus安裝后的提示
? ? ? ? ? ??if?[?"$software"?=?"prometheus"?]; then
? ? ? ? ? ? ? ? info?"Prometheus已安裝成功,請(qǐng)確保:"
? ? ? ? ? ? ? ? info?"1. 被監(jiān)控的應(yīng)用已正確配置并開(kāi)放端口"
? ? ? ? ? ? ? ? info?"2. 如需修改監(jiān)控配置,請(qǐng)編輯:$(pwd)/prometheus/prometheus.yml"
? ? ? ? ? ? ? ? info?"3. 修改配置后需要重啟Prometheus:docker restart prometheus"
? ? ? ? ? ? fi
? ? ? ??else
? ? ? ? ? ? warning?"$software 安裝失敗"
? ? ? ? ? ??if?[?"$config_choice"?=?"1"?]; then
? ? ? ? ? ? ? ? warning?"可能是因?yàn)榫W(wǎng)絡(luò)問(wèn)題無(wú)法拉取鏡像,建議嘗試使用阿里云鏡像配置文件重新安裝"
? ? ? ? ? ? ? ? warning?"重新運(yùn)行腳本并選擇選項(xiàng)2使用阿里云鏡像配置文件"
? ? ? ? ? ? fi
? ? ? ? fi
? ? done
? ? echo?"-----------------------------------------------------------"
? ? info?"如需修改賬號(hào)密碼,請(qǐng)編輯 $compose_file 文件"
? ? info?"修改后,重新運(yùn)行此腳本即可更新配置"
? ??
? ? # 清理臨時(shí)文件
? ? rm -f?"$temp_compose_file"
else
? ? error?"軟件安裝失敗,請(qǐng)查看上面的錯(cuò)誤信息"
? ??if?[?"$config_choice"?=?"1"?]; then
? ? ? ? warning?"可能是因?yàn)榫W(wǎng)絡(luò)問(wèn)題無(wú)法拉取鏡像,建議嘗試使用阿里云鏡像配置文件重新安裝"
? ? ? ? warning?"重新運(yùn)行腳本并選擇選項(xiàng)2使用阿里云鏡像配置文件"
? ? fi
fi
- 軟件安裝腳本
3. 上傳腳本
- ssh 工具,推薦 termius。https://bugstack.cn/md/road-map/tool.html 免費(fèi)的就夠用,帶有 sftp 工具。左側(cè)是云服務(wù)器空間 root 下,右側(cè)是本地環(huán)境。
4. 執(zhí)行安裝
4.1 docker 安裝
[root@xiaofuge?~]# ls
run_install_docker_local.sh
[root@xiaofuge?~]# chmod +x run_install_docker_local.sh?
[root@xiaofuge?~]# ./run_install_docker_local.sh?
-
- 執(zhí)行完
./run_install_docker_local.sh?
- ?全程會(huì)自動(dòng)化安裝,如果已經(jīng)過(guò) docker 會(huì)提示是否卸載。使用起來(lái)非常方便。
4.2 軟件安裝
[root@xiaofuge?dev-ops]# ls
install_docker.sh ?README.md ?run_install_docker_local.sh ?run_install_docker.sh ?run_install_software.sh ?software
[root@xiaofuge?dev-ops]# chmod +x run_install_software.sh?
[root@xiaofuge?dev-ops]# ls
install_docker.sh ?README.md ?run_install_docker_local.sh ?run_install_docker.sh ?run_install_software.sh ?software
- 安裝時(shí)候可以選擇需要安裝的軟件,重復(fù)安裝也會(huì)提示卸載。