3 min read

Linux base 常用範本

可用於 x86 or arm 機型的一鍵環境安裝,支持Docker/Docker-compose, AWS Cli , EFS ... 等
Linux base 常用範本

可用於 x86 or arm 機型的一鍵環境安裝,支持Docker/Docker-compose, AWS Cli , EFS ... 等。

會自動將寫入日誌 在 /data/var/logs/init.log若安裝異常或失敗會自動停止,可以直接去目錄查詢原因。

OS : Ubuntu

#!/bin/bash
set -e
set -o pipefail

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 全局顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;36m'
PURPLE='\033[0;35m'
NC='\033[0m' # 無顏色

# 創建日誌文件
LOG_FILE="/data/var/logs/init.log"
mkdir -p /data/var/logs

# 執行並記錄日誌的函數
run_and_log() {
  echo "執行: $1" | tee -a "$LOG_FILE"
  $1 2>&1 | tee -a "$LOG_FILE"
  return ${PIPESTATUS[0]}
}

standard_install(){
  echo -e "${BLUE}--- init apt source ---${NC}"
    apt update && apt install -y git 
    apt install -y git 
    apt install -y rsync 
    apt install -y jq 
    apt install -y build-essential 
    apt install -y tzdata
    apt install -y unzip
    apt install -y nfs-common

    echo -e "${GREEN}--- 創建生產目錄 ---${NC}"
    mkdir -p /data/apps
    mkdir -p /data/htdocs
    mkdir -p /data/var/logs
    mkdir -p /data/var/backup
    mkdir -p /data/src
    mkdir -p /data/exec
    mkdir -p /data/dev
    echo -e "${GREEN}生產目錄創建完成${NC}"
}

docker_install(){
  echo -e "${BLUE}--- Docker Install ---${NC}"
  mkdir -p /etc/docker
  curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh &&
  curl -L "https://github.com/docker/compose/releases/download/v2.34.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose &&
  chmod +x /usr/local/bin/docker-compose
  docker network create shared-network
  sleep 1
}

aws_cli_install(){
  # 自動安裝AWS CLI的腳本
  # 會自動檢測CPU架構並安裝相應版本

  # 設置退出時清理臨時文件
  cleanup() {
      echo "清理臨時文件..."
      rm -rf /tmp/awscliv2.zip /tmp/aws-cli-setup
  }
  trap cleanup EXIT

  # 輸出彩色信息
  info() {
      echo -e "\033[0;32m[信息]\033[0m $1"
  }

  error() {
      echo -e "\033[0;31m[錯誤]\033[0m $1"
      exit 1
  }

  warning() {
      echo -e "\033[0;33m[警告]\033[0m $1"
  }

  # 檢測CPU架構
  info "正在檢測CPU架構..."
  ARCH=$(uname -m)
  case $ARCH in
      x86_64)
          info "檢測到x86_64架構。"
          URL="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
          ;;
      aarch64|arm64)
          info "檢測到ARM架構。"
          URL="https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip"
          ;;
      *)
          error "不支持的架構: $ARCH。目前AWS CLI只支持x86_64和ARM架構。"
          ;;
  esac

  # 檢查必要工具
  check_command() {
      command -v $1 >/dev/null 2>&1 || { error "未找到命令 $1,請先安裝它。"; }
  }

  info "檢查必要工具..."
  check_command curl
  check_command unzip

  # 下載AWS CLI
  info "正在下載AWS CLI..."
  if ! curl -s -o /tmp/awscliv2.zip $URL; then
      error "下載AWS CLI失敗!請檢查網絡連接。"
  fi

  # 解壓縮
  info "正在解壓縮..."
  if ! unzip -q -o /tmp/awscliv2.zip -d /tmp/aws-cli-setup; then
      error "解壓縮失敗!"
  fi

  # 安裝AWS CLI
  info "正在安裝AWS CLI..."
  if ! sudo /tmp/aws-cli-setup/aws/install --update; then
      error "安裝失敗!請嘗試手動安裝。"
  fi

  # 驗證安裝
  info "驗證安裝..."
  if command -v aws >/dev/null 2>&1; then
      VERSION=$(aws --version)
      info "AWS CLI 安裝成功!版本: $VERSION"
  else
      warning "AWS CLI 似乎未正確安裝。請嘗試手動安裝或檢查PATH環境變量。"
  fi

  info "安裝完成!"
}

version_check(){
  echo -e "${YELLOW}-------- Git version --------${NC}"
  git --version
  echo -e "${YELLOW}-------- Docker version --------${NC}"
  docker --version
  docker-compose --version
  echo -e "${YELLOW}-------- AWS-cli version --------${NC}"
  aws --version
  echo -e "${YELLOW}-------- EFS version --------${NC}"
  mount --version
  echo ""
  echo ""
  echo ""
}

# 執行安裝函數並記錄日誌
run_and_log standard_install
run_and_log docker_install
run_and_log aws_cli_install
run_and_log version_check