Yujun's Blog

云服务器环境安装

June 3, 2025 (1mo ago)DevOps

云服务器环境安装

很多开发者做的项目只停留在本地,从未上线部署,导致项目经验不完整,也让本地开发环境变得混乱。

不知道大家是不是也经历过这样的场景:

  • 为了跑一个项目,在自己的 Windows 电脑上装了 MySQL、又装了 Redis,电脑越来越卡。
  • 跟着教程敲了半天命令,结果一个字母打错,环境就崩了,心态也崩了。
  • 好不容易做完一个项目,想给面试官展示,却发现它只能在你的电脑上运行,一挪窝就“水土不服”。

今天,我们就来彻底解决这个问题。利用一个脚本即可,轻松地把一台空白的云服务器,变成一个功能强大的、随用随取的开发环境。

假设现在我们已经有了自己的云服务器,有了服务器,我们就要开始装软件了。

之前我们安装环境,可能的步骤是:打开一个长长的教程文档。然后小心翼翼地一条条复制、粘贴命令。祈祷网络没问题,祈祷自己别手抖打错字。一个环节出错,就得花半天时间去网上找答案。

这种方式不仅慢,而且极易出错,更要命的是,下次你要再搭一套环境,还得把这痛苦的过程再经历一遍。

相较于之前的教程手动一个一个敲命令,在这里更推荐脚本安装环境,因为我们的任务是软件开发,而不是配置环境,不要把时间浪费在这上面。

执行一个命令,然后你就可以去泡杯咖啡了。回来时,一切都已就绪。

你需要做的,仅仅是看着菜单,输入你想要的Y / N,然后回车。脚本就会自动帮你把这些软件装好,并配置妥当。

安装 Docker

#!/bin/bash

# ================================================================= #
#       通用 Docker & Docker Compose 一键安装脚本 (智能适配) 🚀     #
# ================================================================= #
#                                                                   #
# 作者:Yujun (基于 xiaofuge 的优秀脚本进行修改和增强)              #
# 版本:3.0-Universal                                               #
# 日期:2024-06-13                                                  #
# 用途:自动检测 CentOS/RHEL 或 Ubuntu/Debian 系统并安装 Docker。   #
#                                                                   #
# ================================================================= #

# --- 设置颜色输出,让提示更醒目 ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# --- 定义带颜色的信息输出函数 ---
info() {
    echo -e "${GREEN}[✅ INFO]${NC} $1"
}

warning() {
    echo -e "${YELLOW}[⚠️ WARNING]${NC} $1"
}

error() {
    echo -e "${RED}[❌ ERROR]${NC} $1"
    exit 1
}

step() {
    echo -e "\n${BLUE}Step ==> $1${NC}"
}

# --- 权限检查:确保以 root 用户运行 ---
if [ "$(id -u)" -ne 0 ]; then
    warning "需要 root 权限。别担心,我将尝试使用 sudo 帮您搞定... 👮"
    exec sudo "$0" "$@"
    exit $?
fi

# --- 操作系统检测 ---
OS_TYPE=""
if grep -q -i "centos\|red hat" /etc/os-release; then
    OS_TYPE="centos"
elif grep -q -i "ubuntu\|debian" /etc/os-release; then
    OS_TYPE="ubuntu"
else
    error "无法识别的操作系统。此脚本仅支持 CentOS/RHEL 和 Ubuntu/Debian。"
fi

# --- 欢迎与系统检查 ---
echo -e "${BLUE}======================================================${NC}"
echo -e "${GREEN} 欢迎使用 Docker 通用一键部署脚本 ✨ ${NC}"
echo -e "${BLUE}======================================================${NC}"
info "即将开始为您配置一台强大的 Docker 主机!"

step "1. 系统环境检查"
info "检测到您的操作系统为: ${YELLOW}${OS_TYPE}${NC}"
echo "  - 内核版本: $(uname -r)"
echo "  - 操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d '"' -f 2)"

# --- 将特定于系统的操作封装到函数中 ---

uninstall_docker() {
    info "好的,开始清理旧的 Docker 环境... 🗑️"
    systemctl stop docker &> /dev/null
    if [ "$OS_TYPE" == "centos" ]; then
        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
    elif [ "$OS_TYPE" == "ubuntu" ]; then
        apt-get remove -y docker-ce docker-ce-cli containerd.io docker.io docker-engine docker-buildx-plugin docker-compose-plugin &> /dev/null
        rm -rf /var/lib/containerd
    fi
    rm -rf /var/lib/docker
    info "旧版本 Docker 已彻底卸载!"
}

install_docker_dependencies_and_repo() {
    if [ "$OS_TYPE" == "centos" ]; then
        step "3. 更新系统软件包 & 安装依赖"
        yum update -y || error "系统更新失败。"
        yum install -y yum-utils device-mapper-persistent-data lvm2 || error "依赖包安装失败。"
        step "4. 添加 Docker 仓库 (阿里源)"
        yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || error "添加 Docker 仓库失败。"
    elif [ "$OS_TYPE" == "ubuntu" ]; then
        step "3. 更新系统软件包 & 安装依赖"
        apt-get update -y || error "系统更新失败。"
        apt-get install -y ca-certificates curl gnupg lsb-release || error "依赖包安装失败。"
        step "4. 添加 Docker 官方 GPG 密钥和仓库"
        install -m 0755 -d /etc/apt/keyrings
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
        chmod a+r /etc/apt/keyrings/docker.gpg
        echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
        apt-get update -y || error "更新 Docker 仓库信息失败。"
    fi
}

install_docker_engine() {
    step "5. 安装 Docker Engine"
    info "核心步骤:正在安装 Docker Engine... 🐳"
    if [ "$OS_TYPE" == "centos" ]; then
        # 锁定一个已知稳定的版本
        yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io || error "Docker 安装失败!"
    elif [ "$OS_TYPE" == "ubuntu" ]; then
        # 安装最新稳定版
        apt-get install -y docker-ce docker-ce-cli containerd.io || error "Docker 安装失败!"
    fi
}

# --- 主执行流程 ---

step "2. 检查现有的 Docker 安装"
if command -v docker &> /dev/null; then
    INSTALLED_DOCKER_VERSION=$(docker --version | cut -d ' ' -f3 | cut -d ',' -f1)
    warning "🤔 检测到系统已安装 Docker,版本为: $INSTALLED_DOCKER_VERSION"
    
    read -p "是否需要卸载旧版本并重新安装?(y/n): " UNINSTALL_DOCKER
    
    if [[ "$UNINSTALL_DOCKER" =~ ^[Yy]$ ]]; then
        uninstall_docker
    else
        info "好的,您选择保留现有 Docker。脚本退出。👋"
        exit 0
    fi
fi

# 调用特定于系统的安装函数
install_docker_dependencies_and_repo
install_docker_engine

# --- 通用安装步骤 ---

step "6. 安装 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 "无法设置 Docker Compose 的可执行权限。"

step "7. 启动并设置 Docker 开机自启"
info "正在启动 Docker 服务... ⚡️"
systemctl start docker || error "Docker 服务启动失败。"
info "设置 Docker 为开机自启动,省去后顾之忧... 🔄"
systemctl enable docker || error "设置 Docker 开机自启失败。"

step "8. 配置国内镜像加速器"
info "为 Docker Hub 配置国内镜像,拉取镜像快如闪电... 🪞"
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
info "镜像加速配置完毕,正在重启 Docker 使其生效..."
systemctl restart docker || error "应用镜像加速配置后 Docker 重启失败。"

# --- 最终验证 ---
step "9. 最终验证"
info "正在检查安装结果..."
DOCKER_VERSION=$(docker --version)
DOCKER_COMPOSE_VERSION=$(docker-compose --version)

# --- 总结 ---
echo -e "\n${BLUE}===================================================================${NC}"
echo -e "${GREEN}          🎉🎉🎉 恭喜!Docker 环境已为您准备就绪! 🎉🎉🎉          ${NC}"
echo -e "${BLUE}===================================================================${NC}"
echo -e "  > ${GREEN}Docker 版本:${NC}      $DOCKER_VERSION"
echo -e "  > ${GREEN}Docker Compose 版本:${NC} $DOCKER_COMPOSE_VERSION"
echo ""
info "镜像加速已配置为:"
echo -e "  - ${YELLOW}https://docker.1ms.run${NC}"
echo -e "  - ${YELLOW}https://docker.1panel.live${NC}"
echo -e "  - ${YELLOW}https://docker.ketches.cn${NC}"
echo ""
warning "💡 温馨提示:如果发现镜像无法拉取,可以访问 https://status.1panel.top/status/docker 查看最新可用镜像并手动修改 /etc/docker/daemon.json 文件。"
echo -e "${BLUE}===================================================================${NC}\n"

请把这部分脚本内容写到:install_docker.sh 文件中,并上传到云服务器上。

安装 Portainer

#!/bin/bash

# ================================================================= #
#          独立的 Portainer 安装脚本 ⛵          #
# ================================================================= #
#                                                                   #
# 作者:Yujun                                                       #
# 版本:1.0                                                         #
# 用途:在任何已安装 Docker 的系统上,一键安装或重装 Portainer。    #
#                                                                   #
# ================================================================= #

# --- 设置颜色输出 ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# --- 定义信息输出函数 ---
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 "\n${BLUE}===================== $1 =====================${NC}"; }

header "Portainer 安装向导"

# 1. 检查 Docker 是否已安装并运行 (关键前提)
if ! command -v docker &> /dev/null; then
    error "Docker 未安装!请先运行 'install_docker_universal.sh' 安装 Docker。"
fi
if ! docker info &> /dev/null; then
    error "Docker 服务未运行!请使用 'sudo systemctl start docker' 启动它。"
fi
info "Docker 环境检测通过。"

# 2. 检查 Portainer 容器是否已存在
if [ $(docker ps -a -f "name=portainer" --format '{{.Names}}') ]; then
    warning "检测到名为 'portainer' 的容器已存在。"
    read -p "是否需要删除现有容器并重新安装?(y/n) [默认: n]: " REINSTALL
    REINSTALL=${REINSTALL:-n}
    if [[ "$REINSTALL" =~ ^[Yy]$ ]]; then
        info "正在删除旧的 Portainer 容器..."
        docker rm -f portainer || error "删除旧容器失败!"
        info "旧容器已删除。"
    else
        info "您选择保留现有容器。脚本退出。👋"
        exit 0
    fi
fi

# 3. 开始安装 Portainer
info "开始安装最新社区版的 Portainer (portainer-ce)..."
docker run -d \
  --name portainer \
  --restart=always \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

# 4. 验证安装结果
if [ $? -eq 0 ]; then
    # 尝试自动获取公网IP
    PUBLIC_IP=$(curl -s http://ipinfo.io/ip || curl -s http://icanhazip.com || echo "<您的服务器公网IP>")
    
    info "Portainer 安装成功!"
    header "🎉 Portainer 访问信息 🎉"
    echo -e "${GREEN}访问地址:${NC} ${YELLOW}http://${PUBLIC_IP}:9000${NC}"
    echo ""
    echo "下一步操作指引:"
    echo "1. 在浏览器中打开上面的地址。"
    echo "2. 首次访问,需要设置一个管理员账号 (admin) 和密码。"
    echo "3. 登录后,选择 'Local' 环境进行连接,开始您的可视化 Docker之旅!"
    warning "重要提示:请务必在您的云服务商防火墙/安全组中,开放 9000 端口!"
    echo -e "${BLUE}=======================================================${NC}"
else
    error "Portainer 安装失败!请检查 Docker 状态和上面的错误日志。"
fi

请把这部分脚本内容写到:install_portainer.sh 文件中,并上传到云服务器上。


通过这套脚本,我们把原来可能需要耗费半天甚至一天的环境搭建工作,压缩成了几分钟的傻瓜式操作。 现在,我们拥有了一个专业、稳定、可重复的云端开发环境。从此,你可以把宝贵的精力真正地投入到写代码、做项目、搞创新上,而不是在环境配置的泥潭里反复挣扎。

Comments