【ubuntu】虚拟机安装配置,sh脚本自动化,包含 apt+时间同步+docker+mysql+redis+pgsql

发布于:2025-06-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

可以说是ubuntu基础环境搭建合集,个人学习用,使用sh一键安装,避免复制各种命令

流程主要包括
0. 可选择不同ubuntu版本对应安装(支持 Ubuntu 20.04/22.04/23.04/24.04)
1. apt换源aliyun
2. 时间选择上海时区,安装chrony联网同步时间
3. (可选)安装 Docker + 配置镜像仓库源 + 用户组设置 + 开机自启动
4. (可选)MySQL + Redis + PostgreSQL多版本选择,通过docker安装,附带容器卷映射
5. (可选)戴笠配置(主要解决curl、wget、git clone github.com的连接问题)
使用流程
  • vim init_ubuntu.sh新建一个脚本文件
  • 把下面的复制进去就行
  • sudo -v,更新用户权限
  • 然后chmod 755 ./init_ubuntu.sh添加执行权限
  • 然后直接./init_ubuntu.sh
#!/bin/bash

# 询问是否执行某个操作的通用函数
# 用法:ask_to_run "提示语句" 函数名
ask_to_run() {
    local prompt="$1"
    local callback="$2"
    read -p "$prompt [y/N]: " user_choice
    case "$user_choice" in
        [yY][eE][sS]|[yY])
            echo "执行:$callback ..."
            $callback
            ;;
        *)
            echo "跳过:$callback。"
            ;;
    esac
}

# apt 换源为阿里云,支持 Ubuntu 20.04/22.04/23.04/24.04
update_apt() {
    echo "正在更换阿里云软件源..."
    codename=$(lsb_release -cs)

    case "$codename" in
        focal|jammy|lunar|noble)
            sudo tee /etc/apt/sources.list > /dev/null <<EOF
deb https://mirrors.aliyun.com/ubuntu/ $codename main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ $codename main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
EOF
            echo "已设置阿里云镜像源,开始更新缓存..."
            sudo apt-get update
            echo "apt 更新完成。"
            ;;
        *)
            echo "当前 Ubuntu 版本($codename)不在支持列表中,未执行换源。"
            ;;
    esac
}

# 设置上海时区,安装并启动 chrony 同步网络时间
sync_time() {
    echo "设置时区为 Asia/Shanghai..."
    sudo timedatectl set-timezone Asia/Shanghai

    echo "安装并启用 chrony 时间同步服务..."
    sudo apt install -y chrony > /dev/null
    sudo systemctl enable --now chrony

    echo "时间已同步,chrony 已启用。"
}

# 安装 Docker + 配置镜像仓库源 + 用户组设置
install_docker() {
    echo "开始安装 Docker..."

    sudo apt-get update
    sudo apt-get install -y \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        lsb-release

    echo "添加 Docker GPG 密钥..."
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
        gpg --dearmor | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null

    codename=$(lsb_release -cs)
    echo "添加 Docker 镜像源..."
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
      $codename stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    echo "写入 Docker 镜像加速器配置..."
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "registry-mirrors": [
    "https://hub.xdark.top/",
    "https://hub.littlediary.cn/",
    "https://dockerpull.org/",
    "https://hub.crdz.gq/",
    "https://docker.1panel.live/",
    "https://docker.unsee.tech/",
    "https://docker.udayun.com/",
    "https://docker.kejilion.pro/",
    "https://registry.dockermirror.com/",
    "https://docker.rainbond.cc/",
    "https://hub.geekery.cn/",
    "https://docker.1panelproxy.com/",
    "https://docker.linkedbus.com/",
    "https://docker.nastool.de/"
  ]
}
EOF

    echo "重启 Docker 服务并设置开机自启..."
    sudo systemctl daemon-reexec
    sudo systemctl restart docker
    sudo systemctl enable docker
    echo "Docker 已设置为开机自启。"

    echo "将当前用户 ($USER) 添加到 docker 用户组..."
    sudo usermod -aG docker $USER
    echo "当前用户已加入 docker 组,请退出终端或重新登录后生效"

    echo "Docker 安装并配置完成。可以尝试运行:docker run hello-world"
}

# 使用 Docker 安装常用数据库(MySQL / Redis / PostgreSQL),统一密码123456
install_common_databases() {
    echo "开始通过 Docker 安装常用数据库(使用 root/123456)..."

    # 创建统一的数据存储目录
    sudo mkdir -p /opt/docker/mysql /opt/docker/redis /opt/docker/postgres
    sudo chown -R $USER:$USER /opt/docker

    # 安装 MySQL
    echo ""
    echo "安装 MySQL(推荐版本:5.7 或 8.0)"
    read -p "请输入要安装的 MySQL 版本 [默认: 8.0]: " mysql_ver
    mysql_ver=${mysql_ver:-8.0}
    docker run -d --name mysql \
        -p 3306:3306 \
        -e MYSQL_ROOT_PASSWORD=123456 \
        -v /opt/docker/mysql/data:/var/lib/mysql \
        -v /opt/docker/mysql/conf:/etc/mysql/conf.d \
        --restart unless-stopped \
        mysql:$mysql_ver

    echo "MySQL 容器已创建,数据挂载至 /opt/docker/mysql,root 密码为 123456。"

    # 安装 Redis
    echo ""
    echo "安装 Redis(推荐版本:6.2 或 7)"
    read -p "请输入要安装的 Redis 版本 [默认: 7]: " redis_ver
    redis_ver=${redis_ver:-7}
    docker run -d --name redis \
        -p 6379:6379 \
        -v /opt/docker/redis/data:/data \
        --restart unless-stopped \
        redis:$redis_ver \
        redis-server --appendonly yes

    echo "Redis 容器已创建,数据挂载至 /opt/docker/redis,无密码(可后续手动配置)。"

    # 安装 PostgreSQL
    echo ""
    echo "安装 PostgreSQL(推荐版本:13 或 15)"
    read -p "请输入要安装的 PostgreSQL 版本 [默认: 15]: " pgsql_ver
    pgsql_ver=${pgsql_ver:-15}
    docker run -d --name postgres \
        -p 5432:5432 \
        -e POSTGRES_PASSWORD=123456 \
        -v /opt/docker/postgres/data:/var/lib/postgresql/data \
        --restart unless-stopped \
        postgres:$pgsql_ver

    echo "PostgreSQL 容器已创建,数据挂载至 /opt/docker/postgres,root 密码为 123456。"

    echo ""
    echo "所有数据库容器安装完成"
}


# 添加代理配置到 ~/.bashrc,支持 Cla 或 v2r,注意要打开的允许局域网访问
configure_proxy() {


    echo "请选择代理方式:"
    echo "1) Cla Ver (SOCKS5端口7898, HTTP端口7899)"
    echo "2) v2r     (SOCKS5端口10808, HTTP端口10809)"
    read -p "输入选项编号 [1/2]: " proxy_choice

    case "$proxy_choice" in
        1)
            {
                echo ""
                echo "# === Cla 代理设置 ==="
                echo "alias use-proxy='export http_proxy=\"socks5h://192.168.88.1:7897\"; export https_proxy=\"socks5h://192.168.88.1:7897\"'"
                echo "alias use-proxy-http='export http_proxy=\"http://192.168.88.1:7897\"; export https_proxy=\"http://192.168.88.1:7897\"'"
                echo "alias disable-proxy='unset http_proxy https_proxy'"
            } >> ~/.bashrc
            echo "已将 Cla 代理命令写入 ~/.bashrc"
            ;;
        2)
            {
                echo ""
                echo "# === v2 代理设置 ==="
                echo "alias use-proxy='export http_proxy=\"socks5h://192.168.88.1:10808\"; export https_proxy=\"socks5h://192.168.88.1:10808\"'"
                echo "alias use-proxy-http='export http_proxy=\"http://192.168.88.1:10809\"; export https_proxy=\"http://192.168.88.1:10809\"'"
                echo "alias disable-proxy='unset http_proxy https_proxy'"
            } >> ~/.bashrc
            echo "已将 v2 代理命令写入 ~/.bashrc"
            ;;
        *)
            echo "无效选项,跳过代理配置。"
            ;;
    esac

    # 使 alias 生效
    source ~/.bashrc
}


# 主函数入口
main() {
    echo "开始初始化 Ubuntu 环境..."
    
    # apt
    update_apt

    # 时间同步
    sync_time
    
    # docker
    ask_to_run "是否安装 Docker?" install_docker

    # 判断 Docker 是否安装成功后再提示数据库安装
    if command -v docker &>/dev/null; then
        ask_to_run "是否通过 Docker 安装 MySQL / Redis / PostgreSQL?" install_common_databases
    else
        echo "未检测到 Docker,跳过数据库安装提示。"
    fi

    # 代理配置
    configure_proxy

    echo "==初始化全部完成=="
}

main

二、具体戴笠命令示例

配置戴笠后你可以直接使用以下命令:

1. git clone
use-proxy   # git建议 SOCKS5

git clone https://github.com/torvalds/linux.git

disable-proxy # 用完禁用
2. wget
use-proxy-http   # wget建议使用 HTTP 代理更兼容

wget https://github.com/

disable-proxy
3. curl
use-proxy   # curl建议 SOCKS5 代理

curl https://api.github.com/users/octocat

disable-proxy

https://github.com/0voice


网站公告

今日签到

点亮在社区的每一天
去签到