脚本更新

This commit is contained in:
amb
2026-09-02 14:34:46 +08:00
parent 2a12ad9b7a
commit d44f8303e7
3 changed files with 34 additions and 78 deletions
+24 -34
View File
@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# ============================================================ # ============================================================
# AI Knowledge Link — 一键部署脚本 # AI Knowledge Link — 首次部署脚本
# 服务器项目目录执行:bash deploy.sh # 使用服务器本机 MySQL + 宝塔 Nginx
# ============================================================ # ============================================================
set -e set -e
@@ -10,48 +10,41 @@ echo "=== AI Knowledge Link 部署 ==="
# 检查 Docker # 检查 Docker
if ! command -v docker &> /dev/null; then if ! command -v docker &> /dev/null; then
echo "错误:未安装 Docker。请先安装:" echo "错误:未安装 Docker"
echo " curl -fsSL https://get.docker.com | sh"
exit 1 exit 1
fi fi
if ! docker compose version &> /dev/null; then # 1. 创建 .env
echo "错误:docker compose 不可用。请检查 Docker 版本。"
exit 1
fi
# 1. 检查 .env
if [ ! -f .env ]; then if [ ! -f .env ]; then
echo "创建 .env ..." echo "创建 .env ..."
# 自动生成 SECRET_KEY
SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))" 2>/dev/null || openssl rand -base64 48) SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))" 2>/dev/null || openssl rand -base64 48)
cat > .env << EOF cat > .env << EOF
SECRET_KEY=${SECRET} SECRET_KEY=${SECRET}
MYSQL_ROOT_PASSWORD=Lzcc6-01
MYSQL_PASSWORD=Lzcc6-01 MYSQL_PASSWORD=Lzcc6-01
EOF EOF
echo ".env 已创建SECRET_KEY 已自动生成" echo ".env 已创建"
fi fi
# 2. 创建数据目录 # 2. 创建数据目录
mkdir -p data 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 "构建镜像..." echo "构建镜像..."
docker compose build docker compose build
echo "启动服务..." echo "启动服务..."
docker compose up -d docker compose up -d
# 4. 等待 MySQL 就绪
echo "等待 MySQL 就绪..."
sleep 10
# 5. 数据库迁移 # 5. 数据库迁移
echo "执行数据库迁移..." echo "执行数据库迁移..."
sleep 3
docker compose exec -T backend alembic upgrade head docker compose exec -T backend alembic upgrade head
# 6. 创建内部管理员账号(如果不存在)
# 6. 创建管理员
echo "检查管理员账号..." echo "检查管理员账号..."
docker compose exec -T backend python -c " docker compose exec -T backend python -c "
from app.core.db import get_session_factory from app.core.db import get_session_factory
@@ -70,29 +63,26 @@ with factory() as session:
session.add(plan) session.add(plan)
session.flush() session.flush()
admin = User( admin = User(
username='admin', username='admin', email='admin@company.com',
email='admin@company.com',
password_hash=hash_password('Lzcc6-01'), password_hash=hash_password('Lzcc6-01'),
status='active', status='active', role='internal', plan_id=plan.id,
role='internal',
plan_id=plan.id,
) )
session.add(admin) session.add(admin)
session.commit() session.commit()
print('管理员账号已创建: admin / Lzcc6-01') print('管理员已创建: admin / Lzcc6-01')
else: else:
print('管理员账号已存在,跳过') print('管理员已存在')
" "
# 7. 完成
echo "" echo ""
echo "==========================================" echo "=========================================="
echo " 部署完成!" echo " 部署完成!"
echo "" echo ""
echo " 访问地址: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')" echo " 后端: http://$(curl -s ifconfig.me 2>/dev/null):8000/api/healthz"
echo " 内部登录: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')/internal-login" echo " 前端: http://$(curl -s ifconfig.me 2>/dev/null):5173"
echo "" echo ""
echo " 管理员: admin" echo " 宝塔 Nginx 反代配置:"
echo " 密码: Lzcc6-01" echo " /api/ → http://127.0.0.1:8000"
echo "" echo " /k/ → http://127.0.0.1:8000"
echo " 更新部署: bash update.sh" echo " / → http://127.0.0.1:5173"
echo "==========================================" echo "=========================================="
+8 -33
View File
@@ -1,38 +1,22 @@
# AI Knowledge Link — Docker Compose (生产) # AI Knowledge Link — Docker Compose (生产)
# #
# 用宝塔 Nginx 反代,不启动容器内 Nginx # 使用服务器本机 MySQL(端口 33306),宝塔 Nginx 反代
# #
# 部署:bash deploy.sh
# 更新:git pull && bash update.sh # 更新:git pull && bash update.sh
services: 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: backend:
build: build:
context: ./backend context: ./backend
restart: unless-stopped restart: unless-stopped
dns: extra_hosts:
- 223.5.5.5 - "host.docker.internal:host-gateway"
- 223.6.6.6
environment: environment:
ENVIRONMENT: production ENVIRONMENT: production
SECRET_KEY: ${SECRET_KEY:-change-me-to-a-real-secret-key} 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 STORAGE_ROOT: /app/data
DEFAULT_STORAGE_QUOTA: "104857600" DEFAULT_STORAGE_QUOTA: "104857600"
DEFAULT_MAX_FILE_SIZE: "20971520" DEFAULT_MAX_FILE_SIZE: "20971520"
@@ -43,28 +27,19 @@ services:
- app_data:/app/data - app_data:/app/data
ports: ports:
- "8000:8000" - "8000:8000"
depends_on:
mysql:
condition: service_healthy
healthcheck: healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')"] test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')"]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
# ---------- 前端(构建后由宝塔 Nginx 直接 serve 静态文件)---------- # ---------- 前端 ----------
# 不需要运行容器,构建完把 dist 目录复制到服务器即可
# 或者用下面的容器暴露 5173 端口
frontend: frontend:
build: build:
context: ./frontend context: ./frontend
restart: unless-stopped restart: unless-stopped
dns:
- 223.5.5.5
- 223.6.6.6
ports: ports:
- "5173:80" - "5173:80"
volumes: volumes:
mysql_data: app_data:
app_data:
+2 -11
View File
@@ -1,13 +1,6 @@
#!/bin/bash #!/bin/bash
# ============================================================ # ============================================================
# AI Knowledge Link — 一键更新脚本 # AI Knowledge Link — 一键更新脚本
# 在服务器项目目录执行:bash update.sh
#
# 功能:
# 1. 拉取最新代码
# 2. 重新构建镜像
# 3. 重启服务(数据库不丢失)
# 4. 执行数据库迁移(如有新迁移)
# ============================================================ # ============================================================
set -e set -e
@@ -29,11 +22,9 @@ docker compose up -d
# 4. 数据库迁移 # 4. 数据库迁移
echo "[4/4] 执行数据库迁移..." echo "[4/4] 执行数据库迁移..."
sleep 5 sleep 3
docker compose exec -T backend alembic upgrade head docker compose exec -T backend alembic upgrade head
# 5. 完成
echo "" echo ""
echo "更新完成!$(date '+%H:%M:%S')" echo "更新完成!$(date '+%H:%M:%S')"
echo "服务状态:" docker compose ps
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"