增加docke部署

This commit is contained in:
2026-04-10 16:44:13 +08:00
parent e2f8054794
commit cd4ddb606d
5076 changed files with 701092 additions and 0 deletions

View File

@@ -0,0 +1,224 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 检查 .env 文件
if [ ! -f .env ]; then
log_warn ".env 文件不存在,从 .env.example 创建..."
cp .env.example .env
log_warn "请编辑 .env 文件填入正确的配置值,然后重新运行此脚本。"
exit 1
fi
# 自动安装 Docker支持全新系统使用国内镜像加速
install_docker() {
log_info "正在自动安装 Docker使用国内镜像源..."
# 检测操作系统
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
else
log_error "无法识别操作系统,请手动安装 Docker: https://docs.docker.com/engine/install/"
exit 1
fi
# 国内 Docker 安装源(阿里云镜像)
DOCKER_MIRROR="https://mirrors.aliyun.com/docker-ce"
case "$OS" in
ubuntu|debian)
log_info "检测到 $OS,使用 apt 安装(阿里云镜像源)..."
apt-get update -qq
apt-get install -y -qq ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL "${DOCKER_MIRROR}/linux/$OS/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] ${DOCKER_MIRROR}/linux/$OS $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt-get update -qq
apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
;;
centos|rhel|almalinux|rocky)
log_info "检测到 $OS,使用 yum/dnf 安装(阿里云镜像源)..."
yum install -y yum-utils 2>/dev/null || dnf install -y dnf-plugins-core 2>/dev/null
# 添加阿里云 Docker 仓库
REPO_FILE="/etc/yum.repos.d/docker-ce.repo"
yum-config-manager --add-repo "${DOCKER_MIRROR}/linux/centos/docker-ce.repo" 2>/dev/null || \
dnf config-manager --add-repo "${DOCKER_MIRROR}/linux/centos/docker-ce.repo" 2>/dev/null
# 替换仓库 URL 为阿里云镜像(兜底确保)
if [ -f "$REPO_FILE" ]; then
sed -i "s|https://download.docker.com|${DOCKER_MIRROR}|g" "$REPO_FILE"
fi
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null || \
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null
;;
fedora)
log_info "检测到 Fedora使用 dnf 安装(阿里云镜像源)..."
dnf install -y dnf-plugins-core
dnf config-manager --add-repo "${DOCKER_MIRROR}/linux/fedora/docker-ce.repo"
REPO_FILE="/etc/yum.repos.d/docker-ce.repo"
if [ -f "$REPO_FILE" ]; then
sed -i "s|https://download.docker.com|${DOCKER_MIRROR}|g" "$REPO_FILE"
fi
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
;;
*)
log_warn "未适配的发行版: $OS,尝试使用官方一键脚本(阿里云镜像)..."
curl -fsSL https://get.docker.com | sh -s -- --mirror Aliyun
;;
esac
# 启动 Docker 服务
systemctl enable docker
systemctl start docker
log_info "Docker 安装完成: $(docker --version)"
# 配置 Docker Hub 镜像加速
configure_registry_mirrors
}
# 配置 Docker Hub 国内镜像加速
configure_registry_mirrors() {
DAEMON_JSON="/etc/docker/daemon.json"
# 如果已有配置且包含 registry-mirrors跳过
if [ -f "$DAEMON_JSON" ] && grep -q "registry-mirrors" "$DAEMON_JSON"; then
log_info "Docker 镜像加速已配置,跳过。"
return
fi
log_info "配置 Docker Hub 国内镜像加速..."
mkdir -p /etc/docker
if [ -f "$DAEMON_JSON" ]; then
# 已有 daemon.json 但没有 mirror 配置,备份后合并
cp "$DAEMON_JSON" "${DAEMON_JSON}.bak"
# 简单处理:如果是空对象或简单 JSON直接重写
log_warn "已有 $DAEMON_JSON,已备份为 ${DAEMON_JSON}.bak"
fi
cat > "$DAEMON_JSON" <<'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
EOF
# 重载 Docker 配置
systemctl daemon-reload
systemctl restart docker
log_info "Docker Hub 镜像加速配置完成。"
}
# 检查 Docker 环境
if ! command -v docker &> /dev/null; then
log_warn "未找到 docker 命令。"
# 检查 root 权限(安装需要)
if [ "$(id -u)" -ne 0 ]; then
log_error "安装 Docker 需要 root 权限,请使用 sudo 运行: sudo $0 $*"
exit 1
fi
install_docker
fi
if ! docker compose version &> /dev/null 2>&1 && ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose 未安装。如果刚安装了 Docker请重新登录终端后重试。"
exit 1
fi
# 判断使用 docker-compose 还是 docker compose
COMPOSE_CMD="docker compose"
if ! docker compose version &> /dev/null 2>&1; then
COMPOSE_CMD="docker-compose"
fi
ACTION=${1:-up}
case $ACTION in
up|start)
log_info "构建并启动所有服务..."
$COMPOSE_CMD up -d --build
log_info "所有服务已启动。"
echo ""
$COMPOSE_CMD ps
;;
down|stop)
log_info "停止所有服务..."
$COMPOSE_CMD down
log_info "所有服务已停止。"
;;
restart)
log_info "重启所有服务..."
$COMPOSE_CMD down
$COMPOSE_CMD up -d --build
log_info "所有服务已重启。"
;;
logs)
$COMPOSE_CMD logs -f ${2:-}
;;
status)
$COMPOSE_CMD ps
;;
rebuild)
SERVICE=${2:-}
if [ -n "$SERVICE" ]; then
log_info "重建服务: $SERVICE"
$COMPOSE_CMD build --no-cache $SERVICE
$COMPOSE_CMD up -d $SERVICE
else
log_info "重建所有服务..."
$COMPOSE_CMD build --no-cache
$COMPOSE_CMD up -d
fi
;;
ssl-init)
log_info "初始化 SSL 证书..."
EXTRA_ARGS=""
if [ "${2:-}" = "--staging" ]; then
EXTRA_ARGS="--staging"
elif [ "${2:-}" = "--dry-run" ]; then
EXTRA_ARGS="--dry-run"
fi
bash ./init-ssl.sh $EXTRA_ARGS
;;
ssl-renew)
log_info "手动续签 SSL 证书..."
$COMPOSE_CMD run --rm certbot renew --webroot -w /var/www/certbot
log_info "重新加载 Nginx..."
docker exec youle-nginx nginx -s reload
log_info "SSL 续签完成。"
;;
ssl-status)
log_info "查看 SSL 证书状态..."
$COMPOSE_CMD run --rm certbot certificates
;;
*)
echo "用法: $0 {up|down|restart|logs|status|rebuild|ssl-init|ssl-renew|ssl-status} [service|option]"
echo ""
echo " up/start - 构建并启动所有服务"
echo " down/stop - 停止所有服务"
echo " restart - 重启所有服务"
echo " logs - 查看日志 (可指定服务名)"
echo " status - 查看服务状态"
echo " rebuild - 无缓存重新构建 (可指定服务名)"
echo " ssl-init - 首次申请 SSL 证书 (可加 --staging 或 --dry-run)"
echo " ssl-renew - 手动续签 SSL 证书"
echo " ssl-status - 查看证书状态和到期时间"
exit 1
;;
esac