diff --git a/deploy.sh b/deploy.sh index 046890e..b19b5ab 100644 --- a/deploy.sh +++ b/deploy.sh @@ -1,7 +1,7 @@ #!/bin/bash # ============================================================ -# AI Knowledge Link — 一键部署脚本 -# 在服务器项目目录执行:bash deploy.sh +# AI Knowledge Link — 首次部署脚本 +# 使用服务器本机 MySQL + 宝塔 Nginx # ============================================================ set -e @@ -10,48 +10,41 @@ echo "=== AI Knowledge Link 部署 ===" # 检查 Docker if ! command -v docker &> /dev/null; then - echo "错误:未安装 Docker。请先安装:" - echo " curl -fsSL https://get.docker.com | sh" + echo "错误:未安装 Docker" exit 1 fi -if ! docker compose version &> /dev/null; then - echo "错误:docker compose 不可用。请检查 Docker 版本。" - exit 1 -fi - -# 1. 检查 .env +# 1. 创建 .env if [ ! -f .env ]; then echo "创建 .env ..." - - # 自动生成 SECRET_KEY SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))" 2>/dev/null || openssl rand -base64 48) - cat > .env << EOF SECRET_KEY=${SECRET} -MYSQL_ROOT_PASSWORD=Lzcc6-01 MYSQL_PASSWORD=Lzcc6-01 EOF - echo ".env 已创建,SECRET_KEY 已自动生成" + echo ".env 已创建" fi # 2. 创建数据目录 mkdir -p data -# 3. 构建并启动 +# 3. 创建数据库(如果不存在) +echo "检查数据库..." +mysql -h 127.0.0.1 -P 33306 -u admin -pLzcc6-01 -e "CREATE DATABASE IF NOT EXISTS amb_rag CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null || echo "提示:请确保 MySQL 已启动且密码正确" + +# 4. 构建并启动 echo "构建镜像..." docker compose build echo "启动服务..." docker compose up -d -# 4. 等待 MySQL 就绪 -echo "等待 MySQL 就绪..." -sleep 10 # 5. 数据库迁移 echo "执行数据库迁移..." +sleep 3 docker compose exec -T backend alembic upgrade head -# 6. 创建内部管理员账号(如果不存在) + +# 6. 创建管理员 echo "检查管理员账号..." docker compose exec -T backend python -c " from app.core.db import get_session_factory @@ -70,29 +63,26 @@ with factory() as session: session.add(plan) session.flush() admin = User( - username='admin', - email='admin@company.com', + username='admin', email='admin@company.com', password_hash=hash_password('Lzcc6-01'), - status='active', - role='internal', - plan_id=plan.id, + status='active', role='internal', plan_id=plan.id, ) session.add(admin) session.commit() - print('管理员账号已创建: admin / Lzcc6-01') + print('管理员已创建: admin / Lzcc6-01') else: - print('管理员账号已存在,跳过') + print('管理员已存在') " -# 7. 完成 + echo "" echo "==========================================" echo " 部署完成!" echo "" -echo " 访问地址: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')" -echo " 内部登录: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')/internal-login" +echo " 后端: http://$(curl -s ifconfig.me 2>/dev/null):8000/api/healthz" +echo " 前端: http://$(curl -s ifconfig.me 2>/dev/null):5173" echo "" -echo " 管理员: admin" -echo " 密码: Lzcc6-01" -echo "" -echo " 更新部署: bash update.sh" +echo " 宝塔 Nginx 反代配置:" +echo " /api/ → http://127.0.0.1:8000" +echo " /k/ → http://127.0.0.1:8000" +echo " / → http://127.0.0.1:5173" echo "==========================================" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a6a2841..420f4e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,38 +1,22 @@ # AI Knowledge Link — Docker Compose (生产) # -# 用宝塔 Nginx 反代,不启动容器内 Nginx +# 使用服务器本机 MySQL(端口 33306),宝塔 Nginx 反代 # +# 部署:bash deploy.sh # 更新:git pull && bash update.sh services: - # ---------- MySQL ---------- - mysql: - image: mysql:8.0 - restart: unless-stopped - environment: - MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-Lzcc6-01} - MYSQL_DATABASE: amb_rag - MYSQL_USER: admin - MYSQL_PASSWORD: ${MYSQL_PASSWORD:-Lzcc6-01} - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci - volumes: - - mysql_data:/var/lib/mysql - dns: - - 223.5.5.5 - - 223.6.6.6 - - # ---------- 后端(暴露 8000 给宝塔 Nginx 反代)---------- + # ---------- 后端 ---------- backend: build: context: ./backend restart: unless-stopped - dns: - - 223.5.5.5 - - 223.6.6.6 + extra_hosts: + - "host.docker.internal:host-gateway" environment: ENVIRONMENT: production SECRET_KEY: ${SECRET_KEY:-change-me-to-a-real-secret-key} - DATABASE_URL: mysql+pymysql://amb:${MYSQL_PASSWORD:-Lzcc6-01}@mysql:3306/amb_rag?charset=utf8mb4 + DATABASE_URL: mysql+pymysql://admin:${MYSQL_PASSWORD:-Lzcc6-01}@host.docker.internal:33306/amb_rag?charset=utf8mb4 STORAGE_ROOT: /app/data DEFAULT_STORAGE_QUOTA: "104857600" DEFAULT_MAX_FILE_SIZE: "20971520" @@ -43,28 +27,19 @@ services: - app_data:/app/data ports: - "8000:8000" - depends_on: - mysql: - condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')"] interval: 10s timeout: 5s retries: 5 - # ---------- 前端(构建后由宝塔 Nginx 直接 serve 静态文件)---------- - # 不需要运行容器,构建完把 dist 目录复制到服务器即可 - # 或者用下面的容器暴露 5173 端口 + # ---------- 前端 ---------- frontend: build: context: ./frontend restart: unless-stopped - dns: - - 223.5.5.5 - - 223.6.6.6 ports: - "5173:80" volumes: - mysql_data: - app_data: \ No newline at end of file + app_data: diff --git a/update.sh b/update.sh index b00c25f..cdbff4e 100644 --- a/update.sh +++ b/update.sh @@ -1,13 +1,6 @@ #!/bin/bash # ============================================================ # AI Knowledge Link — 一键更新脚本 -# 在服务器项目目录执行:bash update.sh -# -# 功能: -# 1. 拉取最新代码 -# 2. 重新构建镜像 -# 3. 重启服务(数据库不丢失) -# 4. 执行数据库迁移(如有新迁移) # ============================================================ set -e @@ -29,11 +22,9 @@ docker compose up -d # 4. 数据库迁移 echo "[4/4] 执行数据库迁移..." -sleep 5 +sleep 3 docker compose exec -T backend alembic upgrade head -# 5. 完成 echo "" echo "更新完成!$(date '+%H:%M:%S')" -echo "服务状态:" -docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}" +docker compose ps \ No newline at end of file