231 lines
6.7 KiB
Bash
231 lines
6.7 KiB
Bash
|
#!/bin/bash
|
|||
|
# Copyright 2024 Mengning Software All rights reserved.
|
|||
|
|
|||
|
# 默认值
|
|||
|
NAME=DevStar-Studio
|
|||
|
IMAGE_REGISTRY_USER=mengning997
|
|||
|
IMAGE_NAME=devstar-studio
|
|||
|
VERSION=latest # DevStar Studio的默认版本为最新版本
|
|||
|
PORT=80 # 设置端口默认值为 80
|
|||
|
SSH_PORT=2222 # 设置ssh默认端口号2222
|
|||
|
DATA_DIR=${HOME}/devstar_data
|
|||
|
APP_INI=${DATA_DIR}/app.ini
|
|||
|
|
|||
|
# 错误处理函数
|
|||
|
error_handler() {
|
|||
|
devstar help
|
|||
|
exit 1
|
|||
|
}
|
|||
|
|
|||
|
# 捕获错误信号
|
|||
|
trap 'error_handler' ERR
|
|||
|
|
|||
|
# Exit immediately if a command exits with a non-zero status
|
|||
|
set -e
|
|||
|
|
|||
|
# Colors for output
|
|||
|
GREEN='\033[0;32m'
|
|||
|
RED='\033[0;31m'
|
|||
|
NC='\033[0m' # No Color
|
|||
|
|
|||
|
# Function to display success message
|
|||
|
function success {
|
|||
|
echo -e "${GREEN}$1${NC}"
|
|||
|
}
|
|||
|
|
|||
|
# Function to display failure message
|
|||
|
function failure {
|
|||
|
echo -e "${RED}$1${NC}"
|
|||
|
}
|
|||
|
|
|||
|
# Detect the OS type and install dependencies
|
|||
|
function install_dependencies {
|
|||
|
# Install dependencies based on the OS type
|
|||
|
success "dependencies install begin: "
|
|||
|
OS_ID=$(grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
|
|||
|
|
|||
|
case $OS_ID in
|
|||
|
ubuntu|debian)
|
|||
|
# 检查 Docker 是否已安装
|
|||
|
if ! command -v docker &> /dev/null
|
|||
|
then
|
|||
|
echo "Installing Docker..."
|
|||
|
# 更新包索引
|
|||
|
sudo apt-get update
|
|||
|
# 安装 Docker
|
|||
|
sudo apt-get install -y docker.io
|
|||
|
echo "Docker Installed!"
|
|||
|
else
|
|||
|
echo "Docker Installed, $(docker --version)"
|
|||
|
fi
|
|||
|
;;
|
|||
|
centos)
|
|||
|
# sudo yum update -y
|
|||
|
# sudo yum install -y epel-release
|
|||
|
# sudo yum groupinstall -y "Development Tools"
|
|||
|
# sudo yum install -y yaml-cpp yaml-cpp-devel
|
|||
|
;;
|
|||
|
fedora)
|
|||
|
# sudo dnf update -y
|
|||
|
# sudo dnf group install -y "Development Tools"
|
|||
|
# sudo dnf install -y yaml-cpp yaml-cpp-devel
|
|||
|
;;
|
|||
|
*)
|
|||
|
failure "Unsupported OS: $OS_ID"
|
|||
|
exit 1
|
|||
|
;;
|
|||
|
esac
|
|||
|
}
|
|||
|
|
|||
|
# Function to install
|
|||
|
function install {
|
|||
|
install_dependencies
|
|||
|
if sudo docker pull mengning997/$IMAGE_NAME:$VERSION; then
|
|||
|
success "Successfully pulled mengning997/$IMAGE_NAME:$VERSION"
|
|||
|
else
|
|||
|
sudo docker pull devstar.cn/devstar/$IMAGE_NAME:$VERSION
|
|||
|
IMAGE_REGISTRY_USER=devstar.cn/devstar
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
# Function to start
|
|||
|
function start {
|
|||
|
if [[ -z "$IMAGE_STR" ]]; then
|
|||
|
install
|
|||
|
fi
|
|||
|
# 创建devstar_data目录用于持久化存储DevStar相关的配置和用户数据
|
|||
|
mkdir -p $DATA_DIR
|
|||
|
sudo chown 1000:1000 $DATA_DIR
|
|||
|
sudo chmod 666 /var/run/docker.sock
|
|||
|
if [ ! -f "$APP_INI" ]; then
|
|||
|
DOMAIN_NAME=$(hostname -I | awk '{print $1}')
|
|||
|
echo "DOMAIN_NAME=$DOMAIN_NAME"
|
|||
|
else
|
|||
|
# 读取 DOMAIN 值
|
|||
|
DOMAIN_NAME=$(grep -E '^\s*DOMAIN\s*=' "$APP_INI" | cut -d'=' -f2 | xargs)
|
|||
|
# 检查是否成功读取到值
|
|||
|
if [[ -z "$DOMAIN_NAME" ]]; then
|
|||
|
DOMAIN_NAME="localhost"
|
|||
|
fi
|
|||
|
echo "DOMAIN_NAME=$DOMAIN_NAME"
|
|||
|
fi
|
|||
|
# 启动devstar-studio容器
|
|||
|
stop
|
|||
|
if [[ -z "$IMAGE_STR" ]]; then
|
|||
|
IMAGE_STR="$IMAGE_REGISTRY_USER/$IMAGE_NAME:$VERSION"
|
|||
|
fi
|
|||
|
echo "image=$IMAGE_STR"
|
|||
|
sudo docker run --restart=always --name $NAME -d -p $PORT:3000 -p $SSH_PORT:$SSH_PORT -v /var/run/docker.sock:/var/run/docker.sock -v ~/devstar_data:/var/lib/gitea -v ~/devstar_data:/etc/gitea $IMAGE_STR
|
|||
|
# 打开 `http://localhost:8080` 完成安装。
|
|||
|
success "-------------------------------------------------------"
|
|||
|
success "DevStar started in http://$DOMAIN_NAME:$PORT successfully!"
|
|||
|
success "-------------------------------------------------------"
|
|||
|
exit 0
|
|||
|
}
|
|||
|
|
|||
|
# Function to stop
|
|||
|
function stop {
|
|||
|
if [ $(docker ps -a --filter "name=^/${NAME}$" -q | wc -l) -gt 0 ]; then
|
|||
|
sudo docker stop $NAME && sudo docker rm -f $NAME
|
|||
|
fi
|
|||
|
if [ $(docker ps -a --filter "name=^/devstar-studio$" -q | wc -l) -gt 0 ]; then
|
|||
|
sudo docker stop devstar-studio && sudo docker rm -f devstar-studio
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
# Function to logs
|
|||
|
function logs {
|
|||
|
# 查看devstar-studio容器的运行日志
|
|||
|
sudo docker logs $NAME
|
|||
|
}
|
|||
|
|
|||
|
# Function to clean
|
|||
|
function clean {
|
|||
|
stop
|
|||
|
rm -rf $DATA_DIR
|
|||
|
}
|
|||
|
|
|||
|
# Function to usage help
|
|||
|
function usage {
|
|||
|
success "------------------------------------------------------------------------"
|
|||
|
success "DevStar usage help:"
|
|||
|
success " help, -h, --help, Help information"
|
|||
|
success " start Start DevStar Studio"
|
|||
|
success " --port=<arg> Specify the port number (default port is 80)"
|
|||
|
success " --ssh-port=<arg> Specify the ssh-port number (default ssh-port is 2222)"
|
|||
|
success " --version=<arg> Specify the DevStar Studio Image Version (default verson is latest)"
|
|||
|
success " --image=<arg> Specify the DevStar Studio Image example: devstar-studio:latest "
|
|||
|
success " stop Stop the running DevStar Studio"
|
|||
|
success " logs View the logs of the devstar-studio container"
|
|||
|
failure " clean Clean up the running DevStar Studio, including deleting user data. Please use with caution."
|
|||
|
success "------------------------------------------------------------------------"
|
|||
|
exit 0
|
|||
|
}
|
|||
|
|
|||
|
# Main script
|
|||
|
case "$1" in
|
|||
|
-h|--help|help)
|
|||
|
usage
|
|||
|
;;
|
|||
|
start)
|
|||
|
ARGS=$(getopt --long port::,ssh-port::,version::,image:: -- "$@")
|
|||
|
if [ $? -ne 0 ]; then
|
|||
|
failure "ARGS ERROR!"
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
eval set -- "${ARGS}"
|
|||
|
# 处理选项
|
|||
|
while true; do
|
|||
|
case "$1" in
|
|||
|
--port)
|
|||
|
PORT="$2"
|
|||
|
echo "The Port is: $PORT"
|
|||
|
shift 2 ;;
|
|||
|
--ssh-port)
|
|||
|
SSH_PORT="$2"
|
|||
|
echo "The SSH_Port is: $SSH_PORT"
|
|||
|
shift 2 ;;
|
|||
|
--version)
|
|||
|
VERSION="$2"
|
|||
|
echo "The DevStar Studio Image Version is: $VERSION"
|
|||
|
shift 2 ;;
|
|||
|
--image)
|
|||
|
IMAGE_STR="$2"
|
|||
|
echo "The DevStar Studio Image: $IMAGE_STR"
|
|||
|
shift 2 ;;
|
|||
|
--)
|
|||
|
shift
|
|||
|
break ;;
|
|||
|
*)
|
|||
|
failure "Unrecognized option: $1"
|
|||
|
exit 1 ;;
|
|||
|
esac
|
|||
|
done
|
|||
|
start
|
|||
|
;;
|
|||
|
stop)
|
|||
|
stop
|
|||
|
;;
|
|||
|
logs)
|
|||
|
logs
|
|||
|
;;
|
|||
|
clean)
|
|||
|
clean
|
|||
|
;;
|
|||
|
*)
|
|||
|
# 获取当前脚本的文件名
|
|||
|
script_name=$(basename "$0")
|
|||
|
# 判断脚本名是否为 devstar
|
|||
|
if [ "$script_name" != "devstar" ]; then
|
|||
|
sudo mv ./install.sh /usr/bin/devstar
|
|||
|
rm -rf install.sh
|
|||
|
success "--------------------------------------"
|
|||
|
success "DevStar Studio installed successfully!"
|
|||
|
success "--------------------------------------"
|
|||
|
success "Copyright 2024 Mengning Software All rights reserved."
|
|||
|
devstar help
|
|||
|
fi
|
|||
|
;;
|
|||
|
esac
|
|||
|
|