diff --git a/installer/.env b/installer/.env new file mode 100644 index 0000000000000000000000000000000000000000..5d2fef559db17043a5b7aa2685f5e02df41c72e9 --- /dev/null +++ b/installer/.env @@ -0,0 +1,37 @@ +# SeaChartCode 环境配置文件 +# 此文件由 installer.sh 自动生成 + +# 基础配置 +SEACHARTCODE_VERSION=latest +ENABLE_PUBLIC_ACCESS=true +LOCAL_IP=localhost +REMOTE_IP=localhost + +# 端口配置 +NGINX_PORT=8080 +SERVER_PORT=8888 +POSTGRES_PORT=5432 +REDIS_PORT=6379 + +# 管理员配置 +ADMIN_USER=admin +ADMIN_PASSWORD=password123 + +# 数据库配置 +POSTGRES_DB=seachartcode +POSTGRES_USER=seachartcode +POSTGRES_PASSWORD=password123 + +# Redis配置 +REDIS_PASSWORD=password123 + +# AI模型配置 (可选) +INIT_MODEL_NAME= +INIT_MODEL_KEY= +INIT_MODEL_URL= + +# 数据报告配置 (可选) +SEACHARTCODE_DATA_REPORT_KEY= + +# 扩展下载配置 (可选) +# SEACHARTCODE_EXTENSION_BASEURL= diff --git a/installer/docker-compose.yml b/installer/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..6d79016c94d5a3661197c474ca1ed3076116cef5 --- /dev/null +++ b/installer/docker-compose.yml @@ -0,0 +1,117 @@ +services: + # PostgreSQL数据库 + seachartcode-db: + image: postgres:15 + container_name: seachartcode-db + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" + volumes: + - postgres_data:/var/lib/postgresql/data + ports: + - "${POSTGRES_PORT:-5432}:5432" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + interval: 10s + timeout: 5s + retries: 5 + + # Redis缓存 + seachartcode-redis: + image: redis:7-alpine + container_name: seachartcode-redis + environment: + REDIS_PASSWORD: ${REDIS_PASSWORD} + command: redis-server --requirepass ${REDIS_PASSWORD} --port ${REDIS_PORT:-6379} + ports: + - "${REDIS_PORT:-6379}:${REDIS_PORT:-6379}" + volumes: + - redis_data:/data + restart: unless-stopped + healthcheck: + test: ["CMD", "redis-cli", "-p", "${REDIS_PORT:-6379}", "--raw", "incr", "ping"] + interval: 10s + timeout: 3s + retries: 5 + + # Backend服务 + seachartcode-server: + image: swr.cn-east-3.myhuaweicloud.com/cloud-mdgx/seachartcode-server:latest + container_name: seachartcode-server + environment: + # 基础配置 + ENABLE_PUBLIC_ACCESS: ${ENABLE_PUBLIC_ACCESS:-true} + LOCAL_IP: ${LOCAL_IP:-localhost} + REMOTE_IP: ${REMOTE_IP:-localhost} + NGINX_PORT: ${NGINX_PORT:-80} + + # 管理员配置 + SEACHARTCODE_ADMIN_USER: ${ADMIN_USER:-admin} + SEACHARTCODE_ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123} + + # 数据报告配置 + SEACHARTCODE_DATA_REPORT_KEY: ${SEACHARTCODE_DATA_REPORT_KEY:-} + + # 数据库配置 + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + SEACHARTCODE_DATABASE_MASTER: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@seachartcode-db:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable" + SEACHARTCODE_DATABASE_SLAVE: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@seachartcode-db:${POSTGRES_PORT}/${POSTGRES_DB}?sslmode=disable" + + # Redis配置 + REDIS_PASSWORD: ${REDIS_PASSWORD} + SEACHARTCODE_REDIS_HOST: "seachartcode-redis" + SEACHARTCODE_REDIS_PORT: ${REDIS_PORT} + SEACHARTCODE_REDIS_PASS: ${REDIS_PASSWORD} + + # AI模型配置 (可选) + INIT_MODEL_NAME: "${INIT_MODEL_NAME:-}" + INIT_MODEL_KEY: "${INIT_MODEL_KEY:-}" + INIT_MODEL_URL: "${INIT_MODEL_URL:-}" + + # 扩展下载配置 + SEACHARTCODE_EXTENSION_BASEURL: "${SEACHARTCODE_EXTENSION_BASEURL:-}" + ports: + - "${SERVER_PORT:-8888}:8888" + depends_on: + seachartcode-db: + condition: service_healthy + seachartcode-redis: + condition: service_healthy + volumes: + - ./logs:/app/logs + restart: unless-stopped + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://${LOCAL_IP}:${SERVER_PORT:-8888}/v1/health"] + interval: 30s + timeout: 10s + retries: 3 + + # Frontend Nginx服务 + seachartcode-frontend: + image: swr.cn-east-3.myhuaweicloud.com/cloud-mdgx/seachartcode-frontend:latest + container_name: seachartcode-frontend + ports: + - "${NGINX_PORT:-80}:80" + depends_on: + - seachartcode-server + restart: unless-stopped + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + postgres_data: + driver: local + redis_data: + driver: local + +networks: + default: + driver: bridge diff --git a/installer.sh b/installer/seachartcode.sh similarity index 77% rename from installer.sh rename to installer/seachartcode.sh index 3a4387dfa0485130697babaf462af6489766f901..a7cc510df8afa42f9500102a778cdffcf0b18e36 100755 --- a/installer.sh +++ b/installer/seachartcode.sh @@ -10,15 +10,6 @@ cleanup_on_exit() { local exit_code=$? if [ $exit_code -ne 0 ]; then log_error "脚本异常退出 (退出码: $exit_code)" - if [ -n "${INSTALL_DIR:-}" ] && [ -f "${INSTALL_DIR}/docker-compose.yml" ]; then - log_info "尝试清理可能的残留进程..." - cd "$INSTALL_DIR" 2>/dev/null || true - if command -v docker-compose &> /dev/null; then - docker-compose kill 2>/dev/null || true - else - docker compose kill 2>/dev/null || true - fi - fi fi } @@ -38,6 +29,8 @@ NC='\033[0m' # No Color SCRIPT_VERSION="1.0.0" DEFAULT_VERSION="latest" DOCKER_REGISTRY="swr.cn-east-3.myhuaweicloud.com/cloud-mdgx" # 华为云容器镜像服务 +GITEE_BASE_URL="https://gitee.com/metastone-project/SeachartCode" + PROJECT_NAME="seachartcode" INSTALL_DIR="${HOME}/.seachartcode" COMPOSE_FILE="$INSTALL_DIR/docker-compose.yml" @@ -120,6 +113,20 @@ check_dependencies() { log_info "✅ 所有依赖检查完成" } +# 构建版本化URL +build_versioned_url() { + local version=$1 + local file_path=$2 + + if [ "$version" = "latest" ]; then + # 对于latest版本,使用master分支 + echo "${GITEE_BASE_URL}/raw/master/installer/${file_path}" + else + # 对于指定版本,使用release标签 + echo "${GITEE_BASE_URL}/raw/${version}/installer/${file_path}" + fi +} + # 创建安装目录 create_install_dir() { log_info "创建安装目录: $INSTALL_DIR" @@ -127,190 +134,75 @@ create_install_dir() { mkdir -p "$INSTALL_DIR/logs" } -# 生成环境变量文件 -generate_env_file() { - log_info "生成环境变量文件..." +# 下载环境变量文件 +download_env_file() { + local version=${1:-$DEFAULT_VERSION} + log_info "下载环境变量文件..." if [ -f "$ENV_FILE" ]; then - log_warn "环境变量文件已存在,跳过生成" + log_warn "✅ 环境变量文件已存在,跳过下载" return fi + # 构建版本化URL + local env_file_url=$(build_versioned_url "$version" ".env") + + # 检查是否有下载工具 + if ! command -v curl &> /dev/null && ! command -v wget &> /dev/null; then + log_error "❌ 未找到下载工具 (curl 或 wget),请安装 curl 或 wget 后重试,或手动下载 .env 文件到: $ENV_FILE" + exit 1 + fi + + # 尝试下载.env文件 + local download_success=false + + if command -v curl &> /dev/null; then + if curl -fsSL "$env_file_url" -o "$ENV_FILE"; then + download_success=true + fi + fi + + if [ "$download_success" = false ] && command -v wget &> /dev/null; then + if wget -q "$env_file_url" -O "$ENV_FILE"; then + download_success=true + fi + fi + + if [ "$download_success" = false ]; then + log_error "❌ 无法下载环境变量文件, 下载地址: $env_file_url" + log_error "可能的原因:" + log_error " 1. 网络连接问题" + log_error " 2. Gitee服务不可用" + log_error " 3. 文件路径不存在" + log_error "" + log_error "请检查网络连接或手动下载 .env 文件到: $ENV_FILE" + exit 1 + fi + + log_info "✅ 环境变量文件下载成功: $ENV_FILE" + + # 生成随机密码并替换到.env文件中 + log_info "生成随机密码并更新配置文件..." + # 生成随机密码 - POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-16) - REDIS_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-16) - ADMIN_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-12) - - cat > "$ENV_FILE" << EOF -# SeaChartCode 环境配置文件 -# 此文件由 installer.sh 自动生成 - -# 基础配置 -SEACHARTCODE_VERSION=${VERSION} -ENABLE_PUBLIC_ACCESS=true -LOCAL_IP=localhost -REMOTE_IP=localhost - -# 端口配置 -NGINX_PORT=8080 -SERVER_PORT=8888 -POSTGRES_PORT=5432 -REDIS_PORT=6379 - -# 管理员配置 -ADMIN_USER=admin -ADMIN_PASSWORD=${ADMIN_PASSWORD} - -# 数据库配置 -POSTGRES_DB=seachartcode -POSTGRES_USER=seachartcode -POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - -# Redis配置 -REDIS_PASSWORD=${REDIS_PASSWORD} - -# AI模型配置 (可选) -INIT_MODEL_NAME= -INIT_MODEL_KEY= -INIT_MODEL_URL= - -# 数据报告配置 (可选) -SEACHARTCODE_DATA_REPORT_KEY= - -# 扩展下载配置 (可选) -# SEACHARTCODE_EXTENSION_BASEURL= -EOF - - log_info "✅ 环境变量文件已生成: $ENV_FILE" - log_warn "🔐 管理员密码: ${ADMIN_PASSWORD}" -} + local POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-16) + local REDIS_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-16) + local ADMIN_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-12) + + # 替换密码字段 + if command -v sed &> /dev/null; then + # 使用sed替换密码 + sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=${POSTGRES_PASSWORD}/" "$ENV_FILE" + sed -i "s/^REDIS_PASSWORD=.*/REDIS_PASSWORD=${REDIS_PASSWORD}/" "$ENV_FILE" + sed -i "s/^ADMIN_PASSWORD=.*/ADMIN_PASSWORD=${ADMIN_PASSWORD}/" "$ENV_FILE" + else + log_warn "⚠️ sed命令未找到,无法自动更新密码" + log_warn "请手动更新以下密码字段:" + log_warn " POSTGRES_PASSWORD=${POSTGRES_PASSWORD}" + log_warn " REDIS_PASSWORD=${REDIS_PASSWORD}" + log_warn " ADMIN_PASSWORD=${ADMIN_PASSWORD}" + fi -# 生成Docker Compose文件 -generate_compose_file() { - local version=$1 - log_info "生成 Docker Compose 文件 (版本: $version)..." - - cat > "$COMPOSE_FILE" << EOF -services: - # PostgreSQL数据库 - seachartcode-db: - image: postgres:15 - container_name: seachartcode-db - environment: - POSTGRES_DB: \${POSTGRES_DB} - POSTGRES_USER: \${POSTGRES_USER} - POSTGRES_PASSWORD: \${POSTGRES_PASSWORD} - POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" - volumes: - - postgres_data:/var/lib/postgresql/data - ports: - - "\${POSTGRES_PORT:-5432}:5432" - restart: unless-stopped - healthcheck: - test: ["CMD-SHELL", "pg_isready -U \${POSTGRES_USER}"] - interval: 10s - timeout: 5s - retries: 5 - - # Redis缓存 - seachartcode-redis: - image: redis:7-alpine - container_name: seachartcode-redis - environment: - REDIS_PASSWORD: \${REDIS_PASSWORD} - command: redis-server --requirepass \${REDIS_PASSWORD} --port \${REDIS_PORT:-6379} - ports: - - "\${REDIS_PORT:-6379}:\${REDIS_PORT:-6379}" - volumes: - - redis_data:/data - restart: unless-stopped - healthcheck: - test: ["CMD", "redis-cli", "-p", "\${REDIS_PORT:-6379}", "--raw", "incr", "ping"] - interval: 10s - timeout: 3s - retries: 5 - - # Backend服务 - seachartcode-server: - image: ${DOCKER_REGISTRY}/seachartcode-server:${version} - container_name: seachartcode-server - environment: - # 基础配置 - ENABLE_PUBLIC_ACCESS: \${ENABLE_PUBLIC_ACCESS:-true} - LOCAL_IP: \${LOCAL_IP:-localhost} - REMOTE_IP: \${REMOTE_IP:-localhost} - NGINX_PORT: \${NGINX_PORT:-80} - - # 管理员配置 - SEACHARTCODE_ADMIN_USER: \${ADMIN_USER:-admin} - SEACHARTCODE_ADMIN_PASSWORD: \${ADMIN_PASSWORD:-admin123} - - # 数据报告配置 - SEACHARTCODE_DATA_REPORT_KEY: \${SEACHARTCODE_DATA_REPORT_KEY:-} - - # 数据库配置 - POSTGRES_USER: \${POSTGRES_USER} - POSTGRES_PASSWORD: \${POSTGRES_PASSWORD} - POSTGRES_DB: \${POSTGRES_DB} - SEACHARTCODE_DATABASE_MASTER: "postgres://\${POSTGRES_USER}:\${POSTGRES_PASSWORD}@seachartcode-db:\${POSTGRES_PORT}/\${POSTGRES_DB}?sslmode=disable" - SEACHARTCODE_DATABASE_SLAVE: "postgres://\${POSTGRES_USER}:\${POSTGRES_PASSWORD}@seachartcode-db:\${POSTGRES_PORT}/\${POSTGRES_DB}?sslmode=disable" - - # Redis配置 - REDIS_PASSWORD: \${REDIS_PASSWORD} - SEACHARTCODE_REDIS_HOST: "seachartcode-redis" - SEACHARTCODE_REDIS_PORT: \${REDIS_PORT} - SEACHARTCODE_REDIS_PASS: \${REDIS_PASSWORD} - - # AI模型配置 (可选) - INIT_MODEL_NAME: "\${INIT_MODEL_NAME:-}" - INIT_MODEL_KEY: "\${INIT_MODEL_KEY:-}" - INIT_MODEL_URL: "\${INIT_MODEL_URL:-}" - - # 扩展下载配置 - SEACHARTCODE_EXTENSION_BASEURL: "\${SEACHARTCODE_EXTENSION_BASEURL:-}" - ports: - - "\${SERVER_PORT:-8888}:8888" - depends_on: - seachartcode-db: - condition: service_healthy - seachartcode-redis: - condition: service_healthy - volumes: - - ./logs:/app/logs - restart: unless-stopped - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://\${LOCAL_IP}:\${SERVER_PORT:-8888}/v1/health"] - interval: 30s - timeout: 10s - retries: 3 - - # Frontend Nginx服务 - seachartcode-frontend: - image: ${DOCKER_REGISTRY}/seachartcode-frontend:${version} - container_name: seachartcode-frontend - ports: - - "\${NGINX_PORT:-80}:80" - depends_on: - - seachartcode-server - restart: unless-stopped - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1"] - interval: 30s - timeout: 10s - retries: 3 - -volumes: - postgres_data: - driver: local - redis_data: - driver: local - -networks: - default: - driver: bridge -EOF - - log_info "✅ Docker Compose 文件已生成: $COMPOSE_FILE" } # 检查并清理冲突的容器 @@ -342,6 +234,7 @@ cleanup_conflicting_containers() { # 检查镜像仓库登录状态 check_registry_login() { + local version=$1 local registry="$DOCKER_REGISTRY" log_info "检查镜像仓库登录状态..." @@ -422,9 +315,9 @@ install_service() { check_dependencies cleanup_conflicting_containers create_install_dir - generate_env_file - generate_compose_file "$version" - check_registry_login + download_env_file "$version" + download_docker_compose "$version" + check_registry_login "$version" pull_images "$version" log_info "✅ SeaChartCode 安装完成!" @@ -563,6 +456,64 @@ restart_service() { start_service } +# 下载并配置docker-compose.yml文件 +download_docker_compose() { + local version=$1 + log_info "下载docker-compose.yml文件..." + local compose_file_url=$(build_versioned_url "$version" "docker-compose.yml") + log_info "✅ 镜像配置url: $compose_file_url" + local temp_compose_file="/tmp/docker-compose.yml.tmp" + + # 下载docker-compose.yml文件 + local download_success=false + + if command -v curl &> /dev/null; then + if curl -fsSL "$compose_file_url" -o "$temp_compose_file"; then + download_success=true + fi + fi + + if [ "$download_success" = false ] && command -v wget &> /dev/null; then + if wget -q "$compose_file_url" -O "$temp_compose_file"; then + download_success=true + fi + fi + + if [ "$download_success" = false ]; then + log_error "❌ 无法下载docker-compose.yml文件, 下载地址: $compose_file_url" + exit 1 + fi + + log_info "✅ docker-compose.yml文件下载成功" + + # 配置镜像地址和版本 + log_info "配置镜像地址和版本..." + + # 设置默认的Docker镜像仓库 + local DOCKER_REGISTRY=${DOCKER_REGISTRY:-"swr.cn-east-3.myhuaweicloud.com/cloud-mdgx"} + local VERSION=${version:-"latest"} + + # 替换镜像配置 + if command -v sed &> /dev/null; then + # 替换seachartcode-server镜像 + sed -i "s|image: .*/seachartcode-server:.*|image: ${DOCKER_REGISTRY}/seachartcode-server:${VERSION}|" "$temp_compose_file" + + # 替换seachartcode-frontend镜像 + sed -i "s|image: .*/seachartcode-frontend:.*|image: ${DOCKER_REGISTRY}/seachartcode-frontend:${VERSION}|" "$temp_compose_file" + + log_info "✅ 镜像配置已更新" + else + log_warn "⚠️ sed命令未找到,无法自动更新镜像配置" + log_warn "请手动更新以下镜像配置:" + log_warn " seachartcode-server: ${DOCKER_REGISTRY}/seachartcode-server:${VERSION}" + log_warn " seachartcode-frontend: ${DOCKER_REGISTRY}/seachartcode-frontend:${VERSION}" + fi + + # 移动文件到目标位置 + mv "$temp_compose_file" "$COMPOSE_FILE" + log_info "✅ docker-compose.yml文件已配置完成: $COMPOSE_FILE" +} + # 查看服务状态 show_status() { if [ ! -f "$COMPOSE_FILE" ]; then @@ -626,8 +577,9 @@ update_service() { stop_service fi - # 重新生成配置文件 - generate_compose_file "$version" + # 重新下载配置文件 + download_env_file "$version" + download_docker_compose "$version" # 拉取新镜像 pull_images "$version" diff --git a/start.sh b/start.sh deleted file mode 100755 index 9579a7f33bf3ae998e57d507f6255fe387344cf3..0000000000000000000000000000000000000000 --- a/start.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash - -# SeaChartCode 启动脚本 -# 自动启动所有服务组件 - -set -e - -# 加载环境变量 -if [ -f .env ]; then - echo "📄 加载环境变量文件..." - set -a # 自动导出所有变量 - source .env - set +a # 关闭自动导出 -else - echo "⚠️ 未找到 .env 文件,使用默认配置" -fi - -echo "🚀 正在启动 SeaChartCode 服务..." -echo "==================================================" - -# 检查docker和docker-compose是否安装 -if ! command -v docker &> /dev/null; then - echo "❌ Docker 未安装,请先安装 Docker" - exit 1 -fi - -if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then - echo "❌ Docker Compose 未安装,请先安装 Docker Compose" - exit 1 -fi - -# 创建必要的目录 -echo "📁 创建必要的目录..." -mkdir -p logs static - -# 检查镜像是否存在 -echo "🔍 检查 Docker 镜像..." -if ! docker images | grep -q "seachartcode-server"; then - echo "❌ Backend 镜像未找到,请先构建镜像" - echo " 运行: cd backend && make image" - exit 1 -fi - -if ! docker images | grep -q "seachartcode-frontend"; then - echo "❌ Frontend 镜像未找到,请先构建镜像" - echo " 运行: cd ui && make image" - exit 1 -fi - -echo "✅ 所有镜像检查完成" - -# 停止可能存在的旧服务 -echo "🛑 停止现有服务..." -docker-compose down --remove-orphans 2>/dev/null || docker compose down --remove-orphans 2>/dev/null || true - -# 启动服务 -echo "🚀 启动服务..." -if command -v docker-compose &> /dev/null; then - docker-compose up -d -else - docker compose up -d -fi - -# 等待服务启动 -echo "⏳ 等待服务启动..." -sleep 10 - -# 检查服务状态 -echo "📊 检查服务状态..." -if command -v docker-compose &> /dev/null; then - docker-compose ps -else - docker compose ps -fi - -echo "" -echo "==================================================" -echo "🎉 SeaChartCode 启动完成!" -echo "" -echo "📋 服务信息:" -echo " 前端访问地址: http://localhost:${NGINX_PORT:-}" -echo " 后端API地址: http://localhost:${SERVER_PORT:-8888}" -echo " 数据库端口: localhost:${POSTGRES_PORT:-5432}" -echo " Redis端口: localhost:${REDIS_PORT:-6379}" -echo "" -echo "👤 默认管理员账号:" -echo " 用户名: ${ADMIN_USER:-admin}" -echo " 密码: ${ADMIN_PASSWORD:-admin123}" -echo "" -echo "📝 服务日志查看:" -echo " 查看所有日志: docker-compose logs -f" -echo " 查看后端日志: docker-compose logs -f seachartcode-server" -echo " 查看前端日志: docker-compose logs -f seachartcode-frontend" -echo "" -echo "🛑 停止服务:" -echo " docker-compose down" -echo "" -echo "✨ 享受使用 SeaChartCode" \ No newline at end of file diff --git a/status.sh b/status.sh deleted file mode 100755 index 1516d4b5b6b16fb528ac181205e962cf1625fcdc..0000000000000000000000000000000000000000 --- a/status.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# SeaChartCode 服务状态检查脚本 - -# 加载环境变量 -if [ -f .env ]; then - echo "📄 加载环境变量文件..." - set -a # 自动导出所有变量 - source .env - set +a # 关闭自动导出 -else - echo "⚠️ 未找到 .env 文件,使用默认配置" -fi - -echo "🔍 SeaChartCode 服务状态检查" -echo "==================================================" - -# 检查容器状态 -echo "📦 容器状态:" -if command -v docker-compose &> /dev/null; then - docker-compose ps -else - docker compose ps -fi - -echo "" -echo "🌐 服务连通性检查:" - -# 检查前端服务 -echo -n "前端服务 (http://localhost:${NGINX_PORT:-}): " -if curl -s --connect-timeout 3 http://localhost:${NGINX_PORT:-} > /dev/null; then - echo "✅ 正常" -else - echo "❌ 无法访问" -fi - -# 检查后端API -echo -n "后端API (http://localhost:${SERVER_PORT:-8888}): " -if curl -s --connect-timeout 3 http://localhost:${SERVER_PORT:-8888}/api/health > /dev/null 2>&1; then - echo "✅ 正常" -else - echo "❌ 无法访问" -fi - -# 检查数据库连接 -echo -n "PostgreSQL数据库: " -if docker exec seachartcode-db pg_isready -U ${POSTGRES_USER} > /dev/null 2>&1; then - echo "✅ 正常" -else - echo "❌ 无法连接" -fi - -# 检查Redis连接 -echo -n "Redis缓存: " -if docker exec seachartcode-redis redis-cli -p ${REDIS_PORT:-6379} -a ${REDIS_PASSWORD} ping > /dev/null 2>&1; then - echo "✅ 正常" -else - echo "❌ 无法连接" -fi - -echo "" -echo "📊 资源使用情况:" -docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" - -echo "" -echo "📝 查看详细日志:" -echo " 所有服务: docker-compose logs -f" -echo " 后端服务: docker-compose logs -f seachartcode-server" -echo " 前端服务: docker-compose logs -f seachartcode-frontend" -echo " 数据库: docker-compose logs -f seachartcode-db" -echo " Redis: docker-compose logs -f seachartcode-redis" \ No newline at end of file