Compare commits
2 Commits
fix/devcon
...
feature/ma
| Author | SHA1 | Date | |
|---|---|---|---|
| bfe02c57b2 | |||
| 4a6fc80f85 |
@@ -10,6 +10,9 @@ DATA_VOLUME=devstar_data
|
||||
DATA_VOLUME_FILE="$HOME/.devstar/data_volume"
|
||||
CONTAINER_FILE="$HOME/.devstar/container_name"
|
||||
|
||||
SUDO="sudo"
|
||||
PLATFORM=""
|
||||
|
||||
# 错误处理函数
|
||||
error_handler() {
|
||||
devstar help
|
||||
@@ -41,12 +44,12 @@ failure() {
|
||||
create_volume() {
|
||||
local volume_name="${1:-$DATA_VOLUME}"
|
||||
|
||||
if sudo docker volume inspect "$volume_name" >/dev/null 2>&1; then
|
||||
if $SUDO docker volume inspect "$volume_name" >/dev/null 2>&1; then
|
||||
echo "检测到数据卷 '$volume_name' 已存在" >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
if sudo docker volume create "$volume_name"; then
|
||||
if $SUDO docker volume create "$volume_name"; then
|
||||
echo "数据卷 '$volume_name' 创建成功"
|
||||
return 0
|
||||
else
|
||||
@@ -59,20 +62,20 @@ delete_volume() {
|
||||
local volume_name="${1:-$DATA_VOLUME}"
|
||||
|
||||
# 检查数据卷是否存在
|
||||
if ! sudo docker volume inspect "$volume_name" >/dev/null 2>&1; then
|
||||
if ! $SUDO docker volume inspect "$volume_name" >/dev/null 2>&1; then
|
||||
echo "数据卷 '$volume_name' 不存在" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 执行删除
|
||||
if sudo docker volume rm "$volume_name" 2>/dev/null; then
|
||||
if $SUDO docker volume rm "$volume_name" 2>/dev/null; then
|
||||
echo "Docker数据卷 '$volume_name' 已删除"
|
||||
return 0
|
||||
else
|
||||
echo "删除失败!尝试强制删除..." >&2
|
||||
|
||||
# 尝试强制删除
|
||||
if sudo docker volume rm -f "$volume_name" 2>/dev/null; then
|
||||
if $SUDO docker volume rm -f "$volume_name" 2>/dev/null; then
|
||||
echo "Docker数据卷 '$volume_name' 已强制删除"
|
||||
return 0
|
||||
else
|
||||
@@ -85,26 +88,48 @@ delete_volume() {
|
||||
# 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 '"')
|
||||
success "dependencies install begin: "
|
||||
# 检测操作系统类型
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS 系统
|
||||
OS_ID="macos"
|
||||
elif [[ -f /etc/os-release ]]; then
|
||||
# Linux 系统
|
||||
OS_ID=$(grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||
else
|
||||
OS_ID="unknown"
|
||||
fi
|
||||
|
||||
case $OS_ID in
|
||||
macos)
|
||||
SUDO=""
|
||||
# macOS 上检测架构,Apple Silicon 需要平台参数
|
||||
if [[ "$(uname -m)" == "arm64" ]]; then
|
||||
PLATFORM="--platform linux/amd64"
|
||||
fi
|
||||
# macOS:Docker Desktop 需要手动安装
|
||||
if ! command -v docker &> /dev/null; then
|
||||
brew install docker docker-compose
|
||||
else
|
||||
echo "Docker Installed, $(docker --version)"
|
||||
fi
|
||||
;;
|
||||
ubuntu|debian)
|
||||
# 检查是否需要更新
|
||||
if ! command -v docker &> /dev/null || ! command -v ip &> /dev/null; then
|
||||
sudo apt-get update
|
||||
$SUDO apt-get update
|
||||
fi
|
||||
# 检查 Docker 是否已安装
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "Installing Docker..."
|
||||
# 安装 Docker
|
||||
sudo apt-get install -y docker.io
|
||||
$SUDO apt-get install -y docker.io
|
||||
echo "Docker Installed!"
|
||||
else
|
||||
echo "Docker Installed, $(docker --version)"
|
||||
fi
|
||||
if ! command -v ip &> /dev/null; then
|
||||
sudo apt-get install -y iproute2
|
||||
$SUDO apt-get install -y iproute2
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
@@ -117,26 +142,26 @@ function install_dependencies {
|
||||
# Function to install
|
||||
function install {
|
||||
install_dependencies
|
||||
if sudo docker pull mengning997/devstar-studio:$VERSION; then
|
||||
sudo docker tag mengning997/devstar-studio:$VERSION devstar.cn/devstar/devstar-studio:latest
|
||||
success "Successfully pulled mengning997/devstar-studio:$VERSION renamed to devstar.cn/devstar/devstar-studio:latest"
|
||||
else
|
||||
sudo docker pull devstar.cn/devstar/devstar-studio:latest
|
||||
success "Successfully pulled devstar.cn/devstar/devstar-studio:latest"
|
||||
if $SUDO docker pull $PLATFORM mengning997/devstar-studio:$VERSION; then
|
||||
$SUDO docker tag mengning997/devstar-studio:$VERSION devstar.cn/devstar/devstar-studio:$VERSION
|
||||
success "Successfully pulled mengning997/devstar-studio:$VERSION renamed to devstar.cn/devstar/devstar-studio:$VERSION"
|
||||
else
|
||||
$SUDO docker pull $PLATFORM devstar.cn/devstar/devstar-studio:$VERSION
|
||||
success "Successfully pulled devstar.cn/devstar/devstar-studio:$VERSION"
|
||||
fi
|
||||
if sudo docker pull mengning997/webterminal:$VERSION; then
|
||||
sudo docker tag mengning997/webterminal:$VERSION devstar.cn/devstar/webterminal:latest
|
||||
success "Successfully pulled mengning997/webterminal:$VERSION renamed to devstar.cn/devstar/webterminal:latest"
|
||||
else
|
||||
sudo docker pull devstar.cn/devstar/webterminal:latest
|
||||
success "Successfully pulled devstar.cn/devstar/webterminal:latest"
|
||||
if $SUDO docker pull $PLATFORM mengning997/webterminal:$VERSION; then
|
||||
$SUDO docker tag mengning997/webterminal:$VERSION devstar.cn/devstar/webterminal:$VERSION
|
||||
success "Successfully pulled mengning997/webterminal:$VERSION renamed to devstar.cn/devstar/webterminal:$VERSION"
|
||||
else
|
||||
$SUDO docker pull $PLATFORM devstar.cn/devstar/webterminal:$VERSION
|
||||
success "Successfully pulled devstar.cn/devstar/webterminal:$VERSION"
|
||||
fi
|
||||
if sudo docker pull mengning997/act_runner:$VERSION; then
|
||||
sudo docker tag mengning997/act_runner:$VERSION devstar.cn/devstar/act_runner:latest
|
||||
success "Successfully pulled mengning997/act_runner:$VERSION renamed to devstar.cn/devstar/act_runner:latest"
|
||||
else
|
||||
sudo docker pull devstar.cn/devstar/act_runner:latest
|
||||
success "Successfully pulled devstar.cn/devstar/act_runner:latest"
|
||||
if $SUDO docker pull $PLATFORM mengning997/act_runner:$VERSION; then
|
||||
$SUDO docker tag mengning997/act_runner:$VERSION devstar.cn/devstar/act_runner:$VERSION
|
||||
success "Successfully pulled mengning997/act_runner:$VERSION renamed to devstar.cn/devstar/act_runner:$VERSION"
|
||||
else
|
||||
$SUDO docker pull $PLATFORM devstar.cn/devstar/act_runner:$VERSION
|
||||
success "Successfully pulled devstar.cn/devstar/act_runner:$VERSION"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -145,6 +170,22 @@ function start {
|
||||
if [[ -z "$IMAGE_STR" ]]; then
|
||||
install
|
||||
fi
|
||||
|
||||
# 确保 ip 命令存在(Linux 环境)
|
||||
if [[ "$OSTYPE" != "darwin"* ]] && ! command -v ip >/dev/null 2>&1; then
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
OS_ID=$(grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||
case $OS_ID in
|
||||
ubuntu|debian)
|
||||
$SUDO apt-get update -qq && $SUDO apt-get install -y iproute2 2>/dev/null && echo "iproute2 已安装" || true
|
||||
;;
|
||||
centos|fedora|rhel)
|
||||
$SUDO yum install -y iproute 2>/dev/null || true
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
# 创建Docker数据卷用于持久化存储DevStar相关的配置和用户数据
|
||||
if create_volume "$DATA_VOLUME"; then
|
||||
mkdir -p "$(dirname "$DATA_VOLUME_FILE")"
|
||||
@@ -158,13 +199,34 @@ function start {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo chmod 666 /var/run/docker.sock
|
||||
DOMAIN_NAME=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')
|
||||
# macOS 上跳过 chmod,Docker Desktop 自动处理 docker.sock 权限
|
||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
$SUDO chmod 666 /var/run/docker.sock 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 获取域名/IP - 支持 macOS 和 Linux
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS 获取本地 IP
|
||||
DOMAIN_NAME=$(ipconfig getifaddr en0 2>/dev/null || ipconfig getifaddr en1 2>/dev/null || echo "localhost")
|
||||
else
|
||||
# Linux 获取本地 IP
|
||||
if command -v ip >/dev/null 2>&1; then
|
||||
DOMAIN_NAME=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')
|
||||
else
|
||||
# 如果 ip 命令不存在,使用默认值
|
||||
DOMAIN_NAME="localhost"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -f "/.dockerenv" ]]; then
|
||||
if [[ -S "/var/run/docker.sock" ]] && command -v docker >/dev/null 2>&1; then
|
||||
# DooD 环境 - 获取宿主机IP
|
||||
DOMAIN_NAME=$(ip route | grep default | awk '{print $3}' 2>/dev/null)
|
||||
if command -v ip >/dev/null 2>&1; then
|
||||
DOMAIN_NAME=$(ip route | grep default | awk '{print $3}' 2>/dev/null)
|
||||
else
|
||||
# 如果 ip 命令不存在,使用 Docker 默认网关 IP
|
||||
DOMAIN_NAME="172.17.0.1"
|
||||
fi
|
||||
fi
|
||||
# 普通容器环境保持原来的容器IP
|
||||
fi
|
||||
@@ -181,7 +243,7 @@ function start {
|
||||
fi
|
||||
echo "$CONTAINER_NAME" > "$CONTAINER_FILE"
|
||||
echo "容器名称 '$CONTAINER_NAME' 已保存到配置文件"
|
||||
sudo docker run --restart=always --name $CONTAINER_NAME -d -p $PORT:3000 -p $SSH_PORT:$SSH_PORT -v /var/run/docker.sock:/var/run/docker.sock -v ${DATA_VOLUME}:/var/lib/gitea -v ${DATA_VOLUME}:/etc/gitea $IMAGE_STR
|
||||
$SUDO docker run $PLATFORM --restart=always --name $CONTAINER_NAME -d --group-add 0 -p $PORT:3000 -p $SSH_PORT:$SSH_PORT -v /var/run/docker.sock:/var/run/docker.sock -v ${DATA_VOLUME}:/var/lib/gitea -v ${DATA_VOLUME}:/etc/gitea $IMAGE_STR
|
||||
# 打开 `http://localhost:8080` 完成安装。
|
||||
success "-------------------------------------------------------"
|
||||
success "DevStar started in http://$DOMAIN_NAME:$PORT successfully!"
|
||||
@@ -192,25 +254,26 @@ function start {
|
||||
# Function to stop
|
||||
function stop {
|
||||
if [[ -e "$CONTAINER_FILE" ]]; then
|
||||
if [ $(docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q | wc -l) -gt 0 ]; then
|
||||
sudo docker stop $(docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q) && \
|
||||
sudo docker rm -f $(docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q)
|
||||
if [ $($SUDO docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q | wc -l) -gt 0 ]; then
|
||||
$SUDO docker stop $($SUDO docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q) && \
|
||||
$SUDO docker rm -f $($SUDO docker ps -a --filter "name=$(cat "$CONTAINER_FILE")" -q)
|
||||
fi
|
||||
sudo rm -rf $CONTAINER_FILE
|
||||
fi
|
||||
if [ $(docker ps -a --filter "name=^/webterminal-" -q | wc -l) -gt 0 ]; then
|
||||
sudo docker stop $(docker ps -a --filter "name=^/webterminal-" -q) && sudo docker rm -f $(docker ps -a --filter "name=^/webterminal-" -q)
|
||||
if [ $($SUDO docker ps -a --filter "name=^/webterminal-" -q | wc -l) -gt 0 ]; then
|
||||
$SUDO docker stop $($SUDO docker ps -a --filter "name=^/webterminal-" -q) && $SUDO docker rm -f $($SUDO docker ps -a --filter "name=^/webterminal-" -q)
|
||||
fi
|
||||
if [ $($SUDO docker ps -a --filter "name=^/runner-" -q | wc -l) -gt 0 ]; then
|
||||
$SUDO docker stop $($SUDO docker ps -a --filter "name=^/runner-" -q) && $SUDO docker rm -f $($SUDO docker ps -a --filter "name=^/runner-" -q)
|
||||
fi
|
||||
if [ $(docker ps -a --filter "name=^/runner-" -q | wc -l) -gt 0 ]; then
|
||||
sudo docker stop $(docker ps -a --filter "name=^/runner-" -q) && sudo docker rm -f $(docker ps -a --filter "name=^/runner-" -q)
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to logs
|
||||
function logs {
|
||||
# 查看devstar-studio容器的运行日志
|
||||
echo "=== 容器日志:$(cat "$CONTAINER_FILE") ==="
|
||||
sudo docker logs $(cat "$CONTAINER_FILE")
|
||||
$SUDO docker logs $(cat "$CONTAINER_FILE")
|
||||
|
||||
}
|
||||
|
||||
# Function to clean
|
||||
@@ -249,7 +312,7 @@ case "$1" in
|
||||
usage
|
||||
;;
|
||||
start)
|
||||
ARGS=$(getopt --long port::,ssh-port::,data-volume::,version::,image:: -- "$@")
|
||||
ARGS=$(getopt --long port:,ssh-port:,data-volume:,version:,image: -- "$@")
|
||||
if [ $? -ne 0 ]; then
|
||||
failure "ARGS ERROR!"
|
||||
exit 1
|
||||
@@ -298,16 +361,16 @@ case "$1" in
|
||||
clean
|
||||
;;
|
||||
*)
|
||||
# 获取当前脚本的文件名
|
||||
script_name=$(basename "$0")
|
||||
# 判断脚本名是否为 devstar
|
||||
if [ "$script_name" != "devstar" ]; then
|
||||
sudo mv ./install.sh /usr/bin/devstar
|
||||
# 获取当前脚本的文件名
|
||||
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."
|
||||
success "Copyright 2024 Mengning Software All rights reserved."
|
||||
devstar help
|
||||
fi
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user